在REST api中过滤

时间:2015-02-16 13:20:09

标签: php json api rest

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

我们有/products/products会返回您有权访问的所有产品。现在,假设您想要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或此类情况的标准?

我们是否过度思考?可能吗?我们不应该过滤我们的结局,但让用户自己解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

REST范例是关于资源(你所有访问的都是资源)和人类的可理解性。这就是为什么你使你的列表网址复数的原因。

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

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