我们目前正在构建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_stock
和max_stock
,或者是否可能(或者我们甚至想要?)使用逻辑运算符(?stock=>=1&stock=<=5
)。是否有处理URL或此类情况的标准?
我们是否过度思考?可能吗?我们不应该过滤我们的结局,但让用户自己解决这个问题吗?
答案 0 :(得分:1)
REST范例是关于资源(你所有访问的都是资源)和人类的可理解性。这就是为什么你使你的列表网址复数的原因。
话虽如此,我做认为,如果你想以两种不同的方式过滤(使用=
,like
,正则表达式...)你有两个可能性:
product_name_exact
,product_name_like
,product_name_regex
。它看起来像是python.django的过滤方式,而且相当优雅; query
字段,然后创建一个query_mode
它就像bing api一样。