如何向 GET 请求发送巨大的参数列表

问题描述 投票:0回答:4

我的服务器中有一个 REST API,其中 List 操作(应使用 GET 方法实现)从客户端接收多个参数:

  • 当前页面
  • 行数
  • 用于执行快速搜索的文本
  • 定义复杂搜索过滤器的对象(“字段操作值”形式的规则集)

由于过滤搜索的对象很复杂,我需要将 List 定义为 POST,我认为这不是一个好主意,因为 REST 将列表操作定义为 GET。

我的问题很简单:有没有办法使用 GET 方法来解决这个问题,避免使用带有参数的巨大 URL 来调用它?

javascript java spring rest api
4个回答
7
投票

感谢您的回答。看来这个问题确实很令人担忧,因为没有明确有效的答案。由开发者决定如何处理。

  • REST 说你应该使用 GET 方法来列出,但是大的 URI 非常难看。现在有什么问题吗?看起来没有问题,因为大多数浏览器都支持非常大的URI(Internet Explorer,回家,你不玩这个游戏)
  • 你也可以使用 PUT/POST 方法来列出,但它似乎没有实现 REST 原则
  • 您可以使用 GET 方法来传递简单的参数,并将复杂的参数附加在 body 中,但这并没有实现 HTTP 原理

所以看来最好的方法是第一种:使用 GET 并构建巨大的 URI。


2
投票

您可以将对象转换为 json,然后对 json 文本字符串进行 url 编码,以便将其放入单个参数中。

为了使 url 编码的 json 字符串更短,您可以在将对象转换为 json 文本字符串之前删除对象中的所有默认值。

get 请求中的长查询字符串很常见,因此无需担心这些。查询字符串的长度存在限制


1
投票

我遇到了类似的问题。我必须发送一个巨大的列表,但我仍然必须使用 GET。我最终用编码算法对字符串进行编码并像这样发送它。我在后端解码列表。我还有一个参数,它指定调用是否进行编码,因此端点可以使用编码的和未编码的。

您也可以将此方法用于多个参数。您可以发送参数列表,例如 param1:value1,param2:value2 编码并在后端对其进行解码。

我研究的另一种方法是使用 Base 62 来转换数字。


0
投票

по REST можно сдлеать так : POST 操作/GetView/方法 正文:列表

© www.soinside.com 2019 - 2024. All rights reserved.