【发布时间】:2016-11-06 21:37:11
【问题描述】:
在与团队一起设计 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查询参数的做法是否有一些标准或最佳做法?
【问题讨论】:
标签: httprequest urlencode url-encoding query-parameters