REST. Должен ли клиент API переходить к следующему ресурсу, такому как браузер?

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

В настоящее время с моими проектами API я возвращаю ссылки в элементах и ​​в нижней части ресурсов. Они выполняют действия, изменяют состояние или возвращают другие ресурсы.

Но это как если бы каждая ссылка открывалась в новой вкладке; клиент исследует новый маршрут, и его следующие варианты могут сузиться по мере продвижения.

Если бы это был веб-сайт, это не обязательно был бы хороший дизайн. Пользователю придется либо открывать ссылки в новых вкладках, либо постоянно создавать резервные копии стека, чтобы добиться цели.

Хорошие сайты работают только вперед или действительно имеют способ указать ответвление от основного потока, то есть ссылки, автоматически открывающиеся в новых окнах (через тег привязки target).

Так должен ли хороший REST API быть спроектирован так, как будто клиент отбрасывает текущий ресурс и переходит к следующему и всегда продвигается вперед?

Или мы предполагаем, что клиент строит карту по ходу дела, как Roomba, исследующий нашу гостиную?

Суть концепции карты в том, что знание, которое следует вернуться к предыдущему ресурсу, из многих, о которых он может знать, находится в разумном человеке, в догадке. Компьютеры не способны угадывать, поэтому им нужно программирование, а это подразумевает внеплановую статическую документацию и нарушает REST.


person Luke Puplett    schedule 01.11.2018    source источник


Ответы (2)


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

Да, хороший REST API очень похож на машиночитаемый веб-сайт.

Так должен ли хороший REST API быть спроектирован так, как будто клиент отбрасывает текущий ресурс и переходит к следующему и всегда продвигается вперед?

Типа - клиенту разрешено кэшировать представления; поэтому, если вы предоставляете ссылку, клиент может «перейти» по ссылке к кэшированному представлению, а не использовать сервер.

Это также означает, что клиент может по своему усмотрению «нажать кнопку «Назад», чтобы уйти и сделать что-то еще (например, если ссылка, которую он надеялся найти, отсутствует, он может попытаться достичь своей цели). другой путь). Это часть мотивации ограничения «без гражданства»; серверу не нужно притворяться, что он знает текущую отображаемую страницу клиента, чтобы интерпретировать сообщение.

Компьютеры не способны угадывать, поэтому им нужно программирование, а это подразумевает внеплановую статическую документацию и нарушает REST.

Филдинг, написал в 2008 году

Конечно, у клиента есть предварительные знания. Каждый протокол, каждое определение типа мультимедиа, каждая схема URI и каждый тип отношения ссылки составляют предварительное знание, которое клиент должен знать (или выучить), чтобы использовать это знание. REST не устраняет необходимость в подсказке. Что делает REST, так это концентрирует эту потребность в предварительных знаниях в легко стандартизируемых формах. В этом существенное различие между интеграцией, ориентированной на данные, и интеграцией, ориентированной на управление.

person VoiceOfUnreason    schedule 01.11.2018

Я нашел этот самородок в оригинальной работе Филдинга.

https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Таким образом, модельное приложение представляет собой механизм, который переходит из одного состояния в другое, исследуя и выбирая альтернативные переходы состояний в текущем наборе представлений. Неудивительно, что это точно соответствует пользовательскому интерфейсу браузера гипермедиа. Однако стиль не предполагает, что все приложения являются браузерами. На самом деле детали приложения скрыты от сервера универсальным интерфейсом соединителя, и, таким образом, пользовательский агент может в равной степени быть автоматическим роботом, выполняющим поиск информации для службы индексирования, личным агентом, ищущим данные, соответствующие определенным критериям, или сервисным агентом. паук занят патрулированием информации на предмет неработающих ссылок или измененного контента [39].

Это читается так, как будто отличное приложение REST должно быть создано только для продвижения вперед, как отличный веб-сайт должен быть простым в использовании даже без кнопки «Назад», включая переход к ранее просмотренному представлению (ссылки на домашнюю страницу и поиск всегда доступны).

Интересно, что в веб-дизайне мы обычно думаем о пути пользователя, и термин путешествие является общей частью нашего языка разработчиков, но в дизайне API он еще не проник.

person Luke Puplett    schedule 22.11.2018