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