Предисловие:Должен ли я использовать заголовок Content-Location таким образом?
После прочтения много о HTTP и REST, вы провели несколько часов разработки хитрую схему контента переговоров. Чтобы ваш веб-API мог обслуживать XML, JSON и HTML с одного URL-адреса. Потому что, как вы знаете, ресурс должен иметь только один URL-адрес, а другие представления должны запрашиваться с использованием заголовков Accept
. Вы начинаете удивляться, почему для этой реализации понадобилось 20 лет.
И вот, когда на самом деле slaps you in the face.
Так, чтобы помочь браузерам (и сами пытаться отлаживать) с помощью вашего обслуживания, чтобы служить желаемому типу контента, вы делаете то, что каждый уважающий себя евангелист из REST презирает вас за: Расширения файлов.
вечные муки в аду несмотря на это, является следующее применение Content-Location
+ .ext
приемлемым?
Скажите, что у нас есть пользователи на /users/:loginname
например /users/bob
. Это будет конечная точка API для всего, что способно установить правильный заголовок Accept
. Но для любого возможного Content-Type
(или, по крайней мере, некоторого) мы разрешаем альтернативный метод доступа, и это URL-адрес с суффиксом типа файла. Например, /users/bob.html
для представления HTML. Предположим (и это большое предположение, чтобы сделать) логин будет никогда содержать период/точка.
Запрос:
GET /users/bob.json HTTP/1.1
Host: example.com
Ответ:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 14
Content-Location: /users/bob
{"foo": "bar"}
Это позволит мне кодировать альтернативные способы доступа (в данном случае) информацию о пользователе. Например, ссылка на страницу пользователя может быть <a href="https://stackoverflow.com/users/bob.html">Bob</a>
. Ссылка на vCard (чтобы добавить пользователя в адресную книгу/Outlook/все) будет <a href="https://stackoverflow.com/users/bob.vcf">Bob</a>
.
Есть ли какие-то подводные камни, которые я пропустил? Какими будут плюсы и минусы этого?
Редактировать: This появилось немного поздно, чтобы я заметил. И даже если это касается предмета, и это действительно полезно, я думаю, что это не совсем то, что я ищу ...