【问题标题】:REST Media Type ProliferationREST 媒体类型激增
【发布时间】:2014-10-15 17:21:50
【问题描述】:

我查看了旨在解决 REST 媒体类型爆炸问题的 this question。其中一个建议是有一个媒体类型来描述 anything 的集合。例如,我们可以有一个application/vnd.collection+json,它是一个具有明确语义的集合,可以保存对其他资源的引用列表:

{
    "size": "3"
    "elements": [
         { "href" : "http://my.api.com/resource/1" },
         { "href" : "http://my.api.com/resource/2" },
         { "href" : "http://my.api.com/resource/3" }
     ]
}

我知道减轻闲聊的一种方法是包含资源的嵌入式表示。列表的“通用”媒体类型如何实现这一点?列表的语义不会根据其中的嵌入式资源而改变吗?如果嵌入式资源具有不同的处理规则(理想情况下由媒体类型传达),这一点尤其重要。在这种情况下允许描述嵌入资源的媒体类型的带内信息是否可以?例如,我们可以为链接和嵌入式资源设置application/vnd.collection+json,执行以下操作:

{
    "size": "3"
    "element-content-type": "application/vnd.link+json" 
    "elements": [
         { "href" : "http://my.api.com/resource/1" },
         { "href" : "http://my.api.com/resource/2" },
         { "href" : "http://my.api.com/resource/3" }
     ]
}

如果它包含嵌入式资源:

{
    "size": "3"
    "element-content-type": "application/vnd.resource+json" 
    "elements": [
         { 
             "id": "1"
             "name": "Cool Resource" 
         },
         { 
             "id": "2"
             "name": "Awesome Resource" 
         },
         { 
             "id": "3"
             "name": "Super Awesome Resource" 
         }
     ]
}

假设application/vnd.link+jsonapplication/vnd.resource+json 也已记录在案。

【问题讨论】:

    标签: api rest content-type api-design media-type


    【解决方案1】:

    我想了更多,我认为包含这样的内容类型实际上是可以的。原因是,我们已经这样做了。在 HTML 中,script 标签有一个type 属性,可以是application/javascriptapplication/vbscript(例如)。为浏览器提供有关如何处理该标签内容的提示。同样,我认为上面例子中的 content-type 达到了同样的目的:它告诉客户端如何处理集合中的元素。

    我想再更新一下这个答案。似乎另一种方法是使用 rel。至少,HAL 是这样做的。您可以使用居里创建命名空间 rel,以便最终将 rel 解析为指向有关该资源的文档的 URL。这样您就可以访问文档,这应该会告诉您您需要了解的有关资源的所有信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2015-10-25
      相关资源
      最近更新 更多