Определить формат запроса REST POST/PUT

Я разрабатываю контроллер REST CodeIgniter, и мне нужно POST и PUT для URL-адреса в нескольких форматах.

Основные форматы, о которых я могу думать, это:

  • XML
  • JSON
  • Данные HTML-формы

В URI будет определен формат ответа, например. /format/xml или /format/csv. Я также не хочу определять формат запроса в URI.

Мне было интересно, есть ли у кого-нибудь предложения по выяснению формата запроса, чтобы мой скрипт мог выполнить запрос.

Я думаю, можно ли получить эти данные из заголовков запроса «тип контента»?

  • "тип содержимого: текст/xml" = XML
  • "тип содержимого: приложение/json" = JSON
  • "content-type: text/plain" = данные формы HTLM **я думаю!*

Будет ли этот метод надежным или есть лучшие подходы?

Спасибо.


person th3hamburgler    schedule 09.12.2009    source источник
comment
Данные формы HTML: спецификация HTML 4.01 говорит, что они должны быть представлены как application/x-www-form-urlencoded: w3.org/TR/html401/interact/forms.html#h-17.13.4.1   -  person Boldewyn    schedule 09.12.2009


Ответы (3)


Тип содержимого — это правильный способ получить нужную информацию.

Просто не забудьте создать исключение с некоторой обратной связью и правильным кодом ошибки http, если клиент вызывает его в неправильном формате или не передает заголовок типа содержимого (вы также можете принять один тип содержимого по умолчанию)

Кроме того, вам не обязательно использовать format/format_of_the_response. Лучше использовать заголовок Accept так же, как вы используете заголовок content-type.

person Diego Dias    schedule 09.12.2009
comment
Спасибо, думаю, я тоже рассмотрю возможность использования заголовка accept! Надеюсь, я смогу установить заголовки из форм jquery, определенно более элегантных - person th3hamburgler; 09.12.2009

Этот метод надежен, если вы знаете, что ваш REST-клиент будет следовать вашему правилу типа контента. Если вы управляете клиентом, то это нормально. Если вы не контролируете клиента, то насколько приемлемым является сбой вызова при передаче необычного типа контента (или его отсутствия)?

О, и для справки данные HTML-формы имеют тип содержимого «application/x-www-form-urlencoded».

person Dolbz    schedule 09.12.2009
comment
Спасибо, кто, черт возьми, придумал эту мгновенную строку :-) - person th3hamburgler; 09.12.2009

Я знаю, что на этот вопрос был дан ответ, но Фил Стерджен написал REST Client и REST Server Library для codeigniter, которые могут вам немного помочь.

http://github.com/philsturgeon/codeigniter-restclient

person Zack    schedule 09.12.2009