Какой тип MIME, если JSON возвращается API REST?
Мой REST API возвращает JSON.
В настоящее время я возвращаю текст /plain как тип MIME, но он чувствует себя смешно.
Должен ли я возвращать application/x-javascript
или какой-либо другой тип?
Второй вопрос касается кода состояния HTTP для условий ошибки.
Если мой REST API возвращает состояние ошибки, я возвращаюсь как JSON
{ result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" }
Если код статуса HTTP остается в 200 OK
?
Ответы
Ответ 1
JSON предлагает application/json
, и это похоже на поддержку IETF и IANA.
По второму вопросу, я думаю, что если обработка сообщений не сработает, вы должны вернуть структурированный и стандартный ответ об ошибке в виде сообщения JSON; только если есть отказ доставить сообщение обработчику backend по какой-либо причине, если вы считаете код ошибки HTTP.
Обновление 2014-06-27. Дни, когда клиенты (браузеры) работали только с ответом 200, давно прошли, и преобладающим советом для API RESTful является использование HTTP-ответов, подходящих для ответа, 2xx для успешных ответов (например, 201 для PUT, 204 без содержимого для DELETE) и 4xx и 5xx для всех условий ошибки, в том числе из самого API.
Ответ 2
Тип MIME для JSON
application/json
http://www.ietf.org/rfc/rfc4627.txt
http://www.iana.org/assignments/media-types/application/
Подробнее здесь:
http://www.ietf.org/rfc/rfc4627.txt
Ответ 3
Я предпочитаю отвечать как с сообщением об ошибке HTTP, так и с полезной нагрузкой приложения.
Ответ 4
Нет, вы не должны возвращать 200 в состояние ошибки.
Хорошо повторить код состояния или включить более подробный код ошибки в полезную нагрузку ответа.
Ответ 5
Правильный Content-type
для возврата - application/json
, в соответствии с RFC 4627, который также регистрирует IANA типа MIME (и, он отображается на странице IANA). Конечно, если бы вы писали клиент, вы бы хотели быть более либеральным в том, что вы принимаете, а также принять других, таких как text/json
и text/x-json
.
Теперь, если есть ошибка, вы должны не вернуть HTTP 200, что в основном не-RESTful. Я знаю, что иногда нет точного совпадения с вашей ошибкой, но выбирайте наиболее близкие ошибки 4XX (ошибка клиента) или ошибки 5XX (ошибки сервера) в RFC 2616 Разделы 10.4 10.5, а точнее в JSON.