Большая часть того, что я думал о REST, по-видимому, неверна - и я не один такой. У этого вопроса длинный вводный курс, но он кажется необходимым, поскольку информация немного разрознена. Собственно вопрос стоит в конце, если вы уже знакомы с этой темой.
Из первого абзаца REST API Роя Филдинга должно быть гипертекстовое управление , довольно ясно, что он считает, что его работа широко неверно интерпретируется:
Меня разочаровывает количество людей, называющих любой интерфейс на основе HTTP REST API. Сегодняшним примером является API REST SocialSite . Это RPC. Он кричит RPC. На дисплее так много сцепления, что ему следует дать оценку X.
Далее Филдинг перечисляет несколько атрибутов REST API. Некоторые из них, похоже, противоречат как обычной практике, так и общим советам на SO и других форумах. Например:
REST API следует вводить без каких-либо предварительных знаний, кроме исходного URI (закладки) и набора стандартизованных типов мультимедиа, которые подходят для предполагаемой аудитории (т. Е. Должны быть поняты любым клиентом, который может использовать API). ...
REST API не должен определять фиксированные имена ресурсов или иерархии (очевидная связь клиента и сервера). ...
REST API должен тратить почти все свои описательные усилия на определение типов мультимедиа, используемых для представления ресурсов и управления состоянием приложения, или на определение расширенных имен отношений и / или разметки с поддержкой гипертекста для существующих стандартных типов мультимедиа. ...
Идея «гипертекста» играет центральную роль - гораздо больше, чем структура URI или значения HTTP-глаголов. «Гипертекст» определяется в одном из комментариев:
Когда я [Филдинг] говорю «гипертекст», я имею в виду одновременное представление информации и элементов управления, так что информация становится аффордансом, посредством которого пользователь (или автомат) получает выбор и выбирает действия. Гипермедиа - это просто расширение того, что означает текст, для включения временных привязок в медиапоток; большинство исследователей отказались от этого различия.
Гипертекст не обязательно должен быть HTML в браузере. Машины могут переходить по ссылкам, когда они понимают формат данных и типы отношений.
Я предполагаю на данный момент, но первые два пункта выше, похоже, предполагают, что документация API для ресурса Foo, которая выглядит следующим образом, приводит к тесной связи между клиентом и сервером и не имеет места в системе RESTful.
GET /foos/{id} # read a Foo
POST /foos/{id} # create a Foo
PUT /foos/{id} # update a Foo
Вместо этого агент должен быть вынужден обнаруживать URI для всех Foos, например, отправив запрос GET для / foos. (Эти URI могут соответствовать приведенному выше шаблону, но это не относится к делу.) В ответе используется тип мультимедиа, способный передавать, как получить доступ к каждому элементу и что с ним можно сделать, что дает начало третьему пункту выше. . По этой причине документация по API должна быть сосредоточена на объяснении того, как интерпретировать гипертекст, содержащийся в ответе.
Кроме того, каждый раз, когда запрашивается URI ресурса Foo, ответ содержит всю информацию, необходимую для агента, чтобы узнать, как действовать, например, путем доступа к связанным и родительским ресурсам через их URI или путем выполнения действий после создания. / удаление ресурса.
Ключ ко всей системе состоит в том, что ответ состоит из гипертекста, содержащегося в типе мультимедиа, который сам передает агенту варианты действий. Это мало чем отличается от того, как браузер работает для людей.
Но это только мое лучшее предположение в данный момент.
Филдинг опубликовал продолжение, в котором он ответил на критику, что его обсуждение было слишком абстрактным, лишенным примеров и богатым жаргоном:
Другие попытаются расшифровать то, что я написал, способами, более прямыми или применимыми к некоторым практическим интересам сегодняшнего дня. Я, вероятно, не буду, потому что я слишком занят следующей темой, подготовкой к конференции, написанием нового стандарта, поездкой в какое-то отдаленное место или просто делом мелочей, которые позволяют мне почувствовать, что я заработал свою зарплату.
Итак, два простых вопроса для экспертов REST с практическим мышлением: как вы интерпретируете то, что говорит Филдинг, и как вы применяете это на практике при документировании / внедрении REST API?
Изменить: этот вопрос является примером того, как трудно что-то узнать, если у вас нет названия для того, о чем вы говорите. Имя в данном случае - «Гипермедиа как механизм состояния приложения» (HATEOAS).