在 REST api 中过滤

Filtering within REST api

我们目前正在构建 RESTful API。现在,问题是处理过滤的最佳方法是什么。

我们有 /products/products returns 您有权访问的所有给定产品。现在,假设您想要 description 与 'No description' 完全匹配的产品。你会得到 /products?description=No+description

现在,理想情况下我们会有更多的过滤器选项。仅显示库存大于或等于 1 但小于 10 的产品。仅显示名称以 black 结尾或以 white 开头的产品。这样做的最佳做法是什么?我们会在 URL 中使用逻辑运算符吗,我们如何逃避通配符?

目前的情况是:

/products?product_name=%25black 将查找名称以黑色结尾的所有产品。

/products?product_name=white%25 将查找名称以白色开头的所有产品。

%25 是 % 的编码形式。到目前为止一切顺利。

但是,如果有人想查找名称与文字 % 字符匹配的产品怎么办?或者想找到有库存的产品?最好介绍一下

min_stockmax_stock,或者是否可以(或者我们是否想要?)使用逻辑运算符 (?stock=>=1&stock=<=5)。是否有处理 URL 或类似情况的标准?

我们是不是想多了?可能吗?是不是我们自己不做过滤,让用户自己去解决?

REST 范式是关于资源(您访问的只是资源)和人类可理解性。这就是为什么您将列表设置为 url 复数。

话虽如此,我 认为,如果您想以两种不同的方式进行过滤(使用 =like、正则表达式... ) 你有两种可能性:

  • 首先创建三个不同的过滤器 product_name_exactproduct_name_likeproduct_name_regex。它看起来像 python.django 过滤方式,而且非常优雅;
  • 第二种方式:创建一个 query 字段,然后创建一个 query_mode 这是 bing api 的工作方式。