Код статуса HTTP для ограничения обработки на стороне сервера - PullRequest
1 голос
/ 14 октября 2019

Какой правильный код статуса HTTP, когда сервер не может обработать ответ из-за большого количества записей, которые есть в базе данных (может быть из-за большого размера записи, и его обработка займет слишком много времени)) как часть запроса, отправленного пользователем? Мы хотели сказать клиенту, что было слишком много записей. В этом случае запрос является семантически правильным, но поскольку сервер не может обработать его из-за ограничения вычислительной мощности , мы должны дать ответ об ошибке.

ДляНапример, скажем, клиент пытался сгенерировать все транзакции за последние 3 года из максимально допустимой продолжительности 5 лет. Но так как в течение 3 лет клиент совершил больше транзакций, сервер хотел бы связаться с клиентом, чтобы еще больше сократить продолжительность. Причина в том, что аппаратные ресурсы на стороне сервера ограничены и не могут обрабатывать это огромное количество записей.

Не следует относить его к категории ошибок 4xx, поскольку это не проблема с клиентом, верно? Если да, то какой код СТАТУСА 5xx лучше всего установить для этого?

1 Ответ

1 голос
/ 14 октября 2019

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

Конечно, если это была просто ошибка сервера, которую вы не ожидали - это должна была быть 500 Internal Server Error. Но вы решили жить с этим дефектом, так что теперь это часть вашего контракта. И клиент должен знать, что если такая ошибка произойдет - нужно запросить более узкий период.

В вашем случае, поскольку синтаксис правильный, 422 Unprocessable Entity , вероятно, является лучшим вариантом. Это все еще немного, так как 422 должен использоваться, когда клиент отправляет объект, который не имеет смысла логически, но это самый близкий код, который существует там. Вы всегда можете включить больше подробностей в тело ответа.

Примечание: это расширенный код WebDAV , а не исходный код HTTP. Если вы хотите использовать чистый HTTP, я бы использовал 400 и указал причину в теле, чтобы клиент мог разобрать ее. Я не думаю, что в чистом HTTP есть что-то подходящее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...