【问题标题】:RESTful API Design OR PredicatesRESTful API 设计 OR 谓词
【发布时间】:2012-11-24 09:05:04
【问题描述】:

我正在设计一个 RESTful API,并试图弄清楚在查询资源时如何使用 OR 运算符表示谓词。

例如,如果我有一个具有属性名称的资源 Foo,您将如何搜索名称与“Name1”或“Name2”匹配的所有 Foo 资源?

当它是一个 AND 运算符时,这是直截了当的,因为我可以执行以下操作: http://www.website.com/Foo?Name=Name1&Age=19

我见过的另一种方法是在正文中发布搜索。

【问题讨论】:

    标签: api rest design-patterns restful-url restful-architecture


    【解决方案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 中保持一致。

    【讨论】:

    • 谢谢你,这是我考虑的方式。我还考虑了 Ayman 所说的,这对于复杂的查询似乎也有好处
    【解决方案2】:

    解决这个问题的一种快速方法是添加一个附加参数,用于识别参数之间的关系,无论它们是一个和还是一个或例如:

    http://www.website.com/Foo?Name=Name1&Age=19&or=true

    或者对于更复杂的查询,只需保留一个参数,并通过组成您自己的小查询语言在其中包含您的整个查询,并在服务器端解析整个字符串并提取信息和语句。

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2018-05-11
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      相关资源
      最近更新 更多