文档: https://fastapi.tiangolo.com
源码: https://github.com/tiangolo/fastapi
一、FastAPI简介
FastAPI是高性能的web框架。他的主要特点是:
- 快速编码
- 减少人为bug
- 直观
- 简易
- 具有交互式文档
- 基于API的开放标准(并与之完全兼容):OpenAPI(以前称为Swagger)和JSON Schema。
FastAPI 站在巨人的肩膀上的框架,这个巨人就是指 Flask 框架。
FastAPI 从语法上和 Flask 非常的相似,有异曲同工之妙。
二、FastAPI 特性
1.基于开放标准
用于创建 API 的 OpenAPI 包含了路径操作,请求参数,请求体,安全性等的声明。
使用 JSON Schema (因为 OpenAPI 本身就是基于 JSON Schema 的)自动生成数据模型文档。
经过了缜密的研究后围绕这些标准而设计。并非狗尾续貂。
这也允许了在很多语言中自动生成客户端代码。
2.自动生成文档
交互式 API 文档以及具探索性 web 界面。因为该框架是基于 OpenAPI,所以有很多可选项,FastAPI 默认自带两个交互式 API 文档。一个是docs,一个是redoc
--Swagger UI,可交互式操作,用于测试,能在浏览器中直接调用和测试你的 API 。
--API 文档:ReDoc
三、编辑器支持
整个框架都被设计得易于使用且直观,所有的决定都在开发之前就在多个编辑器上进行了测试,来确保最佳的开发体验。
在最近的 Python 开发者调查中,我们能看到 被使用最多的功能是"自动补全"。
整个 FastAPI 框架就是基于这一点的。任何地方都可以进行自动补全。
在这里,你的编辑器可能会这样帮助你
四、类型验证与身份校验
校验大部分(甚至所有?)的 Python 数据类型,包括:
JSON 对象 (dict).
JSON 数组 (list) 定义成员类型。
字符串 (str) 字段, 定义最小或最大长度。
数字 (int, float) 有最大值和最小值, 等等。
校验外来类型, 比如:
URL.
Email.
UUID.
...及其他.
所有的校验都由完善且强大的 Pydantic 处理。
安全性及身份验证
集成了安全性和身份认证。杜绝数据库或者数据模型的渗透风险。
OpenAPI 中定义的安全模式,包括:
HTTP 基本认证。
OAuth2 (也使用 JWT tokens)。在 OAuth2 with JWT查看教程。
API 密钥,在:
请求头。
查询参数。
Cookies, 等等。
加上来自 Starlette(包括 session cookie)的所有安全特性。
所有的这些都是可复用的工具和组件,可以轻松与你的系统,数据仓库,关系型以及 NoSQL 数据库等等集成。
五、Starlette 特性
FastAPI 和 Starlette 完全兼容(并基于)。所以,你有的其他的 Starlette 代码也能正常工作。FastAPI 实际上是 Starlette的一个子类。所以,如果你已经知道或者使用 Starlette,大部分的功能会以相同的方式工作。
通过 FastAPI 你可以获得所有 Starlette 的特性 ( FastAPI 就像加强版的 Starlette ):
令人惊叹的性能。它是 Python 可用的最快的框架之一,和NodeJS 及Go 相当。
支持 WebSocket 。
支持 GraphQL 。
后台任务处理。
Startup 和 shutdown 事件。
测试客户端基于 requests。
CORS, GZip, 静态文件, 流响应。
支持 Session 和 Cookie 。
100% 测试覆盖率。
代码库 100% 类型注释。
六、Pydantic 特性
FastAPI 和 Pydantic 完全兼容(并基于)。所以,你有的其他的 Pydantic 代码也能正常工作。
兼容包括基于 Pydantic 的外部库, 例如用与数据库的 ORMs, ODMs。
这也意味着在很多情况下,你可以将从请求中获得的相同对象直接传到数据库,因为所有的验证都是自动的。
反之亦然,在很多情况下,你也可以将从数据库中获取的对象直接传到客户端。
通过 FastAPI 你可以获得所有 Pydantic (FastAPI 基于 Pydantic 做了所有的数据处理):
更简单:
没有新的模式定义 micro-language 需要学习。
如果你知道 Python types,你就知道如何使用 Pydantic。
和你 IDE/linter/brain 适配:
因为 pydantic 数据结构仅仅是你定义的类的实例;自动补全,linting,mypy 以及你的直觉应该可以和你验证的数据一起正常工作。
更快:
在 基准测试 中,Pydantic 比其他被测试的库都要快。
验证复杂结构:
使用分层的 Pydantic 模型, Python typing的 List 和 Dict 等等。
验证器使我们能够简单清楚的将复杂的数据模式定义、检查并记录为 JSON Schema。
你可以拥有深度嵌套的 JSON 对象并对它们进行验证和注释。
可扩展:
Pydantic 允许定义自定义数据类型或者你可以用验证器装饰器对被装饰的模型上的方法扩展验证。
100% 测试覆盖率。
七、FastAPI安装
安装 FastAPI。首先搭建环境,我用的是VS code,需要下载配置插件code runnner和python
在终端安装FastAPI
pip install fastapi[all]
安装还包括了 uvicorn,你可以将其用作运行代码的服务器。这是一个一个ASGI服务器。
其中包括依赖项Pydantic和Starlette。
1. Pydantic提供:
ujson- 更快的JSON
email_validator- 电子邮件的验证
2. Starlette提供:
requests- 如果你想要使用TestClient, 需要导入requests.
aiofiles- 如果你想使用FileResponseorStaticFiles, 需要导入aiofiles.
jinja2- 如果你想使用默认的模板配置,需要导入jinjia2.
python-multipart-如果要使用request.form()支持表单“解析”,则为必需。
itsdangerous-“SessionMiddleware”支持需要。
pyyaml- 如果需要SchemaGenerator支持, 则为必要.
graphene-如果需要GraphQLApp支持, 则为必要.
ujson- 如果你想使用UJSONResponse, 则为必要.
八、启动HelloWorld
```python
# -*- coding: UTF-8 -*-
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def main():
return {"message": "Hello,FastAPI"}
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
```
右键点击Run Code,或者Ctrl+Alt+N启动服务。
打开浏览器的本地服务就会看到
FastAPI安装完成