我有一个用于嵌套搜索参数的 JS 对象文字结构,如下所示:
var search = {
op: 'and',
cri: [
{f: 'foo', o: '=', v: 123},
{
op: 'or',
cri: [
{f: 'bar', o: '<', 456},
{f: 'baz', o: '>', 789}
]
}
]
};
该结构的 SQL 查询的等效WHERE
子句是:
(foo = 123 AND (bar < 456 OR baz > 789))
这种结构允许我很好地模拟嵌套搜索条件,但我不确定通过 HTTPGET
请求传递此类高级数据结构的最佳实践是什么。如果它是一个POST
请求,我只需 JSON 编码并将其粘贴在消息正文中,并带有适当的Content-Type
. 但是,这是一个搜索,所以从语义上讲,我应该使用 HTTP GET
。在我看来,我的选择是:
- JSON/URL 对结构进行编码并将其作为一个 URL 查询参数传递并让服务器对其进行解码
- 想出一个非常笨拙的 DSL,将这种结构转换为简单的键/值对(不知何故)
- 对 URL 查询参数使用内置数组语法(例如
?search[0][op]=and&search[0][cri][0][f]=foo&...
)
还有比这些更好的选择吗?如果不是,这三个中哪个是“最好的”?