FastAPI 学习笔记
- 0. 引言
- 1. 快速开始
- 2. 升级示例代码
0. 引言
在 Python 这个充满活力的生态系统中,FastAPI 应运而生,它是一个现代的、快速的 Web 框架,专注于构建 RESTful API。
无论你是一名有经验的 Python 开发人员,还是一名刚接触后端开发的新手,FastAPI 都值得一试。凭借其基于 ASGI 的异步特性、自动交互式文档、数据模型验证等优秀功能,FastAPI 让构建和维护 API 变得前所未有的高效和愉悦。
在这篇博客中,我们将一步步探索 FastAPI 的精华。从安装到项目搭建,从数据模型定义到路由处理,从中间件应用到数据库集成,无一幸免。我们还将学习如何结合 FastAPI 生态系统中的其他精彩库,打造功能丰富、高性能的 API 应用。无论你是想构建一个小巧的 API 还是开发一个复杂的企业级系统,FastAPI 都是不可多得的利器。
就让我们拥抱令人兴奋的 FastAPI,开启一段 Python Web 开发的新篇章吧!
1. 快速开始
安装 FastAPI 库,
pip install fastapi
也需要一个 ASGI 服务器,比如 Uvicorn 或 Hypercorn,用于生产环境。
pip install "uvicorn[standard]"
创建一个 main.py
文件,
from typing import Unionfrom fastapi import FastAPIapp = FastAPI()@app.get("/")
def read_root():return {"Hello": "World"}@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):return {"item_id": item_id, "q": q}
如何想使用异步,
from typing import Unionfrom fastapi import FastAPIapp = FastAPI()@app.get("/")
async def read_root():return {"Hello": "World"}@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):return {"item_id": item_id, "q": q}
运行,
uvicorn main:app --reload
关于命令
uvicorn main:app --reload
的解释如下:
main: 指的是主 Python 文件 main.py(“模块”)。
app: 指的是在 main.py 内部通过 app = FastAPI() 创建的对象。
–reload: 代码变更后重启服务器,仅在开发时使用。
打开你的浏览器,访问 http://127.0.0.1:8000/items/5?q=somequery。
你将看到以下 JSON 响应:
{"item_id": 5, "q": "somequery"}
你已经创建了一个 API,它:
- 接收发送到 路径
/
和/items/{item_id}
的 HTTP 请求。 - 这两个 路径 接受
GET
操作 (也称为 HTTP 方法)。 - 路径
/items/{item_id}
有一个必须为int
类型的 路径参数item_id
。 - 路径
/items/{item_id}
有一个可选的str
类型的 查询参数q
。
现在访问 http://127.0.0.1:8000/docs,
你会看到自动生成的交互式API文档(由Swagger UI提供):
2. 升级示例代码
将文件 main.py
修改为接收来自 PUT
请求的请求体。
使用 Pydantic 以标准 Python 类型声明请求体。
from typing import Unionfrom fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strprice: floatis_offer: Union[bool, None] = None@app.get("/")
def read_root():return {"Hello": "World"}@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):return {"item_id": item_id, "q": q}@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):return {"item_name": item.name, "item_id": item_id}
服务器应该会自动重新加载(因为您在上面的 uvicorn
命令中添加了 --reload
)。
现在访问 http://127.0.0.1:8000/docs。
- 交互式API文档将会自动更新,包括新的请求体部分。
- 单击"Try it out"按钮,它允许您填写参数并直接与API进行交互:
- 然后点击"Execute"按钮,用户界面将与您的API进行通信,发送参数,获取结果并将其显示在屏幕上:
FastAPI Documentation: https://fastapi.tiangolo.com
FastAPI Source Code: https://github.com/tiangolo/fastapi
未完待续!