希望是一个简单的问题:
如果我有一个可以出租车的情况,我会用哪条路线来查看汽车的预订:
/预订/汽车/:carID
或者
/汽车/:carID /预订
我可以看到它们是如何工作的,但哪一种更好,因为预订它应该是通过预订终点而不是汽车终点。
我认为通过导航到Car端点然后进入预订会更好。
答案 0 :(得分:3)
正确的选择是:/cars/:carID/bookings
以下是文章的引用(使用您的示例)RESTful API Designing guidelines — The best practices,原因如下:
[...]如果我们在资源下拥有资源,例如汽车预订, 那么一些示例API端点将是:
GET /cars/3/bookings
应该会获得所有预订汽车3的列表GET /cars/3/bookings/45
应该获得预订45的详细信息,该信息属于car 3DELETE /cars/3/bookings/45
应删除预订45,属于car 3POST /cars/3/bookings/
应为汽车3创建新的预订并返回新预订的详细信息
这是另一篇关于RPC和RESTful服务之间差异的精彩文章,它也有很好的例子:Understanding RPC Vs REST For HTTP APIs
以下是该文章的结论(文章的主要部分中引用的内容太多了):
一个简单的经验法则是:
- 如果API主要是动作,也许它应该是RPC。
- 如果API主要是CRUD并且正在操纵相关数据,那么它可能应该是REST。
如果两者都不是明显的赢家怎么办?你选择哪种方法?
同时使用REST和RPC链接
您需要选择一种方法并且只有一个API的想法是 有点虚伪。应用程序很容易有多个 API或其他服务不被视为" main" API。 使用任何公开HTTP端点的API或服务,您都拥有 遵循REST或RPC规则之间的选择,也许你愿意 有一个REST API和一些RPC服务。
了解REST和RPC之间的差异非常有用 当你计划一个新的API,它可以真正帮助你 致力于现有API的功能。最好不要混合风格 一个API,因为这可能会让消费者感到困惑 您的API以及期望一组约定的任何工具 (例如,REST),当它看到一个时,它就会倒下 不同的约定集(RPC)。在有意义的时候使用REST,或者 如果更合适,请使用RPC。或者使用两者并充分利用 两个世界!