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

使用REST和HATEOS的非上下文操作,rest,hateoas,Rest,Hateoas,我正在尝试为酒店预订实施基于HATEOS的休息服务,但存在以下困惑: 1) 除了WADL,客户机如何了解可能的操作及其相应的URI。当客户端访问REST服务的根目录时,是否应该将所有可能的操作和URI作为响应 2) 当客户得到一个区域内所有住宿选项的列表时,我将返回他询问的区域内所有酒店的列表。答复包括: <accommodation> <hotel info="http://welco.me/hotel/xxxxxx" price="5000"/> <ho

我正在尝试为酒店预订实施基于HATEOS的休息服务,但存在以下困惑:

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>

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

  • 您应该使用一种古老的方法,即
    选项
    方法,这种方法由来已久

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

  • 在回答第一个问题时,有几个文档规范允许客户端发现RESTful API。
    • Google使用他们自己的,但与Swagger和JSON Home不同,不幸的是,我不认为有开源库可以帮助您在自己的API中使用expose
  • 对于第二个问题,我倾向于客户机/开发人员从Swagger/JSON主文档中发现参数,如排序。但是,如果这是一种超强/重要的关系,您也可以在回复中将其作为链接数据返回:
    • 在中,您可以提供带有相关资源链接的
      links
      对象
    • 在中,可以添加具有相关API url值的字段。然后,您可以添加一个
      @content
      ,以添加描述该关系含义的信息