Заголовки ссылок и элементы ссылок для RESTful JSON - PullRequest
26 голосов
/ 16 марта 2012

При создании API-интерфейса RESTful / гипермедиа с ресурсами JSON, кажется, у меня есть два варианта указания гипермедиа-отношений между ресурсами.

  1. Встраивание ссылок в тело документа JSON,Проблема здесь заключается в том, что нет стандартизированного синтаксиса для указания гиперссылок, хотя я вижу ряд хороших усилий: (HAL, Collection + JSON, JSON-LD, JSON Schema и многие другие).

  2. Использовать заголовки HTTP Link.Это стандартизировано, так что, похоже, оно имеет преимущество перед встроенными ссылками.Клиенты просто понимают, как осмыслить стандартный заголовок и вуаля, достигается хорошее качество гипермедиа.

Итак, особенно в контексте обработки ресурсов JSON, какой путь и почему?

Ответы [ 5 ]

13 голосов
/ 16 марта 2012

Перейти с гипермедиа форматом JSON.Хотя заголовки ссылок являются стандартными, они плохо адаптированы.Они действительно больше подходят для медиаформатов, которые не являются гипермедиа.Но так как у вас есть выбор и вы можете выбрать гипермедиа формат (в отличие, скажем, от PNG против JPG), вам просто нужно выбрать один и двигаться вперед.

Все стандарты JSON бурлят, пока один или другой не станетстандарт де-факто.Чем больше их используют, тем больше «де-факто» они получают.

Мне кажется, что HAL находится на прочной трассе стандартов, и я бы выбрал это.

Но в любом случае,используйте гипермедиа формат, потому что вы можете.

10 голосов
/ 15 мая 2014
  • Заголовки ссылок могут быть рассмотрены посредникамиесли нужно!http://tools.ietf.org/html/draft-nottingham-link-hint-00

    Этот подход позволяет одновременно доставлять все ответы:

    • Заголовки ссылок, содержащие гипермедиа информацию
    • полезная нагрузка, предназначенная для представления ресурса

    Конечно, представление ресурса может содержать ссылки, закодированные в различных формах, но использование заголовков ссылок может обеспечить наиболее важную часть динамической структуры вашего сайта.

    То, что делает это решение окончательно привлекательным, - это ИМХО подсказка «принять сообщение».

10 голосов
/ 17 марта 2012

Если вы хотите, чтобы ваши ссылки обрабатывались HTTP-посредниками, вам обязательно следует использовать заголовки ссылок.Одним из примеров этого является недействительность связанного кэша:

http://tools.ietf.org/html/draft-nottingham-linked-cache-inv-01

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

{
    'item': [
        { 'name': 'fork',  'href': 'http://example.com/item/1' },
        { 'name': 'spoon', 'href': 'http://example.com/item/2' },
        { 'name': 'spork', 'href': 'http://example.com/item/3' }
    ],
    'href': 'http://example.com/items'
}
5 голосов
/ 16 марта 2012

Вы не можете сжимать заголовки.Если у вас много ссылок.Это может иметь значение.

Предоставление контекста для ссылки.Заголовки ссылок имеют атрибут привязки, но нет стандартизированного синтаксиса пути фрагмента, поэтому YMMV.

Вдобавок ко всему, я не могу думать о других плюсах / минусах.

0 голосов
/ 15 мая 2017

Мне кажется, что использование обеих альтернатив (заголовки ссылок и гиперссылки в теле ответа в соответствии со стандартным форматом, таким как HAL) позволяет вашему решению использовать преимущества обоих подходов. Конечно, это хорошая идея, если ваша среда разработки REST поддерживает автоматическое создание ссылок в обоих местах.

...