4

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

我浏览了几个站点并试图获得执行GET URI参数实现的标准方法。

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

搜索条件如companyID, sections, offset, limit, orderby, filter

根据基本标准GET要求不能request body or payload在其中。

GET发出请求并将所有参数放在?请求 URL 中是否是一种好方法,如下所示:

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

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

如果我这样做,我将更改HTTP methods.

你能指导我摆脱困境的方法吗?谢谢。

4

3 回答 3

3

实际上,您可以使用 GET 请求传递请求正文。这样做并不常见。Jquery 在浏览器端支持此功能,REST API(例如弹性搜索 API)使用此功能。他们有一个很好的基于 json 的查询 dsl,您实际上可以对这些使用 GET 请求。因为一些 HTTP 框架不支持使用 GET 传递正文,所以 Elasticsearch 也提供了使用 POST 的回退。

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

  1. URL 没有无限长度。浏览器之间对此存在一些差异,但通常最大为几 KB。特别是一些较旧的移动浏览器在这里有限制。如果你在请求中放了很多东西,很容易遇到这个限制,基本上这意味着 url 会被截断。
  2. 长 URI 看起来有点难看,您不一定想在 Web UI 中显示它们。
于 2013-05-15T09:54:49.827 回答
3

GET我认为您在请求中输入多少参数并不重要。POSTor请求的目的PUT不是保持 URL 干净,而是与 REST 结构保持一致。

GET、POST 和 PUT 的原始定义是

  • GET: 从你的服务器获取资源
  • POST: 在你的服务器上创建一个资源
  • PUT: 更新服务器上的资源
于 2013-05-15T05:46:50.653 回答
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

如果你看到上面的 URL,你可以看到很多参数。但它们只是结果的过滤器。他们不会改变系统。

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

PUT - 这是一些特殊的东西,比如 POST 的进步,当你想要更新现有数据时使用

于 2013-05-15T05:48:03.093 回答