美文网首页
[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