2015-11-19 3 views
0

Рассмотрим эти конечные точки на качестве API, который возвращает исключительно Json:Что такое правильный ответ на нулевой вложенном свойстве ресурса

  • GET /cities/{id}/stores
  • GET /cities/{id}/mayor

Оба store и mayor объекты, которые могут имеют собственные скалярные свойства.

Отношение city->stores отношение единообразное отношение, но отношения city->mayor взаимно однозначно. В обоих случаях результат может быть нулевым.

Я согласен, что бы

GET /stores/{id}, GET /cities/{id} и GET /mayors/{id} должен возвращать 404, когда ресурс с таким идентификатором не существует.

Однако, если в городе нет магазинов, тогда я ожидал бы GET cities/{id}/stores, чтобы вернуть [].

Мой вопрос: учитывая, что в городе нет нынешнего мэра, что должно быть GET /cities/{id}/mayor возвращение?

ответ

1

Если мэр данного города не установлен и существует в отношениях один к одному, то код состояния должен быть возвращен 404.

Возвращаемые значения null не имеют смысла - поскольку пользователи API не будут знать, как справиться с этим значением.

Другой вариант, чтобы изменить эту конечную точку от мэра до мэры и вернуть пустую коллекцию или коллекцию с одной записью всегда - однако это не очень хорошая идея, должна быть хорошо документирована и вообще я сожалею, что я предложил it;)

Вы также можете включить мэра в город, а затем в возвращенном JSON установить его значение в null, если оно отсутствует.

+0

Встраивание мэра в город всегда является опцией, но на самом деле я задавал этот вопрос, потому что я хотел бы уйти от встраивания слишком большого количества вложенных объектов в ответ, это означает, что на стороне сервера больше вызовов на db, иногда сериализация дорогостоящий. Плюс проверки авторизации становятся ад, если вы начинаете вложенные ресурсы в ответы - вы никогда не знаете, что можно посмотреть где. Тем не менее, 404 кажется наиболее логичным ответом - просто кажется немного странным, что клиент получит ошибку только для проверки, является свойством ресурса null или нет. Благодаря! – mickadoo

+0

В таком случае, возможно, вам следует исследовать язык запросов ресурсов? – Opal

Смежные вопросы