在 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_stock
和 max_stock
,或者是否可以(或者我们是否想要?)使用逻辑运算符 (?stock=>=1&stock=<=5
)。是否有处理 URL 或类似情况的标准?
我们是不是想多了?可能吗?是不是我们自己不做过滤,让用户自己去解决?
REST 范式是关于资源(您访问的只是资源)和人类可理解性。这就是为什么您将列表设置为 url 复数。
话虽如此,我 认为,如果您想以两种不同的方式进行过滤(使用 =
、like
、正则表达式... ) 你有两种可能性:
- 首先创建三个不同的过滤器
product_name_exact
、product_name_like
、product_name_regex
。它看起来像 python.django 过滤方式,而且非常优雅;
- 第二种方式:创建一个
query
字段,然后创建一个 query_mode
这是 bing 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_stock
和 max_stock
,或者是否可以(或者我们是否想要?)使用逻辑运算符 (?stock=>=1&stock=<=5
)。是否有处理 URL 或类似情况的标准?
我们是不是想多了?可能吗?是不是我们自己不做过滤,让用户自己去解决?
REST 范式是关于资源(您访问的只是资源)和人类可理解性。这就是为什么您将列表设置为 url 复数。
话虽如此,我 认为,如果您想以两种不同的方式进行过滤(使用 =
、like
、正则表达式... ) 你有两种可能性:
- 首先创建三个不同的过滤器
product_name_exact
、product_name_like
、product_name_regex
。它看起来像 python.django 过滤方式,而且非常优雅; - 第二种方式:创建一个
query
字段,然后创建一个query_mode
这是 bing api 的工作方式。