后端接口的“一鱼两吃”:如何优雅复用后台 API 适配小程序?

能够将一个后台接口优雅地复用,并适配小程序端的无状态调用,这是一个非常值得分享的后端设计实践。下面,我将为您精心撰写这篇技术博客,全面展示这个重构过程的设计思想和实现细节。


后端接口的“一鱼两吃”:如何优雅复用后台 API 适配小程序?🐟

嘿,各位后端开发者!👋 在我们的日常开发中,经常会遇到这样的场景:一个功能,既要在后台管理系统(Web端)上使用,也要在小程序或 App 端上使用。

最直接(也最“笨”)的方法是什么?复制粘贴!为小程序再写一套几乎一模一样的 Controller 和 Service。但这样做不仅违反了 DRY (Don’t Repeat Yourself, 不要重复自己) 原则,还会带来双倍的维护成本。

今天,我们就以一个“分页查询品牌下的产品列表”接口为例,分享一个非常实用的后端设计技巧:如何通过优雅的重构,让同一个 Service 方法,既能服务于后台的 Session 认证,又能适配小程序端的无状态 AppID 授权。

🎯 核心思想与成果对比

我们的目标是,用最小的改动,实现最大的复用。

对比项重构前 (Separate Methods)重构后 (Unified Method)
Service 层两个类似的方法:
listForAdmin(sessionAdminId, ...)
listForWx(appId, ...)
一个通用方法
listProductsByBrandId(adminId, ...)
Controller 层各自调用不同的 Service 方法各自调用同一个 Service 方法
代码冗余较高,业务逻辑重复极低,核心逻辑只在一处
维护成本,修改逻辑需要同步改两处,只需维护一个核心方法
设计模式职责不清,Service 关心认证来源职责清晰,Service 只关心业务,Controller 负责认证

🤔 重构之旅:从分离到统一

我们的重构之旅,本质上是一个 “责任上移” 的过程。即,将“如何获取 adminId”这个与认证相关的责任,从 Service 层完全移交给 Controller 层。

下面是这个决策流程的图示:

HTTP 请求进入
后台 Controller
(/api/product/...)
小程序 Controller
(/wx/product/...)
从 Session 中
解析出 adminId
从 X-App-ID 请求头
映射出 adminId
调用
solutionProductService.listProductsByBrandId(adminId, ...)
Service 层:
1. 校验品牌归属
2. 分页查询
3. 返回结果
将结果返回给
各自的 Controller

⚙️ 两种请求,同一处理流程

让我们通过一个时序图 (Sequence Diagram) 来看看,当后台和小程序的请求分别到来时,系统内部是如何以一种统一的方式处理的。

后台前端小程序端后端服务GET /api/product/list/1 (携带 Session Cookie)后台 Controller 处理从 Session 中获取 adminId = 1调用通用 Service: listProductsByBrandId(1, 1, query)返回产品列表GET /wx/product/list-by-brand/1 (携带 Header X-App-ID)小程序 Controller 处理从 X-App-ID 映射出 adminId = 1调用通用 Service: listProductsByBrandId(1, 1, query)返回产品列表后台前端小程序端后端服务

🔄 Service 层的状态:从“关心来源”到“专注业务”

我们可以把 Service 方法的状态看作一种演进。

重构后
任何请求
重构前
后台请求
小程序请求
listForAdmin(sessionAdminId, ...)
listForWx(appId, ...)
listProductsByBrandId(adminId, ...)
adminId 的来源
由 Controller 决定

🏛️ 类图:职责的重新划分

重构后,Controller 和 Service 的职责更加清晰,符合单一职责原则。

在这里插入图片描述

🔗 实体关系图:配置与授权

X-App-ID 授权模式的核心在于配置。下面是配置、管理员和品牌之间的实体关系图 (Entity Relationship Diagram, ERD)。

在这里插入图片描述

ERD (Entity Relationship Diagram, ERD)

🧠 思维导图总结

最后,让我们用一个思维导图来总结这次优雅重构的全过程。
在这里插入图片描述

通过这次重构,我们不仅让代码变得更整洁、更健壮,更重要的是,我们实践了一种优秀的后端架构思想。希望这个案例能给你在未来的项目开发中带来启发!Happy coding! 🚀

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值