APIFlask:一个基于 Flask 的 Web API 框架
Posted 不羁的学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APIFlask:一个基于 Flask 的 Web API 框架相关的知识,希望对你有一定的参考价值。
经常看到有人把 FastAPI 和 Flask 放到一起比较,但是却没有意识到这完全是两种东西——前者是基于 Web 框架 Starlette 添加了 Web API 功能支持的(框架之上的)框架,而后者是和 Starlette 同类的通用 Web 框架。你怎么能让小明和骑电动车的小军赛跑然后还夸小军好快好强?为了让框架 PK 爱好者们有一个更公平的比较对象,从一份 APIFairy 0.6.2 版本的 fork 开始,我实现了一个基于 Flask 的 Web API 框架——APIFlask:
主页: https://apiflask.com
GitHub: https://github.com/greyli/apiflask
Twitter: https://twitter.com/apiflask
APIFlask 在 Flask 的基础上添加了更多 Web API 相关的功能支持,核心特性包括:
更多方便的装饰器,比如 @input()、@output()、@app.get()、@app.post() 等等
自动反序列化和验证请求数据,当请求数据不符合模式类要求时,会自动生成包含错误详细信息的错误响应(基于 Webargs)
自动格式化和序列化响应数据,在定义好响应模式后,你可以直接在视图函数返回一个模型类对象,或是返回字典(基于 Marshmallow)
自动生成 OpenAPI Specification 文件,你可以把这个文件导入到 API 调试工具或是用来生成客户端代码(基于 APISpec)
自动生成交互式 API 文档,并自动为蓝本和视图设置对应的标签分类(基于 Swagger UI and Redoc)
自动为 HTTP 错误生成 JSON 格式的错误响应
下面是一个最基础的示例程序:
from apiflask import APIFlask, Schema, input, output, abort_json
from apiflask.fields import Integer, String
from apiflask.validators import Length, OneOf
app = APIFlask(__name__) # 可以使用 title 和 version 参数来自定义 API 的名称和版本
pets = [
{
'id': 0,
'name': 'Kitty',
'category': 'cat'
},
{
'id': 1,
'name': 'Coco',
'category': 'dog'
}
]
# 定义一个请求数据模式类
class PetInSchema(Schema):
name = String(required=True, validate=Length(0, 10)) # 可以使用 description 参数添加字段描述
category = String(required=True, validate=OneOf(['dog', 'cat']))
# 定义一个响应数据模式类
class PetOutSchema(Schema):
id = Integer()
name = String()
category = String()
@app.get('/pets/<int:pet_id>')
@output(PetOutSchema) # 使用 @output 装饰器标记响应数据模式
def get_pet(pet_id):
if pet_id > len(pets) - 1:
abort_json(404)
return pets[pet_id]
@app.post('/pets/<int:pet_id>')
@input(PetInSchema) # 使用 @input 装饰器标记请求数据模式
@output(PetOutSchema)
def update_pet(pet_id, data): # 通过验证后的请求数据字典会注入到视图函数
if pet_id > len(pets) - 1:
abort_json(404)
data['id'] = pet_id
pets[pet_id] = data
return data
如果你想在你的电脑上运行这个示例,可以先用下面的命令安装 APIFlask(需要 Python 3.7 及以上版本,Flask 1.1 及以上版本):
Linux 和 macOS:
$ pip3 install apiflask以上是关于APIFlask:一个基于 Flask 的 Web API 框架的主要内容,如果未能解决你的问题,请参考以下文章