Restful 风格的 Api 与 控制器、方法应该如何对应?

Laravel 的资源控制器在只有 1 个控制器时,很好理解,大概是这样的:

GET /photos 对应的是 PhotoControllerindex 方法,获取所有照片

GET /photos/{photo} 对应的是 PhotoControllershow 方法,获取单张照片


现在如果多出一个控制器 CategoryController

GET /categories 对应的是 CategoryControllerindex 方法,获取所有分类

GET /categories/{category} 对应的是 CategoryControllershow 方法,获取单个分类


我如果要获取分类 1 下的所有照片,按照 Restful Api 的设计:

路由是 /categories/1/photos

此时这个路由应该对应 CategoryControllergetPhotos 方法

还是对应 PhotoControllergetPhotos 方法?


如果对应 PhotoControllergetPhotos 方法,是不是可以设计成 photos?category=1 更合适?

这样的话,PhotoController 就不需要 getPhotos 方法了,直接就对应 index 方法,然后在index 方法里根据 category 参数进行筛选照片即可。

以上情况应该如何选择?

阅读 1.7k
1 个回答

其实这里要看你业务逻辑,RESTful 本身没有那么复杂,也不是万能灵药。只要方便理解,其实怎么做都可以。

具体到你的需求,不知道是不是一个照片应用?如果是的话,理论上 /categories/1 就应该返回所有 category=1 的照片。/categories/1/{xxxx} 应该返回分类的属性 xxxx

至于放在哪个 controller 里,我倾向于放在 PhotoController@index

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题