Большое количество того, что я думал о REST, по-видимому, ошибочно, и я не одинок. Этот вопрос имеет длинный ввод, но он кажется необходимым, потому что информация немного разбросана. Фактический вопрос приходит к концу, если вы уже знакомы с этой темой.
Из первого абзаца Roy Fielding API REST должен быть основан на гипертексте, это довольно ясно, он считает, что его работа широко неверно истолкована:
Меня расстраивает количество людей, вызывающих любой HTTP-интерфейс REST API. Сегодняшним примером является SocialSite REST API. Это RPC. Он кричит RPC. На дисплее так много связи, что ему нужно присвоить рейтинг X.
Фильтрация продолжает перечислять несколько атрибутов REST API. Некоторые из них, похоже, противоречат как обычной практике, так и общим советам на SO и других форумах. Например:
-
API REST должен быть введен без предварительного знания за пределами исходного URI (закладки) и набора стандартных типов медиа, которые подходят для целевой аудитории (т.е. ожидается, что их понимает любой клиент, который может использовать API)....
-
API REST не должен определять фиксированные имена ресурсов или иерархии (очевидное соединение клиента и сервера)....
-
API REST должен тратить почти все свои описательные усилия на определение типов (-ов) носителей, используемых для представления ресурсов и управления состоянием приложения, или для определения расширенных имен отношений и/или гипертекстовой разметки для существующие стандартные типы носителей....
Идея "гипертекста" играет центральную роль - гораздо больше, чем структура URI или то, что означают HTTP-глаголы. "Hypertext" определен в одном из комментариев:
Когда я [Fielding] говорит гипертекст, я имею в виду одновременное представление информации и элементов управления, так что информация становится доступной, благодаря которой пользователь (или автомат) получает выбор и выбирает действия. Hypermedia - это просто расширение, на котором текст означает включение временных якорей в медиа-поток; большинство исследователей отказались от различия.
Hypertext не обязательно должен быть 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 там с практическим мышлением: как вы интерпретируете то, что говорит Филдинг, и как вы применяете его на практике при документировании/реализации API REST?
Изменить: этот вопрос является примером того, как трудно научиться чему-то, если у вас нет имени того, о чем вы говорите. В этом случае именем называется "Hypermedia as Engine of Application State" (HATEOAS).