将REST查询搜索术语与选项分开的最佳选择是什么?

时间:2014-03-10 12:02:27

标签: rest

假设我有一个REST API /cars。如果我做GET /cars我将获得所有车辆(如果我被允许)。但如果我只想获得那些红色的汽车,我可能会GET /cars?color=red

现在让我们假设我想对它们进行排序,比如我的选项是升序还是降序。

GET /cars?color=red&sort=asc

这里的问题是sort不是搜索词,它是一个选项。这使服务器难以区分搜索术语 color=red和搜索选项 sort=asc

这也是设计API的一种不好的方法,因为有一天你可能希望使用sort作为你可以搜索的字段(而不是选项)。

人们会如何建议构建此搜索API?以下是我找到的选项:

  1. 保持原样,知道根据定义,某些字段是选项而非条款。
  2. 搜索字词的特殊标记,例如search.color=red&search.year=2010&sort=asc
  3. 搜索选项的特殊标记,例如color=red&year=2010&option.sort=asc
  4. 整个事物的特殊标志,例如search=[color=red&year=2010]&sort=asc[..]部分网址编码)
  5. 思想?

1 个答案:

答案 0 :(得分:2)

如何使用OData http://www.odata.org/documentation/odata-version-2-0/uri-conventions/

OData v2

GET /cars?$orderby=Rating asc
GET /cars?$filter=color eq red
GET /cars$filter=color eq red and year eq 2000&$skip=2&$top=2&$orderby=category/rating desc

或者检查版本3或4的OData库和URI语法。 OData是某种标准,支持.NET,Java和JavaScript。有很好的图书馆。