我正在设计RESTful API,并试图弄清楚在查询资源时如何用OR运算符表示谓词。
例如,如果我有一个属性为Name的资源Foo,那么如何搜索名称匹配“ Name1”或“ Name2”的所有Foo资源?
当它是AND运算符时,这很简单,因为我可以执行以下操作: http : //www.website.com/Foo?Name=Name1&Age=19
我见过的另一种方法是将搜索发布到正文中。
您将需要选择自己的方法,但是我可以列举一些看似合乎逻辑的方法(尽管并非没有缺点):
选项1 .:使用|
操作员:
http://www.website.com/Foo?Name=Name1|Name2
选项2:使用修改后的查询参数允许从集合中的值之一(可能的逗号分隔值列表)中进行选择:
http://www.website.com/Foo?Name_in=Name1,Name2
选项3 .:使用类似PHP的表示法提供列表而不是单个字符串:
http://www.website.com/Foo?Name[]=Name1&Name[]=Name2
上面提到的所有选项都具有一个巨大的优势:它们不会干扰其他查询参数。
但是正如我提到的,选择您自己的方法,并在整个API中保持一致。
解决此问题的一种快速方法是添加一个附加参数,以识别参数之间的关系,例如它们是and和or或or:
http://www.website.com/Foo?Name=Name1&Age=19&or=true
或者对于更复杂的查询,只需保留一个参数,并通过使用自己的少量查询语言就可以包含整个查询,在服务器端,您可以解析整个字符串并提取信息和语句。