Предположим, у меня есть API, который имеет два вызова:
/list
/detail
И / list используется для получения списка представлений заголовка некоторого объекта, который у меня есть (возможно, ID и заголовок), а / detail получает полную информацию для одного из объектов из списка. / List не имеет параметров и возвращает массив JSON. / Detail - это пост-запрос, и предполагается, что в качестве параметра post body ему будет предоставлен объект JSON, и у этого объекта JSON есть некоторый шаблон, которому он должен следовать, что позволит серверу выяснить, какому объекту пользователь хочет получить подробную информацию для.
Предположим, что у меня есть веб-сайт, который взаимодействует с API и использует вызовы API для создания веб-сайта.
У меня вопрос, если кто-то вызывает / detail без идентификатора или с идентификатором, который не существует, должен ли ответ быть 400 или 500? Аргументом для того, чтобы сделать ответ кодом ошибки 400, является тот факт, что с точки зрения сервера запрос искажен, поэтому запрос неверен.
Однако, если мы примем точку зрения пользователя веб-сайта, запрос, вероятно, был совершенно разумным с точки зрения браузера, но проблема заключалась в том, что сервер предоставил неверные данные (при первом вызове), или сервер предоставил веб-страница, которая создала искаженный объект JSON для отправки на сервер (или любые другие проблемы, которые могут существовать из-за ошибок на сервере или ошибок на веб-странице, которую обслуживал сервер), так что конечный пользователь, вероятно, ничего не имеет веб-сайт может решить эту проблему, поэтому у нас также есть разумный аргумент для того, чтобы сделать ответ 500 внутренней ошибкой сервера, с интерпретацией, что проблема связана с сервером, но «что-то» может не иметь ничего общего с сервером. этот конкретный вызов, поскольку исходная проблема возникла в другом месте базы кода (либо в вызове, который создал неверный список, либо в другом вызове, который возвратил веб-страницу, которая не могла должным образом взаимодействовать с остальной частью экосистемы).
Существует ли какой-либо стандарт, который может быть применен к этому делу? Вся найденная мною документация касается более четких случаев, например, вызывающая сторона - это другой сервер, предоставивший искаженный запрос, или пользователь-пользователь отправил форму, в которой отсутствовали некоторые поля, и в этом случае соответствующий код ответа намного проще идентифицировать.