大佬们都如何管理你们的多版本接口的

请教:接口有版本号后,控制器层、service层、路由层代码都是按什么策略来迭代的?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

路由最简单,首先是根据版本,例如v1v2这样的。目录结构也可以以Http/api/v1Http/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,例如还是获取用户订单,直接调用复合的userOrderServiceuserOrderService调用了userRepositoryorderRepository和其他数据仓库,最后组合成一个获取用户订单的服务。

3、如果再细分一下,还可以引入interface数据仓库或者service实现interface,也就是说这个interface规定了当前的类(数据仓库或者service,不同的写法)注入的参数、返回值的类型。

总结:一般来说,分层的话,controllerservicerepositorymodel,就已经够用了,不需要interface。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。

2个月前 评论
不负岁月 (楼主) 2个月前
她来听我的演唱会 (作者) 2个月前
不负岁月 (楼主) 2个月前
aliongkk 2个月前
她来听我的演唱会 (作者) 2个月前
WhiteDragon 2个月前
她来听我的演唱会 (作者) 2个月前
WhiteDragon 2个月前
讨论数量: 16

路由最简单,首先是根据版本,例如v1v2这样的。目录结构也可以以Http/api/v1Http/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,例如还是获取用户订单,直接调用复合的userOrderServiceuserOrderService调用了userRepositoryorderRepository和其他数据仓库,最后组合成一个获取用户订单的服务。

3、如果再细分一下,还可以引入interface数据仓库或者service实现interface,也就是说这个interface规定了当前的类(数据仓库或者service,不同的写法)注入的参数、返回值的类型。

总结:一般来说,分层的话,controllerservicerepositorymodel,就已经够用了,不需要interface。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。

2个月前 评论
不负岁月 (楼主) 2个月前
她来听我的演唱会 (作者) 2个月前
不负岁月 (楼主) 2个月前
aliongkk 2个月前
她来听我的演唱会 (作者) 2个月前
WhiteDragon 2个月前
她来听我的演唱会 (作者) 2个月前
WhiteDragon 2个月前

路由最简单,首先是根据版本,例如v1v2这样的。目录结构也可以以Http/api/v1Http/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,例如还是获取用户订单,直接调用复合的userOrderServiceuserOrderService调用了userRepositoryorderRepository和其他数据仓库,最后组合成一个获取用户订单的服务。

3、如果再细分一下,还可以引入interface数据仓库或者service实现interface,也就是说这个interface规定了当前的类(数据仓库或者service,不同的写法)注入的参数、返回值的类型。

总结:一般来说,分层的话,controllerservicerepositorymodel,就已经够用了,不需要interface。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。

2个月前 评论
不负岁月 (楼主) 2个月前
她来听我的演唱会 (作者) 2个月前
不负岁月 (楼主) 2个月前
aliongkk 2个月前
她来听我的演唱会 (作者) 2个月前
WhiteDragon 2个月前
她来听我的演唱会 (作者) 2个月前
WhiteDragon 2个月前

我是把版本放到 header 上面去的默认或者不传就进入默认的版本,然后就转向指定的控制器

file

2个月前 评论
lovewei 2个月前
aliongkk 2个月前
hackchen (作者) 2个月前

版本控制不在路由里做?

2个月前 评论

版本控制不在路由里做? 比如下面这样 $version = request()->header('ver'); Route::namespace('api'')->prefix($version)

2个月前 评论

表面上来看,外部访问服务的url形式发生了变化,但其实质的服务功能并没有发生变更,例如:createOrder, getProduct, userLogin,所以无需管理版本,如果要管理版本直接用git就行了

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!