我正在设计一个RESTful API,并且我正在尝试找出在查询资源时如何用OR运算符表示谓词。
例如,如果我有一个具有属性Name的资源Foo,您将如何搜索名称与“Name1”或“Name2”匹配的所有Foo资源?
当它是AND运算符时,这是直截了当的,因为我可以执行以下操作: http://www.website.com/Foo?Name=Name1&Age=19
我见过的另一种方法是在体内发布搜索。
答案 0 :(得分:1)
你需要选择自己的方法,但我可以说很少看起来很合乎逻辑(虽然并非没有缺点):
选项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中保持一致。
答案 1 :(得分:0)
一个快速解决问题的方法是添加一个额外的参数来识别您的参数之间的关系,而这些参数是一个或者一个或者例如:
http://www.website.com/Foo?Name=Name1&Age=19&or=true
或者对于更复杂的查询,只需保留一个参数,并在其中包含您的整个查询,通过编写自己的小查询语言,在服务器端,您将解析整个字符串并提取信息和语句。