Я пишу веб-сервис, который принимает только json, и также выводы только json.
Таким образом, я должен возвратить соответствующий код состояния, если какой-либо другой формат требуют.
Кажется, что у меня есть два варианта:
Было бы замечательно, если кто-то мог бы просветить меня относительно семантики двух кодов.
406 возвращается сервером, когда он не может ответить, основываясь на принятии заголовков запроса (т.е. у них есть заголовок Accept, в котором говорится, что они только хотят XML).
415 возвращается сервером, когда объект, отправленный в запросе (содержимое в POST или PUT), имеет неподдерживаемый медиатип (т.е. они отправили XML).
т.е. 406, когда вы не можете отправить то, что они хотят, 415, когда они отправляют то, что вы не хотите.
Надеюсь, это поможет!
Accept
, который вы не можете выполнить. Content-Type
вы не можете использовать. Процитировать RFC2616 :
406 Not Acceptable
Ресурс, указанный в запросе способен только генерировать ответ сущности, у которых есть контент характеристики не приемлемы в соответствии с отправленными заголовками accept в запросе.
Когда клиент запрашивает вашу службу, проверьте, какие заголовки Accept *
он отправил; если он не соответствует application / json
(или подстановочный знак, например, * / *
), верните это. В ответе должно быть указано «здесь обслуживается только JSON».
415 Unsupported Media Type
Сервер отказывается обслуживать запрос, потому что сущность запрос находится в неподдерживаемом формате по запрошенному ресурсу для запрошенный метод.
Просто возвращение 415 Неподдерживаемый тип носителя
должно быть минимальным ответом на запрос «клиент отправил что-то, кроме JSON, не может работать с этим»; не уверен, что есть заголовок, указывающий на то, что «вам нужно отправить JSON»
406 используется, когда клиент запрашивает ответ с неподдерживаемым типом контента (в вашем случае, любым другим, кроме JSON) с использованием заголовка Accept. 415, с другой стороны, используется, когда клиент отправляет или отправляет данные в неподдерживаемом типе содержимого.
Вкратце: используйте 406, если не можете вывести в ожидаемом формате, и используйте 415, если вы не поддерживаете входной формат.
RFC2616 вам поможет!
http://www.rfc2616.com/#10.4.7
http://www.rfc2616.com/#10.4.16
Я бы выбрал 415, он вполне соответствует вашему описанию .
Редактировать: О. IC. «объект запроса имеет формат, не поддерживаемый запрошенным ресурсом». Поэтому, если у вас есть запрос с контентом и этот контент имеет неправильный тип, вы должны отправить 415 -response.