Некоторые разработчики ведут дружеское (некоторые сказали бы, религиозное) обсуждение вопроса о том, должен ли запрос GET от RESTful API возвращать идентификатор запрошенного ресурс. Предположим, следующий запрос GET:
http://my.api.com/rest/users/23
В настоящее время возвращается:
{"name": "Jim", "age": 40, "favoriteColor": "blue"}
Обратите внимание, что «id» отсутствует в наборе результатов.
По сути, с этой проблемой борются четыре лагеря.
ЛАГЕРЬ №1: когда вызывающие абоненты отправляют запрос GET, они уже знают идентификатор. Таким образом, набор результатов не должен содержать идентификатор. Если вызывающим абонентам нужны эти данные для включения редактирования пользовательского интерфейса, тогда вызывающим абонентам необходимо передать идентификатор 23, возможно, вручную добавив член {"id": 23} в JSON.
Люди из лагеря № 1 также утверждают, что наличие идентификатор в результирующем наборе будет указывать на то, что это значение можно изменить, чего, конечно же, нельзя.
ЛАГЕРЬ №2: без идентификатора набор результатов JSON не может использоваться изначально для операций редактирования / обновления в формах пользовательского интерфейса. Вместо этого механизм обратного вызова AJAX должен отвечать за передачу полей идентификатора и ручное добавление их в набор результатов. Это кажется странным и подверженным ошибкам. Специалисты по пользовательскому интерфейсу утверждают, что в результирующем наборе "ощущается" отсутствие данных, которые должны присутствовать, а именно идентификатора.
ЛАГЕРЬ №3: Эти люди озабочены единообразием. Если у нас когда-либо будет коллекция пользовательских объектов, возвращаемых API, эти объекты ДОЛЖНЫ включать идентификатор. Следовательно, для согласованности одноэлементная версия GET также должна включать идентификатор.
ЛАГЕРЬ №4: эти люди предполагают, что запрос GET для пользователя может возвращать метаданные в форме HyperMedia или SelfLinks, которые будут включать идентификатор.
Это не эзотерическое «Кто прав?» аргумент, тоже. Применяемый нами подход будет определять форму нашего API и влиять на рабочую нагрузку нескольких разработчиков в течение следующих нескольких недель.