在与团队一起设计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查询参数的做法是否有一些标准或最佳实践?
答案 0 :(得分:1)
当可能的参数列表很长时,我们实施了不同的过滤解决方案。我们最终分两步完成,发布过滤器并返回过滤器ID。然后可以在GET查询中使用过滤器ID。
我们很难找到任何最佳做法。