2009-10-14 2 views
5

Какое общее соглашение поддерживает несколько представлений (например, html, json, xml) для ресурсов (например, блог, пользователь) в django?Content-Type and Representations

Во-первых, я не знаю, как мне отформатировать мои URL-адреса. Например, что вы используете для использования любого из этих URL-адресов для запроса формата xml

  • /<resource>.<format>, например. /blogs/123.xml
  • /<format>/<resource>, например. /xml/blogs/123
  • /<resource>?format=<format>, например. /blogs/123?format=xml

Должен ли я полагаться только на параметр Content-Type? Как насчет наличия нескольких мобильных представлений (например, iphone, mobile, palm) и полного представления браузера?

Что относительно просмотров? Что такое соглашение для выбора правильных шаблонов, не имеющих много утверждений if или большого дублирующего кода.

ответ

7

Что я мог бы сделать, если бы это получилось, это:

  • Ваше мнение искать Accept заголовка (я думаю, что это то, что вы говорили о) и решить, какой тип контента, чтобы отправить обратно на основе заголовка Accept.
  • У вас есть промежуточное программное обеспечение, которое ищет расширение в Request-URI, удаляет его и добавляет связанный контент-тип в заголовок запроса Accept.

Для этого решения типы контента в URL-адресе всегда будут отображаться как связанное расширение файла, ни часть строки запроса, ни часть имени ресурса. Но помимо запросов, генерируемых браузером, типы контента должны войти через заголовок Accept.

Так запрос приходит как:

GET /blogs/123.xml HTTP/1.1 
Host: example.com 

Промежуточное преобразует что:

GET /blogs/123 HTTP/1.1 
Host: example.com 
Accept: application/xml 

Ваше мнение видит application/xml и возвращает ответ с содержанием XML.

+0

Это прекрасная идея. –

+0

Аккуратно (и +1) - но не могли бы вы предоставить какой-нибудь образец кода? Разве этот риск не мешает вашему коду зрения множеством переключателей в зависимости от типа контента? Я не могу сразу думать об элегантном пути вокруг него, но мне было бы интересно узнать, сможет ли кто-нибудь еще. –

Смежные вопросы