Код возврата REST API, когда служба отказывается выполнить запрос

Я разрабатываю REST API, представляющий диспетчер задач. Он получает запросы от «пользователей», которые хотят выполнить задачу, но иногда служба может отклонить запрос. Запрос правильно сформирован (пользователь аутентифицирован и авторизован, сообщение запроса может быть понято диспетчером задач и т. д.), Поэтому нет ошибки 4xx: это диспетчер задач, который, возможно, из-за чрезмерной нагрузки или перегрузки, или потому что из-за своей неспособности управлять запросом что, отказывается выполнить запрос. Тем не менее, он может выполнить его позже.

Я мог бы ответить на запрос с помощью объекта JSON, который включает логическое значение «Запрос принят», но я считаю, что 200 - это неправильный код состояния для возврата. Вероятно, мне следует вернуть другой код состояния, который должен достаточно красноречиво указывать на то, что запрос принят или отклонен. Какой код статуса мне следует использовать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
488
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 202 ACCEPTED, если ваш API принимает запрос, но не выполняет его немедленно. Это не совсем ваш случай, если я правильно понимаю?

503 СЕРВИС НЕДОСТУПЕН, вероятно, более подходит, поскольку служба отказывается отвечать на запрос.

503 SERVICE UNAVAILABLE The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay.

Оба они звучат как частично приемлемые коды. 202 не сообщает о том, что запрос на самом деле не будет обработан. Что касается 503, это не услуга, который в настоящее время недоступен: служба может отклонить ваш запрос на выполнение задачи, но она все равно будет отвечать на запросы о своем статусе или на другие запросы. Я не уверен, насколько сильна семантика этих кодов, и смогу ли я адаптировать их к моему случаю.

Simone 05.04.2018 11:56

503 только говорит, что служба временно недоступна, поэтому другие запросы могут пройти.

Bart 05.04.2018 11:59

Я думаю, вам нужно хотя бы что-то в диапазоне 5xx, потому что ваш API отказывает в запросе

Bart 05.04.2018 12:00

Я полностью согласен с диапазоном 5xx. Я также рассмотрел 429 СЛИШКОМ МНОГО ЗАПРОСОВ, но на самом деле это означает «слишком много запросов от этого клиента», так что дело не в этом.

Simone 05.04.2018 12:17

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

Roman Vottner 05.04.2018 12:52

Я выбрал 503. Спасибо за вашу помощь!

Simone 06.04.2018 08:40

Другие вопросы по теме