RestApi: 404, 422 или 500? - PullRequest
       14

RestApi: 404, 422 или 500?

0 голосов
/ 14 марта 2019

Предположим, у нас есть два объекта.post и comment.post имеет n- comment с.

Если я хочу получить (или изменить) comment из post, тогда я также могу сделать
[DELETE, GET, PATCH] posts/{postId}/comments/{commentId}
вместо
[DELETE, GET, PATCH] GET comments/{commentId}

Но ... что, когда сервер замечает, что данный commentId завершается, но имеет другой postId, как говорит клиентский запрос?Это ...

  1. 404 (не найден) - потому что полный путь не существует.
  2. 422 (необработанный объект) - потому что синтаксис правильный, а семантика - нет.
  3. 500 (внутренняя ошибка сервера) - см. Непредвиденное состояние (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500).

1 Ответ

2 голосов
/ 14 марта 2019

Это определенно ошибка клиента , поэтому правильный код состояния должен находиться в диапазоне 4xx.


Когда представление ресурса не может бытьнайденный для данного URI, сервер должен вернуть ответ с кодом состояния 404:

6.5.4.404 Не найдено

Код состояния 404 (Не найден) указывает на то, что исходный сервер не нашел текущее представление для целевого ресурса или не хочет раскрыть, что он существует.[...]


Код состояния 422 предназначен для указания полезной нагрузки, которая синтаксически действительна , но семантически неверный .

Предположим, например, что у вас есть конечная точка для создания комментариев, а полезная нагрузка должна содержать идентификатор сообщения, которому принадлежит этот комментарий:

POST /comments HTTP/1.1
Host: example.org
Content-Type: application/json

{
  "content": "Awesome post!",
  "postId": 1
}

В этой ситуации, если postId ссылается на сообщение, которое не существует, сервер должен вернуть 422.

...