链接标头与RESTful JSON的链接元素

时间:2012-03-16 18:07:57

标签: json web-services http rest http-headers

使用JSON资源构建RESTful / hypermedia API时,我似乎有两种选择来指定资源之间的超媒体关系。

  1. 将链接嵌入JSON文档的正文中。这里的问题是没有用于指定超链接的标准化语法,虽然我看到了许多努力:( HAL,Collection + JSON,JSON-LD,JSON Schema等等)。

  2. 使用HTTP链接标头。这是标准化的,因此这似乎比嵌入式链接更具优势。客户只需了解如何理解标准标题,即可实现超媒体的好处。

  3. 所以,特别是在处理JSON资源的上下文中,这是要走的路,为什么?

5 个答案:

答案 0 :(得分:13)

使用超媒体JSON格式。虽然链接标题是标准的,但它们很难被采用。它们对于非超媒体的媒体格式更有效。但是既然你可以选择并且可以选择超媒体格式(不像PNG和JPG那样),你应该选择一个并继续前进。

所有的JSON标准都在冒泡,直到一个或另一个成为“事实上的”标准。他们使用的越多,他们就越“事实上”。

在我看来,HAL是一个坚实的标准轨道,我会选择它。

但无论如何,请使用超媒体格式,因为你可以。

答案 1 :(得分:10)

如果您希望HTTP中介处理您的链接,那么您一定要使用链接标题。其中一个例子是Linked Cache Invalidation:

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'
}

答案 2 :(得分:10)

  • 中间人可以考虑链接标题
  • 链接标题由SPDY
  • 压缩
  • 链接标题是标准的

如果需要,它们甚至可以包含一些JSON! http://tools.ietf.org/html/draft-nottingham-link-hint-00

这种方法允许在所有回复中同时传递:

  • 包含超媒体信息的链接标题
  • 专用于资源表示的有效负载

当然,资源表示可能包含以各种形式编码的链接,但使用链接头可以提供站点动态结构中最重要的部分。

这个解决方案最终具有吸引力的是恕我直言,接受邮件"暗示。

答案 3 :(得分:5)

您无法压缩标头。如果你有很多链接。这可能会有所不同。

为链接提供上下文。链接头具有anchor属性,但没有标准化的片段路径语法,因此YMMV。

我无法想到任何其他利弊。

答案 4 :(得分:0)

在我看来,使用两种备选方案(响应主体中的链接头和超媒体链接遵循标准格式,如HAL)允许您的解决方案获得两种方法的好处。当然,如果您的REST开发框架支持在两个地方自动创建链接,那么这听起来不错。