首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用HATEOAS和查询参数进行RESTful搜索?

如何使用HATEOAS和查询参数进行RESTful搜索?
EN

Stack Overflow用户
提问于 2011-05-16 19:17:05
回答 3查看 6.7K关注 0票数 35

我想使用查询参数设计一个RESTful搜索URI。例如,此URI返回所有用户的列表:

获取/users

前25个姓“哈维”的用户:

获取/users?surname=Harvey&maxResults=25

如何使用超媒体来描述"/users“资源所允许的查询参数?我注意到新的谷歌任务API只是记录了参考指南中的所有查询参数。我会记录清单,但我也想用HATEOAS来做。

提前谢谢你!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-16 19:26:13

使用当前URI模板规范草案中描述的语法,您可以这样做:

代码语言:javascript
运行
复制
/users{?surname,maxresults}
票数 22
EN

Stack Overflow用户

发布于 2011-05-17 00:12:24

另一个选项是使用html表单:

代码语言:javascript
运行
复制
<form method="get" action="/users">
   <label for="surname">Surname: </label>
     <input type="text" name="surname"/>
   <label for="maxresults">Max Results: </label>
     <input type="text" name="maxresults" value="25"/> <!-- default is 25 -->
   <input type="submit" name="submitbutton" value="submit"/>
</form>

像这样的表单完全记录了可用的选项和任何缺省值,它创建了指定的URL,并且可以用您想要放在那里的任何进一步的文档进行注释。

票数 6
EN

Stack Overflow用户

发布于 2015-06-21 20:06:46

我不是休息专家,但让我把我的两句话说出来:

在人工Web上,HTML表单通常用于为搜索结果的表示构建URI。问题是,可编程Web没有表单。但是你可以很容易地定义一些类似的东西,那就是:

  1. 为搜索描述定义一个媒体类型,比如application/prs.example.searchdescription+json (但是请注意这个答案末尾的P.S. );
  2. 公开表示搜索用户的子资源/users/search

第二步将通过链接到其他地方的子资源来实现。例如,假设客户机请求了GET /users。它可能会收到类似这样的信息:

代码语言:javascript
运行
复制
{ _links: [ …, { rel: "search", href: "/users/search" }, …] }

客户端可以遵循该链接,并将搜索规范POST到该资源URI,例如:

代码语言:javascript
运行
复制
POST /users/search
…
Content-Type: application/prs.example.search-definition+json
…

{ criteria: { surname: "Harvey" }, maxResults: 25 }

在这里,criteria包含要查找的对象的(部分)表示。这可以变成一个任意复杂的描述。

对于上述请求,服务器可以使用状态代码200 OK进行答复,并在实体主体中提供指向表示发布搜索结果的资源的链接:

代码语言:javascript
运行
复制
{ _links: [ { rel: "results", href: "/users?surname=Harvey&maxResults=25" } ] }

然后,客户端可以使用results关系导航到URI以获得搜索结果,而无需组装URI本身。

P.S.:当我最初写这篇文章时,我还没有意识到一直定义新的媒体类型可能会成为问题。马克?诺丁汉写了一篇关于“媒体类型的扩散”以及如何与之作斗争的博客。通过利用链接关系

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

https://stackoverflow.com/questions/6022230

复制
相关文章

相似问题

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