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

Hol*_*osa 27 rest json web-services http http-headers

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

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

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

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

Wil*_*ung 14

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

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

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

但无论哪种方式,都可以选择超媒体格式.

  • 哦,不要那样做.如果每个人都离开了,标准的重点是什么?相反,我会尝试在其中工作,并与处理它的人提出你的问题.这就是标准如何变得更好. (2认同)
  • 但是,JSON(Hyper-)Schema更加灵活.我在其他地方没有看到的一件事是指定"表单" - 也就是说,链接定义可以为要作为请求的一部分提交的数据的形状/结构指定JSON模式. (2认同)

小智 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'
}
Run Code Online (Sandbox Code Playgroud)


wik*_*000 10

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

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

此方法允许在所有响应中同时传递:

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

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

是什么让这个解决方案明确吸引人的是恕我直言的"接受后"提示.


Dar*_*ler 5

你不能压缩标题.如果你有很多链接.这可能会有所不同.

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

在我的头脑中,我无法想到任何其他利弊.