路由最简单,首先是根据版本,例如 v1
、v2
这样的。目录结构也可以以 Http/api/v1
、Http/api/v2
作为 api 的目录,路由文件中写好 namespace 就好。其次就是分组,例如:
// 简单的示例,需要的话自己写namespace等信息
Route::prefix('v1')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v1 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v1 版本的订单相关路由
});
});
Route::prefix('v2')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v2 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v2 版本的订单相关路由
});
});
至于 service
和控制器层
,也有两种分法:
1、控制器负责数据校验,调用不同的 service
组合成结果。例如先用到 userService
,获取到用户的 id
等信息,然后再用 id
调用 orderService
查订单信息。
2、控制器负责数据校验,调用复合 service
,例如还是获取用户订单,直接调用复合的 userOrderService
,userOrderService
调用了 userRepository
、orderRepository
和其他数据仓库,最后组合成一个获取用户订单的服务。
3、如果再细分一下,还可以引入 interface
,数据仓库
或者 service
实现 interface
,也就是说这个 interface
规定了当前的类(数据仓库或者 service,不同的写法)注入的参数、返回值的类型。
总结:一般来说,分层的话,controller
→service
→repository
→model
,就已经够用了,不需要 interface
。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。
路由最简单,首先是根据版本,例如 v1
、v2
这样的。目录结构也可以以 Http/api/v1
、Http/api/v2
作为 api 的目录,路由文件中写好 namespace 就好。其次就是分组,例如:
// 简单的示例,需要的话自己写namespace等信息
Route::prefix('v1')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v1 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v1 版本的订单相关路由
});
});
Route::prefix('v2')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v2 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v2 版本的订单相关路由
});
});
至于 service
和控制器层
,也有两种分法:
1、控制器负责数据校验,调用不同的 service
组合成结果。例如先用到 userService
,获取到用户的 id
等信息,然后再用 id
调用 orderService
查订单信息。
2、控制器负责数据校验,调用复合 service
,例如还是获取用户订单,直接调用复合的 userOrderService
,userOrderService
调用了 userRepository
、orderRepository
和其他数据仓库,最后组合成一个获取用户订单的服务。
3、如果再细分一下,还可以引入 interface
,数据仓库
或者 service
实现 interface
,也就是说这个 interface
规定了当前的类(数据仓库或者 service,不同的写法)注入的参数、返回值的类型。
总结:一般来说,分层的话,controller
→service
→repository
→model
,就已经够用了,不需要 interface
。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。
路由最简单,首先是根据版本,例如 v1
、v2
这样的。目录结构也可以以 Http/api/v1
、Http/api/v2
作为 api 的目录,路由文件中写好 namespace 就好。其次就是分组,例如:
// 简单的示例,需要的话自己写namespace等信息
Route::prefix('v1')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v1 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v1 版本的订单相关路由
});
});
Route::prefix('v2')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v2 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v2 版本的订单相关路由
});
});
至于 service
和控制器层
,也有两种分法:
1、控制器负责数据校验,调用不同的 service
组合成结果。例如先用到 userService
,获取到用户的 id
等信息,然后再用 id
调用 orderService
查订单信息。
2、控制器负责数据校验,调用复合 service
,例如还是获取用户订单,直接调用复合的 userOrderService
,userOrderService
调用了 userRepository
、orderRepository
和其他数据仓库,最后组合成一个获取用户订单的服务。
3、如果再细分一下,还可以引入 interface
,数据仓库
或者 service
实现 interface
,也就是说这个 interface
规定了当前的类(数据仓库或者 service,不同的写法)注入的参数、返回值的类型。
总结:一般来说,分层的话,controller
→service
→repository
→model
,就已经够用了,不需要 interface
。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。
版本控制不在路由里做? 比如下面这样 $version = request ()->header ('ver'); Route::namespace ('api'')->prefix ($version)
推荐文章: