強業務邏輯抽象API介面

Prasanta發表於2019-02-16

元件

  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

相關文章