Как выходной формат закодирован в RESTful URL? - PullRequest
3 голосов
/ 12 июня 2011

Предположим, у меня есть веб-сервис RESTful, который содержит информацию об объекте, доступ к которому можно получить по URL-адресу, например http://example.com/myobject.. Я хотел бы иметь возможность получать эту информацию в двух форматах: во-первых, XML-отформатированные простые данные, а во-вторых, как полноценная HTML-страница, которая может также включать интерфейс javascript для изменения объекта и возврата его обратно с помощью AJAX.

Каков канонический способ достижения этого?Должен ли я опубликовать свой объект по двум разным URL-адресам, таким как http://example.com/myobject?format=xml и ... format = html?(Существуют ли более эффективные способы, чем использование строки запроса для различения URL-адресов здесь?) Или имеет смысл отправлять что-то наподобие данных MIME, состоящих из нескольких частей, и могу ли я рассчитывать на то, что браузеры смогут извлечь часть HTML?Или в запросе есть какое-то поле заголовка HTTP?

(С запросами PUT или POST, отправленными в разных форматах, это намного проще, так как сервер может проверять формат и анализировать его соответствующим образом.)

Ответы [ 3 ]

4 голосов
/ 12 июня 2011

В качестве альтернативы можно использовать согласование содержимого вместо параметров строки запроса. В двух словах, клиент отправляет приемлемые типы носителей через Accept заголовок в запросе (например, "application / xml, text / html; q = 0,9"), и сервер анализирует это и отвечает с предпочитаемым клиентом типом носителя (этот процесс называется согласование на сервере )

При выполнении согласования на сервере ответ должен содержать Различный заголовок , указывающий, какой заголовок запроса использовался при согласовании

Имейте в виду, что для этого клиент должен отправить соответствующий заголовок Accept.

2 голосов
/ 12 июня 2011

Способ, который оказывается очень легко читаемым, это просто использовать расширение:

http://example.com/myobject.html
http://example.com/myobject.xml
http://example.com/myobject.json
etc.

В противном случае вы можете использовать принятый тип содержимого запроса, который вы можете найти в заголовке запроса, например, text/html для HTML, text/xml для XML, text/json для JSON и т. Д. Это называется Согласование содержания :

Согласование содержимого - это механизм, определенный в спецификации HTTP, который позволяет обслуживать различные версии документа (или, в более общем случае, ресурс) по одному и тому же URI, чтобы пользовательские агенты могли указать, какие Версия соответствует своим возможностям лучше всего.

Это сделало бы ваши URL очень простыми, и вы бы выводили HTML, когда ничего не указано (и доступ к странице осуществлялся через браузер).

0 голосов
/ 12 июня 2011

Вы обнаружите, что хотите, чтобы одна HTML-страница управляла несколькими или несколькими вашими XML-ресурсами, а не только одним. Поэтому прикрепите свою HTML-форму по адресу example.com/stuff, а свои XML-ресурсы - по адресу example.com/api/thing, object и т. Д. В качестве альтернативы, если вы хотите, чтобы XML был основной навигацией, укажите это по адресу example.com/things и т. д. и ваш HTML-код по адресу example.com/things/manager.html или что-то подобное. Теперь это стало еще проще, поскольку в Firefox и Chrome есть плагины, которые позволяют пользователям нажимать на гиперссылки в не-HTML типах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...