Короткий
Вы абсолютно правы.
Длинный ответ
В спокойном дизайне API вы должны использовать официальные HTTP-коды, указанные в RFC-7231 . Пожалуйста, не присылайте 200 OK для каждого запроса. 200 OK зарезервировано для запросов, которые фактически выполнены, и сервер отвечает с действительным состоянием определенного ресурса. Есть коды для большинства случаев использования. Если вам все еще нужно различать ошибки одного и того же типа, например FORBIDDEN
, вы можете отправить свой собственный код ошибки. Но HTTP-ответ все еще является ошибкой, поэтому вы не должны использовать 200 OK.
Что касается предложенной схемы ошибок, вы не должны отправлять код и статус в теле. Это уже отправлено как статус HTTP и поэтому избыточно. Также логический флаг успеха является избыточным, поскольку тип HTTP-кода уже указывает, был ли он успешным или нет (2xx => успех, ошибка клиента 4xx, ошибка сервера 5xx). Тело должно содержать дополнительный контекст, который поможет клиенту API решить проблему.
Хорошо разработанный ответ об ошибке API должен содержать полезную информацию для устранения возможной проблемы:
- Идентификатор запросакоторый генерируется для каждого запроса на сервере
- Подробное сообщение об ошибке
- (Необязательно) Код внутренней ошибки
- (Необязательно) Категория ошибки
- (Необязательно) Ссылкак документации API / описанию ошибок
Пример :
HTTP/1.1 403 Forbidden
{
"requestId": "a5e5dd13-0047-4d2e-b96c-55a5031f0511",
"message": "You are not allowed to access this resource. Missing write permission.",
"category": "AccessControl"
}
Если этого по-прежнему недостаточно, чтобы ваша команда поверила, что вы можете указать на некоторыехорошо спроектированные REST API: