使用链接头和范围的超媒体Restful API

时间:2015-05-13 01:41:23

标签: rest http hateoas

我正在尝试使用超文本作为应用程序状态主体的引擎来开发RESTful api。

我已经决定对所有“状态转换”使用链接头(RFC5988),将链接放在那里似乎很自然,并且不会使我的响应类型特定于实现(例如XML / json / etc all)只是工作)。

目前我正在努力的是对一系列资源进行分页。在过去,我使用Range标头来控制它,因此客户端可以发送“Range:MyObjects = 0-20”并获得前20个。想要包含一个“下一个”关系以指示接下来的20个项目(但可能不是),这似乎很自然,但我不确定该怎么做。

许多示例包括范围信息作为URI的一部分。例如,它将是

Link: <http://test.com/myitems?start=20&end=40>;rel="next"

使用范围标题我会做类似以下的事情吗?

Link: <http://test.com/myitems;rel="next";range="myitems=20-40"

这里的担忧是链接感觉不合标准。客户端必须检查范围标题以获取下一个项目。

另一件事是,我会把这一切都留在带外信息吗?永远不会显示下一个/上一个范围(因为这取决于客户端正在做什么),并期望客户端只需要在需要时序列化所需的内容?我可以在集合的初始链接中使用“接受范围”链接提示,让客户知道其“可分页”

例如

OPTIONS http://test.com
-> Link:"<http://test.com/myitems";rel="http://test.com/rels/businessconcept";accepts-ranges="myitem""

然后客户端会去,哦它接受范围,我只会拉下第一个X,然后根据需要转到下一个范围(这种感觉就像隐含状态)。

我似乎可以在这里找出真正最好的HATEOAS精神。

1 个答案:

答案 0 :(得分:1)

链接标题规范并不完全符合您的AFAIK要求。它没有识别客户提供的参数的概念。您链接的相关文档可以并且应该指定如何应用范围实现。

链接模板标题规范http://tools.ietf.org/html/draft-nottingham-link-template-00#page-3会执行您想要的很多内容但已过期。这指定了如何在标题中使用http://tools.ietf.org/html/rfc6570样式模板,以及如果您想使用我所建议的方向的标题。

就个人而言,虽然我同意标题中的链接将您从主体的内容类型中抽象出来,但我发现链接标题难以开发,因为您只需将网址粘贴到网址中即可。浏览器并立即查看链接。