Я пытаюсь реализовать архитектуру RESTFul, но я совершенно смущен относительно того, являются ли пользовательские медиа-типы хорошими или плохими.HATEOAS Content-Type: Custom mime-type
В настоящее время мое приложение передает «ссылки», используя заголовок Http Link:. Это здорово, я использую его с атрибутом title, позволяя серверу описать, что на самом деле это «действие», особенно когда оно представлено пользователю.
Где я смущен, должен ли я указать пользовательский тип mime или нет. Например, у меня есть концепция пользователя. Он может быть связан с текущим ресурсом. Я собираюсь составить пример и сказать, что у меня есть предмет на аукционе. Возможно, у пользователя есть возможность «наблюдать». Поэтому я хотел бы включить ссылку
<http://someuserrelation> rel="http://myapp/watching";title="Joe Blogg", methods="GET"
В заголовке. Если бы у вас была возможность удалить этого пользователя из просмотра, вы бы получили.
<http://someuserrelation> rel="http://myapp/watching";title="Joe Blogg", methods="GET,DELETE"
Я очень доволен этим, если клиент имеет правильную роль, которую он может удалить отношения. Поэтому я определяю, что делать с отношениями. Понятно, что мы называем GET этим ресурсом «отношения», я перенаправляю клиент к ресурсу пользователя.
Что меня смущает, следует ли использовать пользовательский тип mime. В Интернете есть аргументы как в Интернете, так и в моей голове.
Я сделал образец, в котором я вызываю HEAD
на неизвестном URL-адресе, и сервер возвращает Content-Type: application/vnd.myapp.user
. Затем мой клиент решает, может ли он понять этот тип mime (он поддерживает сопоставление ресурсов, которые он понимает в представлениях), и будет либо следовать за ним, либо объяснить, что он не может понять, что находится в конце этой ссылки.
Это плохо ?. Я должен поддерживать специальные мимические типы. Что особенно странно, я более чем счастлив использовать стандартный формат application/user
, но не могу найти его нигде.
Я начинаю думать, что я должен попытаться полностью догадаться, что в любом ответе HTTP почти до такой степени, что, возможно, мой RESTFul api должен просто показывать html вместо того, чтобы пытаться что-либо сделать с помощью json/xml.
Я пробовал поиск (даже блог Роя Филдинга), но не может найти ничего, что описывает, как клиент должен иметь дело с такой ситуацией.
EDIT: аргумент, который у меня есть с включением настраиваемого типа, заключается в том, что он может не быть «пользователем», наблюдающим за элементом, это может быть что-то с application/vnd.myapp.group
. Получая ответ, клиент знает, что у тела есть что-то другое, и поэтому меняйте представление, отображающее группы. Но является ли это соединение mime-type
для просмотра плохого ?.
Посмотрите на то, что странно для меня, - это то, что клиенту и, возможно, типу mime почти нужно будет указать все возможные вещи, которые могут быть " смотреть. Я привел пример в будущем, возможно, об изменении ресурса, который стоит за «наблюдением», например, для группы. Вы сказали, что клиент семантически знает, что это пользователь .. но не так ли ?. Должен ли он получить тип mime, сервер отправляет обратно и обрабатывает его таким образом, а не принимает его 'application/vnd.app.user', что, если его другой ресурс, который также имеет это отношение ?. –
Вам не нужно указывать, что ссылка указывает на пользователя, если вы этого не хотите. Но откуда вы знаете, что есть ссылка в первую очередь? Или что означает его атрибут «отношения»? Дело в том, что любая семантика, которую вы хотите назначить возвращенному представлению, должна быть через тип mime. Таким образом, вы, по крайней мере, должны определить, что есть потенциальные ссылки на подписчиков, и это можно сделать только через mime-тип. В противном случае сообщение не является самодостаточным. –