首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量使用HATEOAS

批量使用HATEOAS
EN

Stack Overflow用户
提问于 2019-08-19 19:08:06
回答 1查看 174关注 0票数 1

我见过许多HATE美洲组织的例子,每个资源都有与相关资源的链接。如果一个API返回每页特定资源的N个项,客户端可能需要N个调用才能通过使用HATE美洲组织来获取任何嵌套资源。例如:

获取城市/文档:

代码语言:javascript
复制
[{
    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来表达这样的东西?我读过关于模板的文章,但不确定模板应该是什么样子,客户端将如何使用它?

EN

回答 1

Stack Overflow用户

发布于 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。

代码语言:javascript
复制
/filtered-cities?start=1&end=2000

因此,客户端需要了解表单的用途,以及如何识别表单中不同元素的语义。代理需要理解将表单数据传输到URI的处理规则。

URI模板是相同的基本概念;它们给您提供了一种域无关语言,可以用它来描述资源标识符中参数的位置。基本模式是相同的,需要就参数的语义达成一致,服务器提供URI,客户端提供参数映射,泛型代码可以处理合并。

代码语言:javascript
复制
uri = template.apply(parameterMap)

URI模板不像表单那么强大;使用表单,可以为参数引入默认值,但是URI模板中没有类似的功能。

哈尔式可以让您更好地了解基于表单的方法在JSON中的工作方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57562608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档