交互协定 status_code.py
理论背景
实际开发中数字来表示不同的状态,状态较少时直接配置常量定义即可,如
# 使用时直接使用变量名,含义更清晰
PREPARE = 0
GET_TASK = 1
DO_TASK = 2
CLEAN_UP = 3HTTP协议客户端与服务端交互的协议,双方定义的状态码较多,需采用一种更加灵活的方式
源码分析
# 定义原始数据结构
_codes = {
200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'),
301: ('moved_permanently', 'moved', '\\o-'),
302: ('found',),
404: ('not_found', '-o-'),
500: ('internal_server_error', 'server_error', '/o\\', '✗'),
}
# codes全局变量,LookupDick对象,codes.okay或codes['okay'] 都行
codes = LookupDict(name='status_codes')
# 因requests/__init__.py中from .status_codes import codes,所以会执行该模块代码
def _init():
for code, titles in _codes.items():
for title in titles:
setattr(codes, title, code)
if not title.startswith(('\\', '/')):
setattr(codes, title.upper(), code)
# 导入时已触发执行: 全局变量codes经过setattr把所有短语和状态码进行绑定
_init()全局项目可以使用codes.name来表示相应状态码
_codes作为原始数据源,自动加载设置成codes
项目实践
1. API通用返回格式
前后端分离开发离不开双发返回状态码的格式定义,随着业务的不断增长,状态码定义需可配置
如何实现可配置扩展的状态码映射结构体
定义一个结构体存储 错误码: (错误代码名称,默认错误信息)
生成的对象支持 store.E_SUCC
根据项目需要,可以自定义status_code.json文件,或者单独项目以供多个项目使用
2. 函数之间标识符
3. 多人之间协议
Last updated