ОТДЫХ. Должен ли клиент API «переходить» на «следующий» ресурс, такой как браузер? - PullRequest
0 голосов
/ 01 ноября 2018

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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

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

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

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

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

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

0 голосов
/ 01 ноября 2018

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

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

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

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

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

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

Филдинг, запись в 2008

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

...