如何将大型参数列表发送到GET请求

时间:2018-04-18 07:34:34

标签: javascript java spring rest api

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

  • 当前页面
  • 行数
  • 执行快速搜索的文字
  • 定义搜索的复杂过滤器的对象(“op op value”形式的规则集)

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

get请求中的长查询字符串非常常见,因此无需担心这些问题。查询字符串可能有多长a limit

答案 2 :(得分:1)

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

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

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