Обратите внимание на следующее от Roy Fielding относительно дизайна REST, руководящих принципов и принципов.
5.2.1.1 Ресурсы и идентификаторы ресурсов
Ключевая абстракция информации в REST - это ресурс. Любая информация, которая может быть названа, может быть ресурсом: документ или изображение, временная служба (например, «сегодняшняя погода в Лос-Анджелесе»), набор других ресурсов, не виртуальный объект (например, человек) и т. Д. , Другими словами, любой концепт, который может быть целью гипертекстовой ссылки автора, должен вписываться в определение ресурса.
Ресурс - это концептуальное отображение набора сущностей, а не объект, который соответствует отображению в любой конкретной точке в времени.
Точнее говоря, ресурс R представляет собой изменяющуюся во времени функцию членства MR (t), которая для времени t отображается на набор объектов или значений, которые эквивалентны. Значения в наборе могут быть представлениями ресурса и / или идентификаторами ресурса. Ресурс может отображаться на пустой набор, что позволяет делать ссылки на концепцию до того, как будет реализована любая реализация этой концепции - понятие, которое было чуждо большинству гипертекстовых систем до появления в Интернете [61]. Некоторые ресурсы имеют статус c в том смысле, что при рассмотрении в любое время после их создания они всегда соответствуют одному и тому же набору значений. Другие имеют высокую степень отклонения в их значении с течением времени.
Единственное, что требуется, чтобы быть stati c для ресурса, это семантика сопоставления, поскольку именно семантика - это то, что отличает один ресурс из другого.
Ключевые пункты выделены жирным шрифтом, остальная часть абзаца, который я включил, предназначена для контекста.
Вот сценарий.
У меня есть веб-API с конечной точкой: http://www.myfakeapi.com/people
Когда клиент выполняет запрос GET к этой конечной точке, он получает список людей.
Person
{
"Name": "John Doe",
"Age": "23",
"Favorite Color": "Green"
}
Хорошо, это круто.
Но разве это противоречит методам и принципам дизайна REST, если у меня есть «Персона», у которой нет избранного цвета, и я хочу вернуть ее так:
Person
{
"Name": "Bob Doe",
"Age": "23",
}
Или я должен возвращайте их так:
Person
{
"Name": "Bob Doe",
"Age": "23",
"Favorite Color": null
}
Проблема в том, что клиент, запрашивающий ресурс, должен выполнить дополнительную работу, чтобы увидеть, существует ли свойство вообще. У некоторых людей есть любимые цвета, а у некоторых нет. Противозаконно ли принципам REST просто опускать свойство json «Любимый цвет», если они не существуют, или этому свойству должно быть присвоено «нулевое» или пустое значение?
Что говорит REST о это? Я думаю, что я должен вернуть нулевое значение и не изменять представление ресурса, который запрашивает клиент, с помощью , пропуская свойств.