Мы ищем некоторые советы по работе с URL-адресов (и состояние, связанное с каждой URL) в вебе-приложении, подкрепленной API HATEOAS REST, более конкретно наURL обработка в гипермедиа (HATEOAS), приводимое AngularJS применение
- как избежать URL-адреса веб-приложений в сочетании с REST API URL-
- как обрабатывать несколько ресурсов в одном представлении
Но позвольте мне сначала обеспечить более некоторый контекст:
Мы строим приложение углового веб-сайта поверх слоя REST с ограничением Hypermedia. (Примечание. Я предпочитаю просто использовать термин «Гипермедиа (ограничение)» над HATEOAS).
Как указано в ограничении Hypermedia, доступные действия и ссылки в приложении в любой момент времени предоставляются API REST. Таким образом, веб-приложение не должно содержать никаких жестко запрограммированных URL-адресов REST API, за исключением «root» (если предположить, что концепция действительно существует в REST API).
С другой стороны, каждая страница в веб-приложении должна быть заклассифицирована. Поэтому мы не можем создать приложение с черным ящиком (с единственным URL-адресом и всеми изменениями состояния, которые обрабатываются в SPA без изменения URL-адреса). Это означает, что веб-приложение также имеет свое URL-пространство, которое необходимо каким-то образом сопоставить с URL-адресом URL-адреса REST API. Это уже конфликт с идеей Hypermedia.
В Угловом приложении мы используем UI Router для управления состоянием приложения. Вот как мы получили это работает:
- Мы только определить состояния, не URLS
- Мы определили обработчик $ urlRouterProvider.otherwise который будет отображать текущий URL веб-приложения к corrsponding REST API URL, получить представление ресурса, который соответствует этому URL REST и передает его контроллеру (в $ stateParams).
- Контроллер может затем использовать эти данные (и ссылки и действия) в представлении, так же, как это было бы, если бы сделал REST называть себя (или через службу)
До сих пор так хорошо (или нет на самом деле), потому что есть некоторые недостатки этого подхода:
- URL-адреса веб-приложения отображаются в REST API URL, так как URL пространства связаны между собой, что противоречит одной из основных предпосылок использования HyperMedia ограничения : мы не можем изменить URL-адрес API REST без изменения веб-приложения.
- В обработчике $ urlRouterProvider.otherwise мы получаем представление текущего URL-адреса веб-приложения. Но в некоторых случаях у нас есть два ресурса в одном представлении (с использованием вложенных состояний UI Router): например, список элементов и деталь одного элемента. Но есть только один URL-адрес, поэтому восстанавливается только представление детали элемента, а список элементов остается пустым.
Поэтому мы хотели бы услышать некоторые предложения о том, как мы могли бы улучшить наш подход при обработке двух URL-адресов. Есть ли лучший способ сделать REST API диктующим (доступным) поведением веб-приложения и все еще иметь URL-адреса закладки в веб-приложении? Потому что теперь у нас есть гибридный подход, который не чувствует себя совершенно правильно.
Заранее спасибо.
С уважением,
Люк
Thats для поиска времени, чтобы придумать хорошие предложения для этой довольно сложной установки. Мне нравится идея службы закладок. Похоже, это хорошее решение для развязки URL-адреса UI из пространства URL-адреса REST. Что касается 2 ресурсов в одном представлении, мы смогли решить эту проблему, добавив ссылку из ресурса детали в ее родительский список. «Чистое» решение гипермедиа, обеспечивающее требуемые результаты. –
Все хорошие моменты у Криса. Я знаю, что это устаревшая публикация, но для будущих поисковиков SO я бы добавил, что (в дополнение к вышеупомянутым подходам) вы должны изучить вопрос о возврате типа отношения «закладки» при возврате списка ссылок ресурсов. См. Http://www.w3.org/TR/html5/links.html#link-type-bookmark для получения дополнительной информации. –