На языке REST, в чем разница между ресурсом и представлением?

9

Я понимаю, что REST позволяет моделировать операции сервиса как представление состояния и переход из одного состояния в другое с использованием HTTP. Я всегда понимал ресурсы как представления о состоянии сервисной стороны до недавнего времени, когда читал эту статью Джимми Богарда, которого я знаю как умного разработчика / архитектора, которого уважает сообщество. Цитировать конкретное утверждение из этого поста

Представление немного отличается - оно описывает текущее состояние ресурса (по запросу).

Это оставило меня в замешательстве. Каково общепринятое мнение по теме?

Suhas
источник
1
Вы можете проверить: какие темы я могу задать здесь? , Опросы общественного мнения не для программистов.
Адам Цукерман
2
Ну, все, что перечислено на этой странице, не имеет ответа в черном и белом, но все мнения. Кроме того, я не уверен, как этот вопрос о мнении. Это только потому, что я использовал слово «мнение» в своем вопросе?
Suhas
В первую очередь да. К сожалению (или, возможно, к счастью), слова «мнение», «лучшая практика» и тому подобное были тесно связаны с «пустой резонансной полостью, в которой должен быть мозг», поскольку большинство людей, использующих такие термины, просто хотят разыскать стадо. на расстоянии и отправляйся за ним. Люди, ищущие определения слов, часто являются худшими преступниками. Какую конкретную проблему вы пытаетесь решить?
Роберт Харви
1
Что касается вашего вопроса, ресурс - это просто «что-то в Интернете с адресом», в то время как представление - это «способ представления вещи в Интернете». Это может быть файл, веб-страница или документ JSON. Это может быть файл определенного типа, например документ Word или электронная таблица. Во всех этих случаях представление - это то, что вы извлекаете. «Текущее состояние ресурса» - это признание того, что объект мог измениться с момента его последнего извлечения.
Роберт Харви

Ответы:

14

Короткий ответ

Карта не территория.

Более длинный ответ - как ни с чем REST, место , чтобы начать с Рой Филдинг диссертации ; в частности глава 5 . Для вашего текущего вопроса вы хотите раздел 5.2.1.

REST определяется четырьмя интерфейсными ограничениями: идентификация ресурсов; манипулирование ресурсами через представления; информативные сообщения; и гипермедиа как двигатель состояния приложения.

Ресурс

Ключевая абстракция информации в REST - это ресурс. Любая информация, которая может быть названа, может быть ресурсом: документ или изображение, временная служба (например, «сегодняшняя погода в Лос-Анджелесе»), набор других ресурсов, не виртуальный объект (например, человек) и т. Д. , Другими словами, любая концепция, которая может быть целью гипертекстовой ссылки автора, должна соответствовать определению ресурса. Ресурс - это концептуальное отображение набора сущностей, а не сущности, которая соответствует сопоставлению в любой конкретный момент времени.

Представление

Компоненты REST выполняют действия с ресурсом, используя представление для захвата текущего или предполагаемого состояния этого ресурса и передачи этого представления между компонентами. Представление - это последовательность байтов плюс метаданные представления для описания этих байтов. Другие часто используемые, но менее точные имена для представления включают в себя: документ, файл и сущность сообщения HTTP, экземпляр или вариант.

Представление состоит из данных, метаданных, описывающих данные, и, иногда, метаданных для описания метаданных (обычно для проверки целостности сообщения).

Итак: «сегодняшняя погода в Лос-Анджелесе» - это ресурс. Представления кандидатов будут включать: текстовый документ с последним прогнозом от национальной службы погоды; визуальное представление метеорологического радара и аудиозапись прогноза.

VoiceOfUnreason
источник
2

Ресурс - это то, с чем вы работаете. Например, если у вас есть API для переключения определенной лампы, то ресурс - это сама лампа. Ресурс может быть физическим (например, лампа, человек) или нефизическим (например, статья, роль, строка в базе данных), ресурс может быть первичным (например, баланс) или производным (например, транзакция). Ресурс может ссылаться на конкретную сущность (например, пятую лампу, установленную в этой розетке лампы), или он может относиться к роли, которая сопоставляется с другой сущностью в разное время (например, установленная в данный момент лампа, лампа установлена ​​5 августа 2008 г.) или он может отображаться на несколько объектов (например, все лампы в доме).

Представление ресурса - это способ, которым ваша служба сообщает о состоянии ресурса, например, XML, JSON, который представляет состояние лампы.

В REST API ресурс идентифицируется унифицированным идентификатором (например, URI). Один ресурс может иметь несколько представлений, в HTTP REST API вы обычно указываете представление, которое хотите использовать в заголовках HTTP Content-Type и Accept.

Одна из ключевых реалий в архитектуре клиент-сервер состоит в том, что вы не можете донести ресурс до клиента, и вам не следует пытаться сделать его так, как вы. Вместо этого в REST API вы дистанционно манипулируете ресурсом, передавая представления ресурса. Представьте себе, что вы не используете FedEx для лампы, чтобы клиент мог напрямую манипулировать лампой, а вместо этого служба создает представление лампы в формате XML / JSON / protobuf / CSV, а клиент отправляет представление предполагаемых манипуляций. Затем служба манипулирует фактическим состоянием лампы от имени клиента или отклоняет запрос, например, если клиент не авторизован для выполнения операций с лампой. Это может показаться очевидным / расщепление волос, но важно отметить, что, поскольку представление не является самим ресурсом,

Ли Райан
источник
1

Ресурс может быть счетом.

Представление представляет собой счет-фактуру в определенный момент времени в формате JSON или в формате XML. Вы можете получить точно такой же счет позже, это будет тот же ресурс, но в потенциально другом состоянии (отменен, оплачен и т. Д.).

Вы берете текущее состояние счета (например, все данные счета в базе данных) и даете ему конкретное представление (например, html, xml, json) в определенный момент времени для передачи на какое-либо другое устройство (например: браузер)

Брайан Оукли
источник