我正在寻找一种合理的方式将搜索表示为RESTful URL.
设置:我有两个模型,汽车和车库,汽车可以在车库.所以我的网址看起来像:
/car/xxxx
xxx == car id
returns car with given id
/garage/yyy
yyy = garage id
returns garage with given id
Run Code Online (Sandbox Code Playgroud)
汽车可以独立存在(因此/汽车),也可以存在于车库中.例如,在给定车库中代表所有车辆的正确方法是什么?就像是:
/garage/yyy/cars ?
Run Code Online (Sandbox Code Playgroud)
车库yyy和zzz中的汽车联盟怎么样?
什么是代表搜索具有某些属性的汽车的正确方法?说:给我看看所有带4扇门的蓝色轿车:
/car/search?color=blue&type=sedan&doors=4
Run Code Online (Sandbox Code Playgroud)
或者它应该是/汽车而不是?
使用"搜索"似乎不合适 - 什么是更好的方式/术语?应该只是:
/cars/?color=blue&type=sedan&doors=4
Run Code Online (Sandbox Code Playgroud)
搜索参数应该是PATHINFO还是QUERYSTRING的一部分?
简而言之,我正在寻找跨模型REST网址设计和搜索的指导.
[更新]我喜欢贾斯汀的答案,但他没有涉及多字段搜索案例:
/cars/color:blue/type:sedan/doors:4
Run Code Online (Sandbox Code Playgroud)
或类似的东西.我们怎么样
/cars/color/blue
Run Code Online (Sandbox Code Playgroud)
到多场案件?
我认为使用REST Web服务的一个主要特征和原因是使用路径参数而不是查询参数.但是许多公开可用的REST Web服务使用查询参数.
我认为查询参数不应该在REST Web服务中使用我错了吗?是否有关于不在REST Web服务中使用查询参数的建议或规则?