假设我有一个REST API /cars
。如果我做GET /cars
我将获得所有车辆(如果我被允许)。但如果我只想获得那些红色的汽车,我可能会GET /cars?color=red
。
现在让我们假设我想对它们进行排序,比如我的选项是升序还是降序。
GET /cars?color=red&sort=asc
这里的问题是sort
不是搜索词,它是一个选项。这使服务器难以区分搜索术语 color=red
和搜索选项 sort=asc
。
这也是设计API的一种不好的方法,因为有一天你可能希望使用sort
作为你可以搜索的字段(而不是选项)。
人们会如何建议构建此搜索API?以下是我找到的选项:
search.color=red&search.year=2010&sort=asc
color=red&year=2010&option.sort=asc
search=[color=red&year=2010]&sort=asc
([..]
部分网址编码)思想?
答案 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。有很好的图书馆。