我有一个针对我的服务的查询API,看起来像这样(JSON-ish格式):
{
filter: {
,attribute2: [val21, val22]
,attribute3: []
}
}
有效地表示,在SQL-ish语法中选择数据WHERE attribute2 in ("val21", "val22") AND attribute3 IS NOT NULL
(意思是,返回的对象具有属性3设置,但我真的不在乎它的价值是什么.SQL isn&t; t当然,我非常擅长表达这一点,因为我的数据是键值存储,其中键可能是"根本不设置"而不是空值。)
我需要扩展此API以便能够表达IS NOT SET
谓词,并且我不知道这样做的好方法是什么。
我唯一能想到的就是添加一个特殊的" NOT_SET "请求API中的值,它将产生NOT SET
语义;但它似乎很笨拙而且很难掌握:
就其表现力/能力而言,API语法可以被视为JSON
一个理想的答案会引用一些公认的API设计规则,以表明它的良好"。
{
filter: {
,attribute2: [val21, val22]
,attribute4: [__NOT_SET__]
}
}
答案 0 :(得分:1)
我的建议是放弃尝试使用键值对来表示谓词短语。您应该具有更多的灵活性,其结构类似于:
{
filters: [
{ attribute: "attribute2", verb: "IN", values: [val21, val22] },
{ attribute: "attribute2", verb: "NOT IN", values: [val21, val22] },
{ attribute: "attribute4", verb: "IS NOT SET" },
]
}
当然,你需要一个动词的枚举,值必须是可选的。如果需要,你可以在以后添加更多动词,而且你不再对穷人:
施加太大的压力。您还可以向客户端提供受支持的谓词列表以及它们所采用的类型的值(如果有),以便客户端可以根据需要动态构建UI。
当然,这是一个突破性的变化,这可能是也可能不是问题。