A"长" GET请求包含许多参数

时间:2016-09-06 16:53:23

标签: rest get httprequest restful-url maxlength

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

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

然而我的问题是,我允许我的来电者通过一套非常复杂的标准来过滤他们想要的东西。

我的情况是:

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

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

欢迎任何建议。谢谢!

1 个答案:

答案 0 :(得分:2)

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

优势:

  • 一个纯粹的REST解决方案,您不会发送POST请求来获取某些东西

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

缺点:

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

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

因此,此解决方案在很大程度上取决于您的用例,但这是解决方案之一。也许混合方法可能有用,例如在服务器端进行一些主要过滤,而在客户端进行其余的过滤。