在REST API中使用GET请求放置许多请求参数是一个好习惯吗?
我已经浏览了几个网站,并试图通过参数实现获得标准的GET URI
方式。
以下是我想要实现的目标:search for all users having provided all the search criteria
。
搜索条件类似于companyID
,sections
,offset
,limit
,orderby
,filter
。
根据基本标准GET
请求中不能包含request body or payload
。
在请求网址中发出GET
请求并将所有参数放在?
之后是不是一个好方法,如下所示:
GET http://localhost:8080/api/users?companyId=qwerty§ions=hr&offset=0&limit=20&oorderby=asc&filter=^[sSmM]
我正在考虑发出PUT
或POST
请求并将所有这些数据发送到有效负载中,并实现代码以返回所需的响应,即用户列表。
如果我这样做,我将更改HTTP methods
的默认行为。
请你指导一下摆脱困境的方法。 感谢。
答案 0 :(得分:3)
我认为您在GET
请求中放入了多少参数并不重要。 POST
或PUT
请求的目的不是保持您的URL清洁,而是使用REST结构。
GET,POST和PUT的原始定义是
GET
:从您的服务器获取资源POST
:在您的服务器上创建资源PUT
:更新服务器上的资源答案 1 :(得分:2)
实际上,您可以通过GET请求传递请求正文。这样做并不常见。 Jquery在浏览器端支持这一点,而REST API,例如弹性搜索API使用它。他们有一个很好的基于json的查询dsl,你实际上可以使用GET请求。由于某些HTTP框架不支持使用GET传递正文,因此Elasticsearch也会使用POST提供回退。
至于使用大量的url参数,你应该记住两个问题:
答案 2 :(得分:1)
休息只不过是技术/框架/程序。
简单的servlet调用并不特别。它始终遵循请求的标准约定
GET - 从服务器检索任何数据。您可以拥有任意数量的参数,限制为256个字符。参数应该只作为传入数据的过滤器,并且它们不会改变系统。
如果您看到上述网址,则可以看到许多参数。但它们只是结果的过滤器。它们不会改变系统。
POST - 发送一些数据,以便改变系统,通常添加/删除数据。
PUT - 当你想要更新现有数据时,这是一个特殊的事情,比如POST的进步,