2016-07-05 158 views
1

使用团队设计API时,我们发送了一些需要编码为对象,对象数组等的复杂查询参数的建议。一条路线GET /resource/,我想直接在查询参数中应用一组过滤器。该滤波器的目的字面结构会是这样的使用GET请求的编码对象查询参数

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

编码本中的URL,经由一个查询串分析器诸如express.js内部使用qs节点模块,将是对后端便宜。但是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 

请问这种做法发送碰巧是复杂的对象都有一些标准或最佳做法网址查询参数?

回答

1

当可能的参数列表非常长时,我们实现了一个不同的过滤解决方案。我们最终做了两个步骤,发布过滤器并返回一个过滤器ID。过滤器ID可以在GET查询中使用。

我们很难找到这方面的最佳实践。