RESTful способ обработки отсутствующих данных - PullRequest
2 голосов
/ 11 августа 2010

Я занимаюсь разработкой RESTful API.Один из URL-адресов позволяет вызывающей стороне запрашивать запись для конкретного человека по идентификатору.

Какое стандартное значение для возврата записи для этого идентификатора не существует?Должен ли сервер отправить обратно пустой объект или, может быть, 404, или что-то еще?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 11 августа 2010

Обычно я возвращаю ошибку 404 из моего RESTful API в этих случаях, основываясь на соглашении, используемом CodeIgniter Rest Server .

По большей части это нормально работает и является наиболее «правильным» и «чистым» решением.Однако ошибка 404 может усложнить обработку этих «пропущенных» случаев на клиенте, потому что вам может понадобиться отдельный обработчик ошибок вместо того, чтобы просто ничего не делать, потому что вы вернули пустой объект.

Я бы порекомендовалвзвесить за и против обоих подходов и реализовать подход, который имеет для вас наибольшее значение.

1 голос
/ 11 августа 2010

404, или, возможно, 410 (ушел), если он был там раньше (но 404 также не ошибается в этом случае).

Как всегда с REST, также предпочтительно отправить представление с ним (даже с кодом 4xx), чтобы сообщить клиенту, что ресурс не существует, и сообщить ему, какие возможные действия он может предпринять оттуда.

0 голосов
/ 12 августа 2010

В дополнение к рассмотрению 404, я бы рассмотрел возможность возврата некоторого представления «пусто»: рассмотрим в Google поиск по слову klinjeraliknoplidocus .На момент написания этой статьи он возвращает 200 OK с "без совпадений" и предложениями о том, как двигаться дальше.Он не возвращает 404, поскольку URI http://www.google.com/search?q=klinjeraliknoplidocus на самом деле что-то идентифицирует, а именно: «Все документы, известные Google, связанные с термином klinjeraliknoplidocus ».Довольно скоро эта страница появится там.

Итак:

  • , если вы определяете функцию поиска как возвращающую ноль или более элементов с этим идентификатором, то 200, и пустой ответ имеет смысл.
  • если вы определяете свою функцию поиска как возвращающую ровно один элемент, тогда имеет смысл 404 (или 410).
...