美文网首页
[easy-flask]快速创建Restful风格的Flask后

[easy-flask]快速创建Restful风格的Flask后

作者: 我叫GTD | 来源:发表于2022-09-29 19:55 被阅读0次

    easy-flask

    通过命令行快速创建flask应用~
    项目地址:https://github.com/GuoTengda1993/easy-flask

    开始

    安装

    pip3 install easy-flask-restful
    

    在当前文件夹创建flask应用:

    easy-flask -n demo_server
    # or
    easy-flask --new=demo_server
    
    # start server in debug mode
    cd demo_server
    python3 app.py
    # or
    sh control.sh start|restart|stop
    

    工具介绍

    通过这个工具可以很轻松的创建一个flask应用。
    接口文件都在api文件夹下,在api目录下创建的接口class都会自动注册上。
    此外,也无需关心返回结构,框架会自动封装json返回体。

    项目结构

    .
    ├── api
    │   ├── __init__.py
    │   └── demo
    │       ├── __init__.py
    │       └── demo_api.py
    ├── conf
    │   ├── __init__.py
    │   ├── config.ini
    ├── internal
    │   ├── __init__.py
    │   ├── error.py
    │   └── utils.py
    ├── app.py
    ├── start.py
    ├── control.sh
    └── logs
        └── app.log
    
    

    api - 在该文件夹下写接口文件.
    internal.error - 定义错误返回.
    app.py - 通过该文件启动app
    conf - 应用配置文件目录
    control.sh - 通过gunicorn启动服务的脚本

    写一个Api文件

    举个栗子:

    from flask import g
    
    from internal import Resource
    from utils.parser import Type, Required, Default, Min, Max
    
    
    class DemoApi(Resource):
    
        uri = ['/api/demo']
    
        def get(self):
            pattern = {
                'num': {Type: int, Min: 10, Max: 100},
                'print': {Type: str, Required: True},
                'default': {Type: str, Default: 'demo'}
            }
    
            data, err = self.parse_request_data(pattern=pattern)
            if err:
                g.logger.warning(err)
                return err
            g.logger.info('success')
            return {'result': data}
    

    uri - 接口
    g.logger 每次请求都会初始化logger,保障每个请求都有个独一无二的log_id
    self.parse_request_data 用于解析参数,当参数解析失败或参数错误时会返回ParamsError(Internal/error.py)

    正常返回示例:

    {
        "errno": 0,
        "data": {
            "result": {
                "num": 100,
                "print": "aaaa",
                "default": "demo"
            }
        },
        "msg": "success",
        "log_id": "f40c889d1b5744c7a87a9045aea8595c"
    }
    

    错误返回示例:
    根据error.py文件返回 errnomsg

    {
        "errno": 2,
        "msg": "params error:num check max invalid",
        "log_id": "7c53531b93a4406e9d3050bae5b99968"
    }
    

    开发建议

    实际项目中肯定会有更复杂的逻辑以及数据层的交互。
    通过这个工具,只是很方便的创建了一个服务框架,coding过程中保持良好的目录结构会使你的开发事半功倍:

    • logic 专门的逻辑层 (或者以其他单次命名) 写复杂的逻辑交互,在api文件中保持简单;
    • 如果你需要db操作,建议使用 flask-sqlalchemy,同样创建一个DB层目录;
    • client 如果有下游HTTP服务交互,建议创建个client目录,并且封装个 BaseClient class,在BaseClient中写好通用逻辑(如错误重试,公共参数封装等),避免重复冗余的代码;

    相关文章

      网友评论

          本文标题:[easy-flask]快速创建Restful风格的Flask后

          本文链接:https://www.haomeiwen.com/subject/romkartx.html