我正在设计一个 RESTful API,我正在尝试在查询资源时如何用 OR 运算符表示谓词。
例如,如果我有一个具有属性名称的资源 Foo,您将如何搜索名称与“Name1”或“Name2”匹配的所有 Foo 资源?
当它是 AND 运算符时,这是直截了当的,因为我可以执行以下操作: http ://www.website.com/Foo?Name=Name1&Age=19
我见过的另一种方法是在正文中发布搜索。
我正在设计一个 RESTful API,我正在尝试在查询资源时如何用 OR 运算符表示谓词。
例如,如果我有一个具有属性名称的资源 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 中保持一致。
那么解决这个问题的一种快速方法是添加一个额外的参数来识别参数之间的关系,无论它们是一个和或一个或例如:
http://www.website.com/Foo?Name=Name1&Age=19&or=true
或者对于更复杂的查询,只需保留一个参数,并通过组成您自己的小查询语言来包含您的整个查询,在服务器端,您将解析整个字符串并提取信息和语句。