FastAPI基于以下
使用 Uvicorn 服务器 ASGI规范 (ASGI是异步服务器网关接口 是WSGI的精神继承者,在具有异步功能的Python Web服务器,框架和应用程序之间提供标准接口。)
Starlette :是一种轻量级的ASGI框架/工具包,是构建高性能异步服务的理想选择( https://www.starlette.io/ )。
Pydantic :用于验证数据( https://pydantic-docs.helpmanual.io/ )。
uvicorn: 主要用于加载和提供应用程序的服务器( http://www.uvicorn.org/ )。
1、通过以下命令,安装所有安装包:
2、安装成功后,显示:
3、查看已经安装好的库:
你将会看到自动生成的API交互文档。
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了 FastAPI 这么一款集成了 Swagger UI 的更新的 Python Web 框架。起初想要在标题中表达的意思大概是 Flask + Swagger = FastAPI, 后来发现 FastAPI 的闪亮点不仅如此,顺便找了些 Flask 与 FastAPI 对比的文章来,在文后附有链接。
本文不对 Flask 与 FastAPI 的各个方面对进行对比,本人兴趣依然还在 FastAPI 的 Swagger UI 功能,以及与 Flask 的 Blueprint 类似的特性。如果要拿 Flask 与 FastAPI 比较的话,应该用 Flask 2.x, 因为它开始支持类似 @app.get 的装饰器,并引入了 async 路由函数。
Flask 是在 2010 年发布的,它构建于 WSGI(Python Web Server Gateway Interface) 之上的,产品环境中运行需与 uWSGI, Gunicorn 搭配,或用 mod_wsgi 模块与 Apache 集成。因发布较早,所以目前应该有较多的使用者。Flask 2.0 需要 Python 3.6+ 的支持,如果支持 async, 需 Python 3.7+
FastAPI 发布于 2018 年,构建于 ASGI(Asynchronous Server Gateway Interface) 之上,在 IO 密集型的应用中有更优越的性能。生成环境中配合 ASGI 服务器,如 Uvicorn 或 Hypercorn . FastAPI 最为亮丽的特性是集成了 Swagger UI -- 外加一个福利 ReDoc 。FastAPI 需 Python 3.6+ 版本。
毕竟是在开始学一个新的框架,还是从它的基本用法开始,途中会穿插与 Flask 的对比。
安装:
当前安装的 fastapi 版本为 0.70.1, uvicorn 版本为 0.16.0。开始第一个例子,摘自官方
创建一个 main.py文件,内容为
注:以上两个函数前面可以加上 async关键字
启动服务,用命令
注: uvicorn --help列出详细帮助,如启动多少个 worker, 绑定网络接口和端口号, 配置 SSL 证书等。
访问服务
另一个服务就是 http://localhost:8000/items/100?q=somequery
与 Flask 的对比
回顾一个 Flask 启动服务的方式有
如果程序文件名为 app.py或wsgi.py的话,可以省略FLASK_APP环境变量,直接执行flask run就行。另一种方式就是在代码中加上 main 入口
然后像普通 Python 代码一样执行
对于 FastAPI, 如果总是要用 uvicorn来启动服务的话,在 IDE 中调用就变得不那么便利。由于uvicorn本身就是 Python 实现,当然也就可以把命令过程写到 Python 代码中
注:uvicorn.run() 可接受更多的参数,相当于 uvicorn --help可接受的。
同样把 main.py 当作普通 Python 程序来启动即可
前面讲过,FastAPI 进入我的视野最首要的一个原因就是它集成了 Swagger UI, 在启动了 FastAPI 服务后,只要访问 http://localhost:8000/docs, 熟悉的 Swagger UI 即刻映入眼帘
同时注意到函数映射为 API 的名称,由于参数是带有类型提示的,所以在 SwaggerUI 中也能看到相应的类型。其他定制 Swagger UI 的工作需要时可细细研究。
FastAPI 除了 SwaggerUI 外,还同时给了我们另一个选择,那就是 redoc, 访问 http://localhost:8000/redoc, 看到下面的界面
我也是头一回从 FastAPI 这里了解到还有一个 Redoc 的 Web API 文档工具,它和 SwaggerUI 类似,都是支持 Open API。
使用 FastAPI 时,在 API 文档中产生请求/响应的 Model 类型也很简单,下面的例子同时包含自定义的输入输出类型
下面是 main.py 的全新内容
再查看 http://localhost:8000/docs 文档,看到 PUT /items/{item_id} 的界面如下
我们能看到请求与响应中的 Example Value 和 Schema 定义
梳理完 FastAPI 的自动 API 文档功能,进入下一个话题
FastAPI 类似于 Flask 的 Blueprints 功能没有一个特定的名称,只笼统的给出解决方案 Bigger Applications - Multiple Files . 我们来看一下它是怎么实现的。这里简化官方的例子,排除了 dependencies 的应用,要用到的目录结构为
每个目录中都可以放一个 __init__.py文件,标识为包,接着是每个文件的内容
app/internal/admin.py
app/routers/items.py
app/routers/users.py
在每个单独定义路由的文件里用到的是 APIRouter, 它相当是一个迷你的FastAPI, 也类似于 Flask 的Blueprint. 上面分别演示了两种 APIRouter 的声明方式,声明时带不带 prefix 和 tags。同时在为函数定义路由时也可指定 tags,在后面我们将会注意到 tags 只是为 API 文档分类用的。
app/main.py
这里实际上使用了三种定义路径前缀与 tags(API 分类) 的方式
现在运行
查看 SwaggerUI http://localhost:8000/docs
到目前为止我重点关注 FastAPI 的就是以上那两个特性:自动 API 文档与大程序多文件(Blueprint) 功能。其他的特性可查阅 FastAPI 的 Features 。比如:
原文https://yanbin.blog/fastapi-new-python-web-framework-vs-flask/
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)