REST和HATEOAS:属性中的链接

时间:2016-08-05 02:41:58

标签: rest restful-architecture hateoas json-api hypermedia

我目前正在研究一种API,它试图通过在API响应中包含指向相关资源的链接来做一些HATEOAS。

在某些地方,我(ab?)使用链接来处理文章图片等内容。因此,例如文章资源可能如下所示:

{
  "type": "article",
  "id": "1",
  "links": {
    "self": "/api/articles/1",
    "image": "/files/b4d7802c-9cbb-4b65-9181-28cb547d2796"
  },
  "attributes": {
    "title": "My first blog entry",
    "slug": "first",
    "created_at": "2016-08-01T00:00:00Z"
  }
}

如您所见,我已将文章图像的链接添加到links哈希。想法是:它是一个URL,所以应该去那里。但是,人们也可以认为文章图像是文章的一个属性。

所以,我的问题: REST社区中是否有任何商定的指导方针来处理如何判断URL是超媒体链接还是属性?这两种方法的优点/缺点是什么?

1 个答案:

答案 0 :(得分:1)

  

REST社区中是否有任何商定的指导方针来处理如何判断URL是超媒体链接还是属性?

如果URL出现在由表示的媒体类型定义的链接元素中,则URL是超媒体链接。

如有疑问,请查看您的参考实施:万维网。 HTML文件中的URL何时是链接?元素,区域元素,链接元素;它全部在spec。在p元素中间与格式良好的URL匹配生产规则的字符序列?不是链接。

这是菲尔丁在2008

中所说的话
  

REST API应该花费几乎所有的描述性工作来定义用于表示资源和驱动应用程序状态的媒体类型,或者为现有标准媒体定义扩展关系名称和/或启用超文本的标记类型。

换句话说,您应该使用超媒体格式,其中链接和属性之间的差异已明确指定。

现在,假设你有一个代表哪个区别被明确指定,你应该使用哪个?答案是你应该以适合你​​的用例的任何组合使用它们。

创建链接对于预期宣传与某些其他可识别资源的关系的任何表示都是有意义的。也就是说,正如您可能猜到的,网络上的一个非常常见的情况,并且通常在使用HATEOAS时。

我认为URL状态有意义的用例主要是您正在编辑某些内容的情况 - 如果我要加载我的个人资料的代表以便我可以更改我的主页,那么表示可能包括我以前的主页作为州?

当然,人们可能同样认为它属于更新配置文件链接关系 - 再次,应该检查他们对&#34的假设;你将如何在网页中进行?"试探法。