Лучший способ выбрать ответ XML или HTML? - PullRequest
0 голосов
/ 25 марта 2009

У меня есть ресурс по URL, который должен прочитать и человек, и машина:

http://example.com/foo-collection/foo001

Каков наилучший способ отличить браузеры и машины от людей и возвращать либо HTML, либо доменный ответ XML?

(1) Поле типа Принять в запросе?

(2) Дополнительный бит URL? например:

http://example.com/foo-collection/foo001 -> возвращает HTML
http://example.com/foo-collection/foo001?xml -> возвращает, т. Е. XML

Я не хочу обязывать машины, читающие ресурс, разбирать HTML (или XHTML в этом отношении). Машины, подобные googlebot, должны получить ответ HTML.

Разумно предположить, что я управляю считывателями машин.

Ответы [ 4 ]

7 голосов
/ 25 марта 2009

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

http://example.com/foo-collection/foo001.html - return HTML
http://example.com/foo-collection/foo001.xml - return XML

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

3 голосов
/ 25 марта 2009

Если это действительно один и тот же ресурс с двумя разными представлениями, HTTP предлагает вам использовать заголовок Accept , как вы предлагаете. Это, вероятно, очень надежный способ различения двух разных сценариев. Вы можете быть уверены, что пользовательские агенты (включая пауки поисковых систем) правильно отправляют заголовок Accept.

Об агентах машин, которые вы собираетесь передать XML; они под вашим контролем? В этом случае вы можете быть вдвойне уверены, что Accept будет работать. Если они не устанавливают этот заголовок должным образом, вы можете указать XML по умолчанию. ПАгенты ДОЛЖНЫ устанавливать заголовок правильно.

Я бы попробовал использовать для этого хедер Accept, потому что именно для этого и существует заголовок Accept.


Проблема с наличием двух разных URL-адресов заключается в том, что автоматически не очевидно, что эти два представляют один и тот же базовый ресурс. Это может быть плохо, если пользователь находит URL в одной программе, которая отображает HTML, и вставляет ее в другую, для которой требуется XML. На этом этапе умный пользователь может, вероятно, изменить URL-адрес соответствующим образом, но это всего лишь источник ошибки, который вам не нужен.

3 голосов
/ 25 марта 2009

Я предпочитаю сделать его первоклассной частью URI. Это спорно, так как есть - в некотором смысле - множественный URI для того же ресурса. И действительно ли «формат» является частью URI?

http://example.com/foo-collection/html/foo001
http://example.com/foo-collection/xml/foo001

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

0 голосов
/ 25 марта 2009

Я бы сказал, что добавление параметра Query String - ваша лучшая ставка. Единственный способ автоматически определить, является ли ваш клиент браузером (человеком) или приложением, состоит в чтении строки User-Agent из HTTP-запроса. Но это легко установить в любом приложении, чтобы имитировать браузер, вы не гарантируете, что это сработает.

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