Маршрутизация SPA с RESTful API с использованием HATEOAS - PullRequest
0 голосов
/ 08 мая 2020

При использовании маршрутизации в веб-приложении SPA (angular, react, et c) пользователю не нужно начинать с точки входа в приложение. Они могут использовать URL-адрес в браузере для перехода к любой части приложения.

При реализации HATEOAS в API-интерфейсе RESTful мы предполагаем, что интерфейс знает только URL-адрес точки входа API, а затем API предоставляет ссылки на другие части приложения оттуда.

Итак, возникает вопрос: если пользователь вводит URL-адрес в браузере, который загружает определенную c часть SPA ( не точка входа), как SPA получает соответствующую ссылку API, необходимую только для этой части SPA?

Неужели SPA просто выполняет сразу несколько вызовов API, начиная с точки входа API и переходя по ссылкам, пока не получит ссылку, необходимую для состояния, которое необходимо загрузить? И что происходит, когда API не включает необходимую ссылку, потому что это недействительная ссылка на основе текущего состояния приложения?

HATEOAS, похоже, не очень совместим с современным SPA, где вы можете загружать приложение в очень конкретных c разделах / состояниях.

1 Ответ

1 голос
/ 08 мая 2020

Об этом уже спрашивали на SO раньше, но мне трудно найти эти прошлые вопросы и ответы. Я ответил как минимум на два, но я резюмирую, как на это обычно отвечают.

Лагерь 1: Не делайте SPA, это не имеет смысла. Ваша служба HATEOAS должна обслуживать все состояние таким образом, чтобы клиент мог интерпретировать их, а SPA - это, по сути, взлом.

Лагерь 2 (лагерь, в котором я нахожусь): вам понадобится способ сопоставить ссылки SPA на ссылки на вашем сервере.

Вы как бы описываете это, говоря о «всех необходимых шагах», чтобы добраться до нужного ресурса, но если ваша цель в конечном итоге сопоставляет это с API uri, почему бы и нет вставьте только это

https://spa.example/http://api.example/some/resource

Наличие URL-адресов для закладок, содержащих полный путь к вашему бэкэнду, означает, что вам не нужно перепрыгивать через сложные обручи, и ваш SPA является настоящим клиентом для API, который вы создаете.

Еще одним приятным преимуществом является то, что вы также можете легко указать своему клиенту на несколько сред live / dev.

Наконец, вы можете разрешить относительные URL-адреса и автоматически преобразовать их в URL-адрес API, сократив: От

https://spa.example/http://api.example/some/resource

до

https://spa.example/some/resource
...