我最初在GET请求中发布了多个过滤器,这些过滤器在JSON中包含多个值,但是我认为这是不好的做法,因此我将其更改为POST,但我不喜欢它,因为从查询中获取结果没有任何帮助用POST做,所以我想我必须使用查询字符串
我发现的大多数过滤器示例都使用一个过滤器或一个值,但是我正在考虑是否存在最佳做法,即传递具有多个值的多个过滤器作为查询字符串中的单个参数。
例如,这是一个基本的查找所有红色的汽车
获取/ cars?color = red
但是如果我想寻找所有的汽车怎么办
红色,蓝色或绿色以及 拥有2个座位或更少 他们的品牌名称以b和 可以在美国,英国或德国购买
以下内容可以吗?
http://myserver/api/cars?color=red|blue|green¬seats<=2¬brand[startswith]b¬country= USA | UK |德国
我建议使用:
|
字符作为给定过滤器的每个值之间的分隔符¬
字符作为每个过滤器之间的分隔符然后将在服务器端对此进行解析,并根据提供的值相应地构建相关的过滤器
希望这很有道理,但我真的对在考虑REST的情况下是否有用于这种情况的标准/最佳实践感兴趣?
谢谢。
答案 0 :(得分:0)
与大多数设计问题一样,关键是为所有API进行一致的设计。您可以遵循某些众所周知的准则/标准,以使您的API易于发现。
例如,看一下OData。 this page上的“查询”部分与您的问题有关。这是一个示例:
https://services.odata.org/v4/TripPinServiceRW/People?$top=2 & $select=FirstName, LastName & $filter=Trips/any(d:d/Budget gt 3000)
另一个选择是OpenSearch标准。相关部分为here。这是一个示例:
https://opensearch.php?recordSchema=html&query=dc.creator any Mill* Grad*
另一个有趣的选项是GraphQL,它使将查询参数映射到数据提取参数变得更加容易。它使用过滤器有效负载而不是查询参数。请参见此处的规范:GraphQL Spec。