Api REST URL中的[]或()

Api REST URL中的[]或(),api,rest,routes,Api,Rest,Routes,有人在RESTAPI URL中使用过[]或()吗 假设性例子: /cars?[colors]:red,[engineType]:13 /cars?(colors):red,(engineType):13 说给我所有红色和某种发动机类型的车。颜色是汽车资源的一个子属性 有没有人见过使用这些工具的问题,或者使用起来很普遍 这是另一个例子。给我所有的城市,但只给那些人们喝咖啡的城市 /cities?filter=(people[drinks[type]:6]) 或者我甚至可以允许更多的设置来执

有人在RESTAPI URL中使用过[]或()吗

假设性例子:

/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)
本质上,在第二种情况下,逗号本身是隐式的,对于查询来说,因为()表示一个过滤条件,所以我们有一个过滤条件,逗号,第二个过滤条件,这样就可以通过()和()轻松地连接到SQL如果您在解析请求中的url值并将其传递给后端的查询时考虑到这一点

这是我的主意

()-表示一个筛选器级别,添加多个()表示多个筛选器 []-表示资源的子属性


因此,打电话的人可以说,给我一份城市名单,但只给那些喜欢喝咖啡的人(第6类)。

没有正式的休息规定,但这是非常不寻常的。通常的方法是以key=value的形式对参数进行URL编码。几乎所有的图书馆都会帮助你做到这一点。您必须手动解析您发明的这种自定义格式(并且您需要找出任何转义问题;如果
[
可以是字符串的一部分,该怎么办?在任何情况下,都不清楚括号给您带来了什么

更常见的方法是:

/cars?color=red&engineType=13

到目前为止,我遇到了两种常见的模式:

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

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

为什么不使用JSON()?我说的是你发送到REST API的url。举个例子,你是什么意思?我已经看到,POST在获取数据方面违反了REST惯例。我更愿意不走这条路。你是什么意思?为什么不使用json,把它放在哪里?在GET中?如果你指的是GET,我不想发布和发送json。对,但是考虑更复杂的问题。这对于简单的过滤很好。考虑更深层次的过滤。如果我想要红色和色调10的汽车,并且色调是颜色的子资源,该怎么办?如何在url中开始指定资源的子资源等等。使用()或[]您可以开始允许在该资源的属性和这些属性的属性的链中进一步进行非常具体的筛选。请查看我的更新,了解更复杂的示例和我关于允许以一致的方式进行更复杂查询的想法,以及我如何“我在我的url中指定了这一点。我见过其他API,比如Stormpath,这是一个非常好的API用法()很多API也使用+as来允许查询语法,但我不打算这样做route@MSSucks这是可能的。我没有花太多时间来检查不同REST API中的URI结构…只要您的解决方案符合URI标准,就没有问题。如果不符合,您将从错误消息中知道。怎么样t当你需要更深入的时候,比如colors.engine.type在一个层次结构中?比如/cars/colors.tone:14看..有颜色,它有一个tone属性,所以我要在属性中降低lke 3个级别。@WeDoTDD我认为这里的主要问题是,你需要一个查询语言,而我们没有一个用于URI-s的标准查询语言。所以这并不重要r只要服务器理解,就使用哪种URI模板。