快速编码,功能完善。从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因。
FastAPI 介绍
FastAPI 与其它 Python-Web 框架的区别
在 FastAPI 之前,Python 的 Web 框架使用的是 django、flask、tornado 三种 Web 框架。
django 自带 admin,可快速构建,但是比较笨重。如果是 mvc 形式的开发,很多已经封装好了,的确蛮合适。但如果是 restful 风格设计,则 django 就显得有一些笨重了。
flask 快速构建,自由度高。因为它十分轻盈,插件即插即用,很适合用来做 restful 风格的设计
tornado Python Web 框架和异步网络库,它执行非阻塞 I/O , 没有对 REST API 的内置支持,但是用户可以手动实现。
FastAPI 快速构建,异步 IO,自带 Swagger 作为 API 文档,不用后续去内嵌 Swagger-Ui
我个人认为 FastAPI 是一个专门为 restful 风格设计,全面服务于 API 形式的 Web 后端框架。
FastAPI 官方定位
在 FastAPI 官方文档中,可以看到官方对 FastAPI 的定位:
快速:非常高的性能,向 NodeJS 和 go 看齐(感谢 Starlette 和 Pydantic)
快速编码:将功能开发速度提高约 200% 至 300%。
错误更少:减少约 40% 的人为错误(开发人员)。* (FastAPI 内置很多 Python 高版本的语法,比如类型注释,typing 库等等,因此被要求的 Python 版本为 3.6+)
简易:旨在易于使用和学习。减少阅读文档的时间。
功能完善: 自带 Swagger 作为 API 文档
Framework Benchmarks
上图可以看出,在高并发下 4 个框架的排名情况。单纯从性能出发,Web 框架是排在第一的。在选用框架的时候,性能是一方面,我们还要看业务上的需求和使用场景,最适合的才是最好的。
下面简单介绍一下 FastAPI 的一些用法和特性.
启动FastAPI
1 # pip install fastapi
2 # pip install uvicorn
3 from fastapi import FastAPI
4 app = FastAPI()
5 @app.get("/")
6 def read_root():
7 return {"Hello": "World"}
8 @app.get("/items/{item_id}")
0 def read_item(item_id: int, q: str = None):
10 return {"item_id": item_id, "q": q}
11 # uvicorn main:app # 启动
12 # uvicorn main:app --reload # 支持热更新
13 # uvicorn main:app --host 0.0.0.0 --port 8889 --reload # 自定义IP+端口
14
FastAPI 支持异步请求
1 from fastapi import FastAPI
2 app = FastAPI()
3 @app.get("/")
4 async def read_root():
5 return {"Hello": "World"}
6
7 @app.get("/items/{item_id}")
8 async def read_item(item_id: int, q: str = None):
9 return {"item_id": item_id, "q": q}
10