Я пытался реализовать RESTFul-архитектуру, но я полностью запутался в том, хороши или плохи пользовательские медиа-типы.
В настоящее время мое приложение передает «ссылки», используя заголовок 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 для этого ресурса «отношения», я перенаправляю клиента на пользовательский ресурс.
Что меня смущает, так это то, использовать ли пользовательский тип пантомимы. В Интернете и в моей голове есть аргументы по этому поводу.
Я сделал пример, в котором я вызываю HEAD
по неизвестному URL-адресу, а сервер возвращает Content-Type: application/vnd.myapp.user
. Затем мой клиент решает, может ли он понять этот MIME-тип (он поддерживает сопоставление ресурсов, которые он понимает, с представлениями), и будет либо следовать ему, либо объяснять, что он не может понять, что находится в конце этой ссылки.
Это плохо?. Я должен поддерживать специальные типы пантомимы. Что особенно странно, так это то, что я более чем счастлив использовать стандартный формат application/user
, но нигде не могу найти его.
Я начинаю думать, что должен пытаться полностью угадать, что будет отображаться в любом HTTP-ответе, почти до такой степени, что, возможно, мой RESTFul API должен просто отображать html вместо того, чтобы пытаться что-либо делать с json/xml.
Я пытался искать (даже в блоге Роя Филдингса), но не могу найти ничего, что описывает, как клиент должен действовать в такой ситуации.
РЕДАКТИРОВАТЬ: аргумент, который у меня есть с включением пользовательского типа, заключается в том, что это может быть не обязательно «пользователь», наблюдающий за элементом, это может быть что-то с application/vnd.myapp.group
. Получив ответ, клиент знает, что в теле есть что-то другое, и поэтому переходит к представлению, отображающему группы. Но так ли плоха эта связь mime-type
для просмотра?