Возврат неверного запроса (400) или внутренней ошибки сервера (500) - PullRequest
0 голосов
/ 20 мая 2019

Предположим, у меня есть API, который имеет два вызова:

/list
/detail

И / list используется для получения списка представлений заголовка некоторого объекта, который у меня есть (возможно, ID и заголовок), а / detail получает полную информацию для одного из объектов из списка. / List не имеет параметров и возвращает массив JSON. / Detail - это пост-запрос, и предполагается, что в качестве параметра post body ему будет предоставлен объект JSON, и у этого объекта JSON есть некоторый шаблон, которому он должен следовать, что позволит серверу выяснить, какому объекту пользователь хочет получить подробную информацию для.

Предположим, что у меня есть веб-сайт, который взаимодействует с API и использует вызовы API для создания веб-сайта.

У меня вопрос, если кто-то вызывает / detail без идентификатора или с идентификатором, который не существует, должен ли ответ быть 400 или 500? Аргументом для того, чтобы сделать ответ кодом ошибки 400, является тот факт, что с точки зрения сервера запрос искажен, поэтому запрос неверен.

Однако, если мы примем точку зрения пользователя веб-сайта, запрос, вероятно, был совершенно разумным с точки зрения браузера, но проблема заключалась в том, что сервер предоставил неверные данные (при первом вызове), или сервер предоставил веб-страница, которая создала искаженный объект JSON для отправки на сервер (или любые другие проблемы, которые могут существовать из-за ошибок на сервере или ошибок на веб-странице, которую обслуживал сервер), так что конечный пользователь, вероятно, ничего не имеет веб-сайт может решить эту проблему, поэтому у нас также есть разумный аргумент для того, чтобы сделать ответ 500 внутренней ошибкой сервера, с интерпретацией, что проблема связана с сервером, но «что-то» может не иметь ничего общего с сервером. этот конкретный вызов, поскольку исходная проблема возникла в другом месте базы кода (либо в вызове, который создал неверный список, либо в другом вызове, который возвратил веб-страницу, которая не могла должным образом взаимодействовать с остальной частью экосистемы).

Существует ли какой-либо стандарт, который может быть применен к этому делу? Вся найденная мною документация касается более четких случаев, например, вызывающая сторона - это другой сервер, предоставивший искаженный запрос, или пользователь-пользователь отправил форму, в которой отсутствовали некоторые поля, и в этом случае соответствующий код ответа намного проще идентифицировать.

1 Ответ

2 голосов
/ 20 мая 2019

Если в теле вашего запроса отсутствует какое-либо свойство, это ошибка клиента и должна быть в диапазоне ошибок 4xx.400 работает для этого, но 422, вероятно, немного лучше.

Как вы упоминаете, эта проблема может возникнуть как побочный эффект другой ошибки на стороне сервера.Однако HTTP обычно работает так, что коды состояния относятся только к фактически выполняемому вами запросу, а не к серии событий, которые могли привести к выполнению этого запроса.

...