带有许多参数的“长”GET 请求

Posted

技术标签:

【中文标题】带有许多参数的“长”GET 请求【英文标题】:A "long" GET request with many parameters 【发布时间】:2016-09-06 16:53:22 【问题描述】:

我正在实现一个 RESTful API 接口,并且想知道一些限制和最佳实践。

我有一个 GET 请求,它从数据库表中检索一系列条目。

然而我的问题是,我允许我的调用者传入一组相当复杂的标准来过滤掉他们想要的东西。

我的情况是:

序列化为查询字符串后,我的查询字符串远远超出了 GET 请求的限制。 我想维护一个 RESTful API,因为我正在检索记录,所以我应该使用 GET 请求。

如果我不想违反 RESTful API,但想实现传递长查询参数字符串的目标,解决此问题的最佳实践是什么?

欢迎提出任何建议。谢谢!

【问题讨论】:

这里使用 POST 和 Google 翻译的标题的好答案:***.com/questions/19771031/… Design RESTful query API with a long list of query parameters的可能重复 @ThomasDavidBaker 实际上,我认为您对引用 Google API 的答案是正确的。使用 POST 并欺骗 GET 方法可能是最干净、最简单和最无缝的方法。 @AlexandruMarculescu 感谢您的回答。尽管我确实同意这个问题有些相似(不完全相同)。请给我一些时间来改写它。可能它会引用 Thomas 发布的链接,因为在我看来,这是迄今为止我所看到和建议的最佳方法。 【参考方案1】:

一种解决方案是在前端而不是后端进行过滤。因此,您通过 GET 请求获取所有记录,但仅向用户显示过滤后的记录。 (当然你没有得到用户无权查看的记录,你在服务器端过滤它们)

优点:

纯 REST 解决方案,您无需发送 POST 请求来获取某些东西

您在开始时提出 1 个请求,随着用户尝试不同的过滤器,不需要额外的请求

缺点:

如果数据集太大,请求可能会消耗大量网络资源。但这将是 1 次请求,因为额外的过滤不需要新的请求。此外,对响应进行 gzip 压缩可显着减小 JSON 响应的大小,因此您可以通过几百 KB 发送包含数千条记录的 JSON 响应。

如果数据集太大,过滤操作可能会在浏览器中花费很长时间并暂时冻结。

因此,此解决方案高度依赖于您的用例,但它是解决方案之一。也许混合方法可能有用,例如在服务器端进行一些主要过滤,在客户端进行其余过滤。

【讨论】:

以上是关于带有许多参数的“长”GET 请求的主要内容,如果未能解决你的问题,请参考以下文章

无法生成带有参数的 get 请求的 json 响应

在正文中发送 GET 请求参数

带有查询字符串参数的node.js http'get'请求

如何为带有可选 URL 参数的 GET 请求映射不同的 JSON 响应

前端get请求url拼接多项参数方法

android get/post如何实现多参数请求