1. 什么是FastAPI
FastAPI是一个现代的,快速(高性能)python web框架。基于标准的python类型提示,使用python3.6+构建API的Web框架。
2. FastAPI有哪些特点
- 快速:非常高的性能,能够与NodeJS和Go媲美(感谢Starlette和Pydantic)。可用的最快的 Python 框架之一 - Starlette 是一个轻量级 ASGI 框架/工具包。它非常适合用来构建高性能的 asyncio 服务,并支持 HTTP 和 WebSockets。官方网址:https://www.starlette.io/
- Pydantic 是一个使用Python类型提示来进行数据验证和设置管理的库。Pydantic定义数据应该如何使用纯Python规范用并进行验证。官方网址:https://pydantic-docs.helpmanual.io/ - 快速开发:将开发功能的速度提高约 200% 到 300%。
- 代码补全,只能提示(编辑器支持)
- 类型检查 - 更少的错误:减少大约40% 的人为(开发人员)引起的错误
- 类型转换
- 失败类型自动生成清晰的错误信息
- 对多层嵌套的 JSON 对象依然执行校验
- 输入数据转换,将来自于请求的输入数据转换为Python数据类型
- JSON
- 路径参数
- 查询参数
- Cookies
- 请求头
- 表单
- 文件
- 将python代码返回的类I型那个转换成接口的json类型
- 转换 Python 基础类型 (str
、int
、float
、bool
、list
等)
-datetime
对象
-UUID
对象
- 数据库模型
- …以及更多其他类型 - 直观:强大的编辑器支持。处处完成。调试时间少。
- 简单:旨在易于使用和学习。减少阅读文档的时间。
- 简短:最小化代码重复。每个参数声明的多个功能。更少的错误。
- 健壮:获取可用于生产环境的代码。具有自动交互式文档。
- Swagger UI
- ReDoc - 基于标准:基于(并完全兼容)API 的开放标准:OpenAPI(以前称为 Swagger)和JSON Schema
3. 快速开始
要求
- Python 3.6+
- FastAPI站在巨人的肩膀上
- Starlette:Web 部分
- Pydantic:数据校验部分
安装
pip install fastapi # 安装fastapi
pip install uvicorn # ASGI服务器,也可以使用Hypercorn,建议使用Uvicorn
例子
# main.py
# coding:utf8
from typing import Optional # 导入可选类
from fastapi import FastAPI
app = FastAPI()
@app.get("/") # 根路由
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
if __name__=='__main__':
import uvicorn
uvicorn.run('main:app', host='127.0.0.1', port=8008, reload=True)
运行
python3 main.py
INFO: Uvicorn running on http://127.0.0.1:8008 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.
注:
- uvicorn运行的是主程序的fastAPI,字符串方式传入,即上述的’main:app’
- 指定主机和端口运行
- reload=True,当项目文件更新,程序自动重启(热更新),此选项默认为False
4. 交互式API文档
访问http://127.0.0.1:8008/docs 即可看到可交互式api文档(由Swagger UI提供)
可以看到接口的请求方式、地址、参数、正常响应内容和常见异常响应。