Каковы рекомендации по отправке ответов об ошибках в веб-сервисах JSON? - PullRequest
15 голосов
/ 04 февраля 2012

Как лучше всего отправлять ответы об ошибках в веб-сервисе JSON?Я видел, как это делалось несколькими способами, и хотел знать, были ли какие-либо согласованные стандарты или лучшие практики среди вариантов.

Я видел, что это было сделано, когда ответ включает в себя указание на успех или неудачу, а такжевозвращаемые данные или подходящее сообщение об ошибке, например,

[{'success':true, 'data':{...}]
[{'success':false, 'data':{'message':'error'}]

Но я также видел примеры, когда объект JSON включает только данные, а служба использует обычные коды ошибок HTTP для указания проблемы (403, 404, 500 и т. Д.).(Вот как это делает Twitter API.)

Есть ли «правильный» способ сделать это или это просто вопрос стиля?Последний метод более "RESTful?"

Ответы [ 2 ]

17 голосов
/ 04 февраля 2012

В подходе "RESTful" ответ на первичную ошибку указывается соответствующим кодом состояния (4xx / 5xx).

Ваше сообщение должно содержать дополнительные, специфичные для приложения советы о том, как восстанавливаться после ошибки,Это может включать в себя удобочитаемое представление произошедшей ошибки или какой-то более технический индикатор (например, предоставление имени класса исключения).

Для универсальности придерживайтесь синтаксиса исправления для сообщений об ошибках.Это позволяет вводить новые сообщения об ошибках, не ломая клиентов.

3 голосов
/ 04 февраля 2012

Используйте соответствующие HTTP-коды и поместите то, что вы сейчас называете «данными», в качестве тела ответа.Это единственный правильный способ RESTful, чтобы пользователи API знали об ошибке.

Простое выполнение этого не сделает ваш API RESTful, но невыполнение этого сделает ваш API non RESTful.

Пример хорошо используемых кодов состояния HTTP для ошибок приведен в справочнике Dropbox API , посмотрите разделы "Ошибки" в каждом методе, они объясняют, какие коды ошибок вы используете.следует ожидать и каково значение этого конкретного метода.

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