强业务逻辑抽象API接口

组件

  1. 接入类
  2. 映射类
  3. 动作类

接入类

主要做路由,限流,鉴权等接入放行性质的工作

class App:
    action_map = {}

    def dispatch(self, data):
        try:
            assert data["action"] in self.action_map, ErrorCode.sys_action_not_exist
            action = self.action_map[data["action"]]
            return {
                "code": 0,
                "msg": "",
                "data": action.run(data["params"])
            }
        except AssertionError as e:
            msg, code = e
            return {
                "code": code,
                "msg": msg,
                "data": None
            }
        except Exception:
            traceback.print_exc()
            msg, code = ErrorCode.sys_unknown
            return {
                "code": code,
                "msg": msg,
                "data": None
            }

映射类

名称到动作类的映射

action_map = {
    'register': RegisterAction
}

动作类

表达一个接口的实际业务逻辑操作,权限,数据schema都在这里进行配置

class RegisterAction(Action):
    schema = Schema({
        "verify_code": And(str, len),
        "phone": And(str, len),
        "password": And(str, len)
    })
    auth = False

    def run(self, data):
        assert check_verify_code(data["verify_code"]), MyErrorCode.verify_code_wrong
        assert User.get(data["phone"]), MyErrorCode.already_register
        return {"token": "token"}

业务逻辑

操作顺序

  1. 数据结构与格式验证,validate
  2. 数据正确性验证,如验证码,密码等,check
  3. 数据存在性验证,exist
  4. 数据业务状态验证,status
  5. 数据业务更改操作并提交至数据库,run
  6. 返回成功,return
    原文作者:Prasanta
    原文地址: https://segmentfault.com/a/1190000016380018
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞