我想使用查询参数设计一个RESTful搜索URI。例如,此URI返回所有用户的列表:
获取/users
前25个姓“哈维”的用户:
获取/users?surname=Harvey&maxResults=25
如何使用超媒体来描述"/users“资源所允许的查询参数?我注意到新的谷歌任务API只是记录了参考指南中的所有查询参数。我会记录清单,但我也想用HATEOAS来做。
提前谢谢你!
发布于 2011-05-16 19:26:13
使用当前URI模板规范草案中描述的语法,您可以这样做:
/users{?surname,maxresults}发布于 2011-05-17 00:12:24
另一个选项是使用html表单:
<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,并且可以用您想要放在那里的任何进一步的文档进行注释。
发布于 2015-06-21 20:06:46
我不是休息专家,但让我把我的两句话说出来:
在人工Web上,HTML表单通常用于为搜索结果的表示构建URI。问题是,可编程Web没有表单。但是你可以很容易地定义一些类似的东西,那就是:
application/prs.example.searchdescription+json (但是请注意这个答案末尾的P.S. );/users/search。第二步将通过链接到其他地方的子资源来实现。例如,假设客户机请求了GET /users。它可能会收到类似这样的信息:
{ _links: [ …, { rel: "search", href: "/users/search" }, …] }客户端可以遵循该链接,并将搜索规范POST到该资源URI,例如:
POST /users/search
…
Content-Type: application/prs.example.search-definition+json
…
{ criteria: { surname: "Harvey" }, maxResults: 25 }在这里,criteria包含要查找的对象的(部分)表示。这可以变成一个任意复杂的描述。
对于上述请求,服务器可以使用状态代码200 OK进行答复,并在实体主体中提供指向表示发布搜索结果的资源的链接:
{ _links: [ { rel: "results", href: "/users?surname=Harvey&maxResults=25" } ] }然后,客户端可以使用results关系导航到URI以获得搜索结果,而无需组装URI本身。
P.S.:当我最初写这篇文章时,我还没有意识到一直定义新的媒体类型可能会成为问题。马克?诺丁汉写了一篇关于“媒体类型的扩散”以及如何与之作斗争的博客。通过利用链接关系。
https://stackoverflow.com/questions/6022230
复制相似问题