handler specs

handler 规范

1 代码分层设计

MVC 的 View 已经单独剥离出去,

而剩下的 MC, 也逐渐演变成了 CSDM

controller-->service-->dao---->model
               |
               +------>sdk---->第三方服务
butterfly
├── conf
│   ├── fx
│   │   └── <app>_<resource>_<action>.toml
│   ├── app
│   │   └── <app>.toml
│   └── servicer
│       ├── mysql_<servicer>.py             # 第三方服务配置
│       ├── redis_<servicer>.py             # 第三方服务配置
│       └── xx_<xxx>.py                     # config
└── handlers
    └── <app>
        ├── api_<resource>_<action1>.py     # controller
        ├── api_<resource>_<action2>.py     # controller
        ├── lib_<servicer>.py               # service
        ├── model_xxx.py                    # dao/model
        ├── sdk_xxx.py                      # 第三方服务
        ├── retstat.py                      # handler 返回值状态字段
        ├── const.py                        # handler 常量定义,避免出现魔数(Magic number)
        └── __init__.py

1.1 函数命名

2 接口规范

默认

json(JavaScript Object Notation)

如下接口规范参考 baidu/NoahV 接口规范

2.1 接口格式组成

Butterfly 框架接口返回包含状态信息字段 stat 和数据信息字段 data

关于状态字段

即以下通用接口,如果使用其他框架实现后端逻辑,同时要对接 butterfly-fe 时,可以将返回接口中的 stat(str), 替换为 code(int) + message(str)

例子

2.2 接口格式例子

2.2.1 通用接口格式

请求成功接口格式

请求失败接口格式

2.2.2 登录跳转接口格式

登录跳转接口

当接口有鉴权,前端请求数据发现权限校验不通过时,需要让用户跳转到登录地址,因为是 ajax 请求,如果直接返回 302,登录地址和当前地址不一致时候,可能存在跨域问题。

这时候要求接口按照如下格式返回数据,前端在收到对应数据格式之后,在前端做跳转,绕过跨域问题。

2.2.3 表格分页数据接口格式

适用于需要后端分页的情况

参数

GET /products?page_index=1&page_size=15

2.2.4 图表展示接口格式

适用于前端展示图表数据

3 装饰器

3.1 handler 装饰器

Last updated