Flask RESTful接口开发如何避免端点代码重复?
Flask RESTful重复接口代码优化方案
核心思路
两个接口的执行流程完全一致,仅存在两处差异化逻辑:全量查询时提取的用户字段不同、单用户查询成功的返回消息模板不同。最优方案是将固定流程封装为公共父类,仅把可变点抽成可配置的参数/方法,子类只需要声明差异化配置即可。
具体实现
第一步:封装公共父类
把重复的流程逻辑全部收敛到父类中,预留可变参数的配置位:
from flask_restful import Resource, request # 公共父类,所有同逻辑接口都继承该类 class BaseUserResource(Resource): # 子类需要重写的可变参数 extract_field = None # 全量查询时需要提取的用户字段名 success_msg_tpl = None # 单用户存在时的返回消息模板 def get(self): res_body = request.json name = res_body.get('name', None) if name is None: # 全量查询逻辑 users = get_all_users() item_list = [user[self.extract_field] for user in users] return {"nameList": item_list} else: # 单用户查询逻辑 user = get_user_data(user_info=name) if user: return {"Message": self.success_msg_tpl.format(user[self.extract_field])} else: return {"Error": "User does not exist"}
第二步:改写接口类
两个接口仅需要继承公共父类,声明自己的差异化参数即可:
# 接口1:查询用户名 class ClassOne(BaseUserResource): extract_field = "name" success_msg_tpl = "User {} exists!"
# 接口2:查询用户出生日期 class ClassTwo(BaseUserResource): extract_field = "dob" success_msg_tpl = "User dob is {}"
扩展说明
如果后续差异化逻辑变得更复杂(比如字段需要二次计算、返回结构不同),可以把可变逻辑抽为抽象方法,子类重写方法即可,不需要修改父类的通用流程。
优化收益
- 完全消除重复代码,后续通用逻辑迭代(比如加参数校验、权限校验、异常捕获)只需要修改父类,所有子类自动生效
- 新增同逻辑接口仅需要配置两个参数,开发效率大幅提升
- 通用逻辑和业务逻辑完全分离,代码可维护性更强
内容的提问来源于stack exchange,提问作者Sravan JS
相关产品推荐
相关产品推荐

