代码之家  ›  专栏  ›  技术社区  ›  andrecarlucci

创建RESTful复杂查询的最佳方法是什么?

  •  6
  • andrecarlucci  · 技术社区  · 16 年前

    假设我想要得到X个集合,对每个集合应用过滤器和方程,使用其他操作组合集合,并返回一个结果,所有内容都在一个请求中。

    它太复杂(太大)了,无法将所有内容都放在querystring中,因为我可以组合300多个集合(加上每个集合的运算符和筛选器)。

    我考虑使用POST将描述查询的XML对象发送到以下对象:

    http://mydomain/collections/complexQuery
    

    它将返回一个唯一的ID,然后我可以使用GET检索complexQuery结果:

    http://mydomain/collections/complexQuery/{queryId}
    

    贾森S:

    这就是我的想法。这篇文章将采用查询的XML表示,其中已经有“where”参数(它们可能太多)。只有当GET到达时,才会执行查询。我可以让查询对象在一段时间内可用,以后再删除它。

    4 回复  |  直到 16 年前
        1
  •  2
  •   Jason S    16 年前

    如果您使用的是唯一的ID,我觉得这听起来很安静。如果查询结果集很大,您可能希望包括一种请求结果集行M-N的方法,其中M,N是参数。

        2
  •  2
  •   Ray Toal    12 年前

    POST 对资源进行访问,并期望 201 Created (无实体体)中创建的结果的URI Location 200 OK 响应,以及可选的一个URI,该URI指向响应中的结果,以供将来(de)引用,以及结果的副本。

        3
  •  1
  •   LiorH    16 年前

    没关系。但它带来了一些问题:

    1. 您必须在服务器上持久化查询数据,何时清理旧查询?
    2. 您的客户需要熟悉您期望的XML模式,而不是众所周知的: param1=val1&param2=val2
        4
  •  1
  •   opensas    15 年前

    对不起,我的无知。。。

    但是为什么不直接用post返回数据呢???

    我能理解为什么用get更新数据是错误的,但我不明白为什么每次发布都必须更新数据?

    我还了解到,每个get方法都可能被缓存(因为它们不修改数据),但在这种情况下,只有当临时保存的查询仍然处于活动状态时,才能缓存它们。。。这又增加了一层复杂性。。。