REST API: общий ответ об ошибке HTML для неверного JSON - PullRequest
0 голосов
/ 17 апреля 2019

API-интерфейсы REST хоста службы X и сервис Y.

Клиенты -> Y -> X

Для недопустимого JSON сервис Y отвечает обратно с ошибкой HTML (показано ниже). Служба X не контролирует Y.

<html>
<head><title>400 Bad Request</title></head>
<center><h1>400 Bad Request</h1></center>
</body>
</html>

Для всех других типов ошибок X отвечает соответствующим кодом ответа HTTP и ошибкой JSON (следующий формат).

{
    "errorCode": "InvalidXXX",
    "message": ""
}
  1. Я пытаюсь проверить, существует ли какой-либо RFC вокруг стандартов ответа на ошибки REST API?
  2. Существует ли угроза безопасности, если служба возвращает ответ об ошибке с подробными сведениями о том, что JSON недействителен?

Я пытаюсь понять, будет ли хорошо для нас документировать этот особый случай как часть руководства по интеграции для клиентов.

1 Ответ

2 голосов
/ 17 апреля 2019

Я пытаюсь проверить, существует ли какой-либо RFC вокруг стандартов реагирования на ошибки REST API?

REST - это архитектурный стиль, определенный Филдингом в главе 5 его диссертации, и в нем ничего не говорится о формате ответа на ошибки.

Я предполагаю, что вы выполняете REST через HTTP, поэтому я советую вам выбрать наиболее подходящий код состояния для каждой ситуации. Коды состояния предназначены для указания результата попытки сервера понять и удовлетворить запрос клиента.

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

Если вы ищете стандарт IETF для сообщения об ошибках, то, скорее всего, вы найдете RFC 7807 . В этой спецификации определяются простые форматы документов JSON и XML для сообщения клиенту об ошибках, а также типы носителей application/problem+json и application/problem+xml.

Существует ли угроза безопасности, если служба возвращает ответ об ошибке с подробными сведениями о том, что JSON недействителен?

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

...