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

Tho*_*eng 6 rest get httprequest maxlength restful-url

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

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

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

我的情况是:

  • 序列化为查询字符串后,我的查询字符串远远超过了 GET 请求的限制。
  • 我想维护一个 RESTful API,并且由于我正在检索记录,因此我似乎应该使用 GET 请求。

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

欢迎任何建议。谢谢!

Can*_*kel 4

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

优点:

  • 纯粹的 REST 解决方案,您不需要发送 POST 请求来获取某些内容

  • 您在开始时发出 1 个请求,当用户尝试不同的过滤器时,不需要其他请求

缺点:

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

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

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