使用REST和HATEOAS的非上下文操作

时间:2013-08-07 09:20:56

标签: rest hateoas

我正在尝试为酒店预订实施基于HATEOS的REST服务,但却有这样的困惑:

1)除了WADL之外,客户端如何了解可能的操作及其相应的URI。当客户端访问REST服务的根目录时,我应该将所有可能的操作和URI作为响应吗?

2)当客户获得某个地区所有住宿选择的清单时,我将返回他询问的地区所有酒店的清单。回复包含:

<accommodation>
  <hotel info="http://welco.me/hotel/xxxxxx" price="5000"/>
  <hotel info="http://welco.me/hotel/yyyyyyy" price="3000"/>
</accommodation>

但我在这里的查询是客户如何知道其他相关的可能操作,比如按价格的排序顺序获取列表?

2 个答案:

答案 0 :(得分:2)

  1. 在回答您的第一个问题时,有一些文档规范允许客户端发现RESTful API。
    • Swagger
    • JSON Home
    • Google使用自己的Discovery Service,但与Swagger和JSON Home不同,遗憾的是我认为没有开源库可以帮助您将其公开用于自己的API。
  2. 对于您的第二个问题,我倾向于客户/开发人员发现参数,例如从Swagger / JSON Home文档中进行排序。但是,如果它是超强/重要的关系,您也可以在响应中将其作为链接数据返回:
    • HAL中,您可以提供一个links对象,其中包含指向相关资源的链接。
    • JSON-LD中,您可以添加一个字段,其中包含相关API网址的值。然后,您可以添加@content来添加描述该关系意味着什么的信息。

答案 1 :(得分:0)

  1. 您应该使用 link hints使用OPTIONS方法执行此操作的较旧方法是some长期caveats

  2. 包含使用自定义链接关系的链接,例如http://welco.me/#sort-by-price,您可以在其中定义URI以表示您想要的任何内容。您应该在该URI上提供一些开发人员文档,但客户端应用程序永远不会取消引用它,它只是使用URI作为不透明字符串进行相等比较。