我见过许多HATE美洲组织的例子,每个资源都有与相关资源的链接。如果一个API返回每页特定资源的N个项,客户端可能需要N个调用才能通过使用HATE美洲组织来获取任何嵌套资源。例如:
获取城市/文档:
[{
id: 1,
city: {
self: 'http://service.com/cities?filter=id==1'
},
document: { ... }
...
}, {
id: 2,
city: {
self: 'http://service.com/cities?filter=id==2'
},
document: { ... }
...
}]查询参数使用FIQL语法定义过滤器。
现在,如果客户端要获取每个文档的城市详细信息(显示在UI上),那么它可能需要N个额外的调用。但是,在我的例子中,/cities API还可以接受多个城市ids,比如:/cities?filter=id=in=(1,2),它可以将N个调用减少到一个。有没有办法用HATEOAS来表达这样的东西?我读过关于模板的文章,但不确定模板应该是什么样子,客户端将如何使用它?
发布于 2019-08-19 20:40:12
我见过许多HATE美洲组织的例子,每个资源都有与相关资源的链接。如果一个API返回每页特定资源的N个项,客户端可能需要N个调用才能通过使用HATE美洲组织来获取任何嵌套资源。
是。在服务器推送的世界中,服务器可以主动提供多个资源来响应查询,这就不太正确了。如果你想要一个网页,得到一个html,还有图片和java脚本资源,那么你就有了正确的想法。
API还可以获取多个城市ids,比如: /cities?filter=id=in=(1,2),它可以将N个调用减少到一个。有没有办法用HATEOAS来表达这样的东西?
是。
让我们仔细地看一看。您在这里所做的是引入了一个新的资源,带有标识符/cities?filter=id=in=(1,2)。您可能有另一个资源/cities?filter=id=in=(1,20)和另一个资源/cities?filter=id=in=(1,2000)。在您的实现中,这些可能是从标识符中提取参数并使用它们生成正确表示的“单个端点”。
因此,您得到的是类似于数据传输对象的东西--一个在一次访问中获取的大粒度资源。
我读过关于模板的文章,但不确定模板应该是什么样子,客户端将如何使用它?
您可能已经看到的最简单的示例是web表单。您允许客户端提供开始元素和结束元素,表单处理接受该信息并从中创建指定的URI。
/filtered-cities?start=1&end=2000因此,客户端需要了解表单的用途,以及如何识别表单中不同元素的语义。代理需要理解将表单数据传输到URI的处理规则。
URI模板是相同的基本概念;它们给您提供了一种域无关语言,可以用它来描述资源标识符中参数的位置。基本模式是相同的,需要就参数的语义达成一致,服务器提供URI,客户端提供参数映射,泛型代码可以处理合并。
uri = template.apply(parameterMap)URI模板不像表单那么强大;使用表单,可以为参数引入默认值,但是URI模板中没有类似的功能。
哈尔式可以让您更好地了解基于表单的方法在JSON中的工作方式。
https://stackoverflow.com/questions/57562608
复制相似问题