首页 > 解决方案 > 什么是从所有孩子那里获取资源的 RESTful 方式?

问题描述

假设我有以下 api,其中 vin 是车辆识别号,属于一辆汽车。

GET /fleets/123/cars/55/vin
GET /fleets/123/cars/55/history

我想为车队的所有汽车获取所有的 vins。其中最好的是:

GET /fleets/123/cars/all/vin
GET /fleets/123/cars/*/vin
GET /fleets/123/vins
GET /fleets/123/cars/vins

前两个保留了层次结构并使控制器更直观。最后三个感觉就像它打破了一致性。

这些是首选还是有更好的方法?

标签: restapi

解决方案


这主要是一个基于意见的问题。这里没有一种真正的方法,所以你会得到我的意见。

我不确定 avin是什么,但如果它是一种资源,并且vins作为资源的子元素有一个集合fleet,我希望它会住在这里:

GET /fleets/123/vins

这向我传达了一个vin不是汽车的下属。这是它自己的事情,我正在为一个特定的舰队获得所有的 vins。

avin也作为 car 的下属存在(对我而言)这一事实与此无关。对我来说,他们住在这里是完全有道理的:

GET /fleets/123/cars/55/vin

同样,如果我将最后 2 个 api 建模为 2 个函数,我会称它们为:

findVinsForFleet(fleetId: number);
findVinForCar(fleetId: number, carId: number);

推荐阅读