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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

路由最简单,首先是根据版本,例如 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。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。

1年前 评论
不负岁月 (楼主) 1年前
她来听我的演唱会 (作者) 1年前
不负岁月 (楼主) 1年前
aliongkk 1年前
她来听我的演唱会 (作者) 1年前
WhiteDragon 1年前
她来听我的演唱会 (作者) 1年前
WhiteDragon 1年前
讨论数量: 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。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。

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

路由最简单,首先是根据版本,例如 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。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。

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

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

file

1年前 评论
lovewei 1年前
aliongkk 1年前
hackchen (作者) 1年前

版本控制不在路由里做?

1年前 评论

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

1年前 评论

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

1年前 评论