Каковы наилучшие методы для отправки ответов об ошибках в веб-сервисах JSON?
Какова наилучшая практика отправки ответов об ошибках в веб-службе JSON? Я видел, как это было сделано несколькими способами, и хотел узнать, существуют ли согласованные стандарты или лучшие практики среди вариантов.
Я видел, как это произошло, когда ответ содержит указание об успехе или неудаче, а также возвращаемые данные или подходящее сообщение об ошибке, например
[{'success':true, 'data':{...}]
[{'success':false, 'data':{'message':'error'}]
Но я также видел примеры, в которых объект JSON включает только данные, а служба использует обычные коды ошибок HTTP для указания проблемы (403, 404, 500 и т.д.). (Вот как это делает API Twitter).
Есть ли "правильный" способ сделать это, или это просто вопрос стиля? Является ли последний метод более "RESTful?"
Ответы
Ответ 1
В подходе "RESTful" основной ответ об ошибке указывается соответствующим кодом состояния (4xx/5xx).
Ваше сообщение должно содержать дополнительные, специфичные для приложения советы по восстановлению после ошибки. Это может включать в себя считываемые человеком представления об ошибке, которая произошла или какой-либо более технический индикатор (т.е. Предоставление имени класса исключения).
Чтобы быть общим, сохраните синтаксис исправления для сообщений об ошибках. Это позволяет вам вводить новые сообщения об ошибках при разрыве клиентов.
Ответ 2
Используйте соответствующие коды HTTP и поместите то, что вы теперь называете "данными", как тело ответа. Это единственный правильный способ RESTful, чтобы пользователи API знали об ошибке.
Просто это не сделает ваш API RESTful, но не делает этого, безусловно, сделает ваш API не RESTful.
Пример хорошо используемых кодов состояния HTTP для ошибок содержится в ссылке API Dropbox, посмотрите разделы "Ошибки" в разделе каждый метод, они объясняют, какие коды ошибок вы должны ожидать и каково их значение в этом конкретном методе.