安装FastAPI
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple fastapi# 将来需要将应用程序部署到生产环境可以安装 uvicorn 作为服务器pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uvicorn
例子
创建test1.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
运行uvicorn命令运行服务器
unicorn test1:app --reload
- test1:test1.py 文件(一个 Python「模块」)
- app:在 main.py 文件中通过 app = FastAPI() 创建的对象
- —reload:让服务器在更新代码后自动重新启动,仅在开发时使用该选项

浏览器访问
127.0.0.1:8000
查看交互式API文档
http://127.0.0.1:8000/docs
查看可选的 API 文档
http://127.0.0.1:8000/redoc
OpenAPI
FastAPi 使用 API 的 OpenAPI 标准为所有 API 生成 schema
schema
- 是对事物的一种定义或描述
- 它并非具体的实现代码,而只是抽象的描述
- 后面会详说
API Schema
- OpenAPI 是一种规定如何定义 API Schema 的规范
- 定义的 OpenAPI Schema 将包括 API 路径,以及它们可能使用的参数等等
- 比如:这个 API 的作用是什么,需要必传哪些参数,请求方法是什么
Data Schema
- 指的是某些数据比如 JSON 的结构
- 它可以表示 JSON 的属性及其具有的数据类型
- 比如:某个属性的数据类型是什么,有没有默认值,是不是必填,作用是什么
JSON Schema
- OpenAPI 会为 API 定义 API Schema,一般会包括 API 发送和接收的数据的定义,比如:发送的数据的类型、是否必填
- 这些定义会以 JSON数据格式展示出来,所以都会称为 JSON Schema
查看 openapi.json
原始OpenAPI只是一个自动生成的包含了所有 API 描述的 JSON
http://127.0.0.1:8000/openapi.json
代码拆分详解
一:导入FastAPI
from fastapi import FastAPI
- FastAPI 是一个为 API 提供了所有功能的 Python 类,必写就对了
- FastAPI 是直接从 Starlette 继承的类,可以通过 FastAPI 使用所有的 Starlette 的功能
二:创建一个 FastAPI 实例
app = FastAPI()
- app 就是 FastAPI 类的一个实例对象
- 重点:app 将是创建所有 API 的主要交互对象
- 要点:uvicorn 执行命令时也会用到 app
uvicorn main:app --reload
更换app
from fastapi import FastAPI
my_awesome_api = FastAPI()
@my_awesome_api.get("/")
async def root():
return {"message": "Hello World"}
- 运行uvicorn命令也要更换
uvicorn test1:my_awesome_api --reload
三:创建一个路径操作
路径
- 指的是 URL 中从第一个
/起的后半部分,即常说的 path - 比如:https://example.com/items/foo 的路径就是/items/foo
- 路径也称为:端点、路由
操作
就是 HTTP 请求方法
- POST
- GET
- PUT
- DELETE
- OPTIONS
- HEAD
- PATCH
- TRACE
在 HTTP 协议中,可以使用以上的其中一种(或多种)「方法」与每个路径进行通信
遵守 RESTFul 风格的话
通常使用:
- POST:创建数据
- GET:读取数据
- PUT:更新数据
- DELETE:删除数据
定义一个路径操作装饰器
@app.get("/")
有两点含义
- 请求路径为 /
- 使用 get 请求
其他请求方法的装饰器
- @app.post()
- @app.put()
- @app.delete()
- @app.options()
- @app.head()
- @app.patch()
- @app.trace()
四:定义路径操作函数
async def root():
- 这就是一个普通的 Python 函数
- 每当 FastAPI 接收一个使用
GET方法访问路径为 / 的请求时这个函数会被调用 - 在这个例子中,它是一个 async 函数(异步处理函数)
五:函数返回内容
return {"message": "Hello World"}
- 可以返回一个 dict、list,也可以是 str、int 单个值
- 还可以返回 Pydantic 模型(后面详解)
- 还可以是其他会自动转换为 JSON 的对象和模型(包括 ORM 对象等)
