使用编码对象查询参数进行GET请求

时间:2016-07-05 06:44:26

标签: httprequest urlencode url-encoding query-parameters

在与团队一起设计API时,针对我们发送的一些复杂查询参数转发了一个建议,这些参数需要编码为对象,对象数组等。假设我有一条路由GET /resource/和我想直接在查询参数中应用一组过滤器。此过滤器的对象文字结构类似于

filter: {
  field1: {
    contains: 'value',
    notin: ['value2', 'value3']
  },
  field2: {
    greaterThan: 10
  }
}

通过查询字符串解析器(例如express.js内部使用的qs节点模块)在URL中对此进行编码在后端是便宜的。但是1)生成的url非常难以阅读,如果客户端想要使用API​​连接他需要使用编码库,2)我认为我没有遇到像这样的查询参数的使用,它看起来有点过度工程,我不确定它是如何使用的,是否真的很安全。

上面的示例将产生查询参数,例如:

GET /resource/?field1%5Bcontains%5D=value&field1%5Bnotin%5D%5B0%5D=value2&field1%5Bnotin%5D%5B1%5D=value3&field2%5BgreaterThan%5D=10

这种发送恰好是复杂对象的url查询参数的做法是否有一些标准或最佳实践?

1 个答案:

答案 0 :(得分:1)

当可能的参数列表很长时,我们实施了不同的过滤解决方案。我们最终分两步完成,发布过滤器并返回过滤器ID。然后可以在GET查询中使用过滤器ID。

我们很难找到任何最佳做法。