REST Urls中的[]或()

时间:2015-10-14 17:50:30

标签: api rest routes

有没有人在您的REST API网址中使用[]或()?

假设的例子:

/cars?[colors]:red,[engineType]:13
/cars?(colors):red,(engineType):13
  • 说给我所有颜色为红色和某种发动机类型的车。颜色是汽车资源的子属性。

有没有人发现使用这些问题需要注意或者使用它是否很常见?

这是另一个例子。给我所有的城市,但只有人们喝咖啡的城市

/cities?filter=(people[drinks[type]:6])

或者我甚至可以允许更多集合来执行像这样的AND

/cities?filter=(people[drinks[type]:6]),(another layer of filtering)&paging=(offset:10, limit:2)

基本上在第二个中,逗号本身是查询的隐式AND,因为()表示过滤条件,因此我们有一个过滤条件,逗号,第二个过滤条件,因此这可以很容易地连接到SQL via()和()如果你在解析请求中的url值并将其传递给后端的查询时考虑它。

这是我的想法。

() - 表示一个过滤级别,添加multiple()是多个过滤器 [] - 表示资源的子属性

所以上面允许来电者说给我一个城市列表,但只有那些人喜欢喝咖啡(6型)。

2 个答案:

答案 0 :(得分:2)

还没有真正的REST官方规范,但这是非常不寻常的。执行此操作的常规方法是以key = value形式对参数进行urlencode。几乎所有的图书馆都会帮助你做到这一点。您必须手工解析您发明的这种自定义格式(并且您需要弄清楚任何转义问题;如果,[可以成为字符串的一部分,该怎么办?在任何情况下,都不清楚括号会给你带来什么。

更常用的方法是:

/cars?color=red&engineType=13

答案 1 :(得分:0)

到目前为止,我遇到了两种频繁的模式:

  • /cars/?colors=red&engineType=13
  • /cars/colors:red/engineType:13/

在URI中使用[]或()并不常见。如果那是你想要的,我不认为你使用它们会有任何问题。如果您也想使用URI模板,请不要使用{}。