在REST API中使用GET请求放置许多请求参数

时间:2013-05-15 05:38:57

标签: java http rest

在REST API中使用GET请求放置许多请求参数是一个好习惯吗?

我已经浏览了几个网站,并试图通过参数实现获得标准的GET URI方式。

以下是我想要实现的目标:search for all users having provided all the search criteria

搜索条件类似于companyIDsectionsoffsetlimitorderbyfilter

根据基本标准GET请求中不能包含request body or payload

在请求网址中发出GET请求并将所有参数放在?之后是不是一个好方法,如下所示:

GET http://localhost:8080/api/users?companyId=qwerty&sections=hr&offset=0&limit=20&oorderby=asc&filter=^[sSmM]

我正在考虑发出PUTPOST请求并将所有这些数据发送到有效负载中,并实现代码以返回所需的响应,即用户列表。

如果我这样做,我将更改HTTP methods的默认行为。

请你指导一下摆脱困境的方法。 感谢。

3 个答案:

答案 0 :(得分:3)

我认为您在GET请求中放入了多少参数并不重要。 POSTPUT请求的目的不是保持您的URL清洁,而是使用REST结构。

GET,POST和PUT的原始定义是

  • GET:从您的服务器获取资源
  • POST:在您的服务器上创建资源
  • PUT:更新服务器上的资源

答案 1 :(得分:2)

实际上,您可以通过GET请求传递请求正文。这样做并不常见。 Jquery在浏览器端支持这一点,而REST API,例如弹性搜索API使用它。他们有一个很好的基于json的查询dsl,你实际上可以使用GET请求。由于某些HTTP框架不支持使用GET传递正文,因此Elasticsearch也会使用POST提供回退。

至于使用大量的url参数,你应该记住两个问题:

  1. 网址没有无限长度。浏览器之间存在一些差异,但通常最多只有几KB。特别是一些旧的移动浏览器在这里有限制如果你在请求中放了很多东西,很容易遇到这个限制,基本上这意味着url会被截断。
  2. 长URI看起来很难看,你不一定要在网络用户界面中显示它们。

答案 2 :(得分:1)

休息只不过是技术/框架/程序。

简单的servlet调用并不特别。它始终遵循请求的标准约定

GET - 从服务器检索任何数据。您可以拥有任意数量的参数,限制为256个字符。参数应该只作为传入数据的过滤器,并且它们不会改变系统。

<强> https://www.google.co.in/search?q=google&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

如果您看到上述网址,则可以看到许多参数。但它们只是结果的过滤器。它们不会改变系统。

POST - 发送一些数据,以便改变系统,通常添加/删除数据。

PUT - 当你想要更新现有数据时,这是一个特殊的事情,比如POST的进步,