【问题标题】:Use encoded object query param for GET request对 GET 请求使用编码对象查询参数
【发布时间】: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


    【解决方案1】:

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

    我们很难找到任何最佳实践。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2013-09-08
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多