#rest #http-status-code-404 #semantics
#rest #http-status-code-404 #семантика
Вопрос:
Так что я на самом деле не поклонник RESTful API, но там, где я нанят, они все еще часто используются.
Итак, я придумал гипотетический случай, который отображает мое замешательство:
Представьте, что у вас есть конечная GET v1/users/{id}
точка.
Теперь представьте, что на данный момент есть только один пользователь с id 1
.
Как мне отличить 404, возвращенный
GET /v1/users/0
и возвращаемого
GET /v1/usres/1
? (опечатка нарочно)
Ответ №1:
Как мне отличить 404, возвращенный….
Тело ответа, см. Семантику HTTP
За исключением случаев ответа на запрос HEAD, сервер ДОЛЖЕН отправить представление, содержащее объяснение ситуации с ошибкой, и является ли это временным или постоянным условием.
GET /v1/users/0
404 Not Found
Content-Type: text/plain
There is currently no user 0 in the database
GET /v1/usres/1
404 Not Found
Content-Type: text/plain
usres? What are you talking about?
Did you mean?
* /v1/users/1
* /v1/ursae/1
С точки зрения компонента общего назначения — например, браузера или кэша — между этими двумя случаями нет абсолютно никакой разницы.
Но для клиента (человека, просматривающего веб-страницу, или машинного компонента, который осведомлен о семантике ваших ресурсов), разумно захотеть сообщить им о различиях.
Для человека это означает возврат текста, который объясняет проблему, в тело ответа (например, на HTML-странице).
Для машины это означает ввод сигналов, которые были определены вашей схемой, чтобы машины могли различать два случая.