Какой тип 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.

Ответ 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.