2016-08-05 39 views
0

我目前正在尝试通过在API响应中包含指向相关资源的链接来尝试做一点HATEOAS的API。REST和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

在REST社区中是否有任何商定的准则处理如何判断URL是超媒体链接还是属性?

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

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

这里是菲尔丁曾在2008

一个REST API的说应该把几乎所有的描述努力在确定用于表示资源和驱动应用程序状态的媒体类型(S),或在定义扩展现有标准媒体类型的关系名称和/或启用超文本标记。

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

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

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

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

当然,人们也可能会认为它属于更新配置文件链接关系 - 再次,应该检查他们的假设与“你将如何在网页中做它?”。启发式。

+0

感谢您的详细解答。不幸的是,你根本没有提到图像。从我收集的信息来看,它听起来有点像文章图像(作为一个相关但完全独立的资源)应该在链接中引用。 (在HTML中,这就像使用图片标签一样。) – Franz