Какой тип MIME, если JSON-это, возвращаемые API-интерфейс REST?
мой REST API возвращает JSON.
В настоящее время я возвращаю текст/простой, как тип MIME, но это смешно.
Я должен вернуться application/x-javascript или какой-то другой тип?
второй вопрос касается кода состояния HTTP для условий ошибки.
Если мой REST API возвращает состояние ошибки, я возвращаюсь как JSON
{ result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" }
должен ли код состояния HTTP оставаться в 200 OK?
6 ответов:
на JSON spec предлагает
application/json, и это, кажется, поддерживается IETF и IANA реестра.
по второму вопросу, я думаю, что если обработка сообщений не удается каким-то образом, вы должны вернуть структурированный и стандартный ответ на ошибку в виде сообщения JSON; только если по какой-то причине не удалось доставить сообщение в обработчик серверной части, вы должны рассмотреть ошибку HTTP код.2014-06-27 обновление: дни, когда клиенты (браузеры) работали только с ответом 200, давно прошли, и преобладающим советом для RESTful API является использование кодов ответа HTTP, подходящих для ответа, 2xx для успешных ответов (например, 201 создан для PUT; 204 нет контента для удаления) и 4xx и 5xx для всех условий ошибки, включая те из самого API.
тип MIME JSON
application/jsonhttp://www.ietf.org/rfc/rfc4627.txt
http://www.iana.org/assignments/media-types/application/
более конкретно, здесь:
нет, вы не должны возвращать 200 в состоянии ошибки.
можно повторить код состояния или включить более подробный код ошибки в полезную нагрузку ответа.
правильный
Content-typeВ возвратapplication/json, по данным RFC 4627, который также регистрирует тип MIME IANA (и действительно, он отображается на странице IANA). Конечно, если бы вы написали клиенту, вы хотели бы быть более либеральным в том, что вы принимаете, а также принимать другие, такие какtext/jsonиtext/x-json.теперь, если есть ошибка, вы должны не return HTTP 200, это принципиально не RESTful. Я знаю, что иногда нет точного совпадения для вашей ошибки, но выберите ближайший 4xx (ошибка клиента) или 5xx (ошибка сервера) ошибки в RFC 2616 разделы 10.4-10.5, и быть более точным в JSON.
Если под "REST API" вы подразумеваете, что хотите следовать архитектуре REST, то тип используемого носителя определяется функциональностью, которую вы хотите предоставить через REST API. Вы хотите иметь возможность создавать новые объекты? Запрос списка объектов? Редактировать объект? Если это так, то хорошим типом носителя RESTful для использования может быть vnd.collection+json, поскольку он определяет гипертекстовый связанный интерфейс для управления коллекцией объектов json.
Примечание: RESTful API может использовать носитель введите application / json, но этот тип носителя не имеет гипертекстового связанного интерфейса RESTful, поэтому он будет конечной точкой в изменении состояния.
также вполне приемлемо следовать архитектуре веб-API, где вызовы HTTP RPC возвращают объекты application / json, а другие вызовы HTTP RPC управляют этими объектами, и нет интерфейса гипертекстовой ссылки для использования и навигации по изменениям состояния. Но это не отдых.
Мне нравится это описание отдыха (от создатель отдыха):
API REST должны управляться гипертекстом
другими словами, если двигатель состояния приложения (и, следовательно, API) не управляется гипертекстом, тогда он не может быть спокойным и не может будьте REST API. Период.
кроме того, из обсуждения этого сообщения является этот пример приложения RESTful:приложение для отдыха Lost Boys Spam-E
Comments