FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于 Python 3.7+ 并使用了类型提示。它结合了 Starlette 的高性能和 Pydantic 的数据验证功能,使得开发 API 变得非常高效和简单。以下是 FastAPI 的入门指南:
1. 安装 FastAPI
首先,你需要安装 FastAPI 和 Uvicorn(一个 ASGI 服务器,用于运行 FastAPI 应用)。
pip install fastapi uvicorn
2. 创建一个简单的 FastAPI 应用
创建一个 Python 文件(例如 main.py
),并编写以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
3. 运行 FastAPI 应用
使用 Uvicorn 运行你的 FastAPI 应用:
uvicorn main:app --reload
main
是你的 Python 文件名(不含.py
后缀)。app
是你在代码中创建的 FastAPI 实例。--reload
参数会在代码更改时自动重新加载服务器,适合开发环境。
4. 访问 API
打开浏览器或使用工具(如 curl
或 Postman)访问以下 URL:
http://127.0.0.1:8000/
:返回{"message": "Hello, World!"}
http://127.0.0.1:8000/items/42?q=test
:返回{"item_id": 42, "q": "test"}
5. 自动生成的 API 文档
FastAPI 自动生成交互式 API 文档:
- Swagger UI:访问
http://127.0.0.1:8000/docs
- ReDoc:访问
http://127.0.0.1:8000/redoc
这些文档允许你直接在浏览器中测试 API 端点。
6. 使用 Pydantic 进行数据验证
FastAPI 使用 Pydantic 进行数据验证和序列化。以下是一个使用 Pydantic 模型的示例:
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
def create_item(item: Item):
return item
在这个例子中,Item
模型定义了请求体的结构。FastAPI 会自动验证请求数据是否符合模型定义。
7. 处理请求体和路径参数
你可以同时使用路径参数和请求体:
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_id": item_id, **item.dict()}
8. 异步支持
FastAPI 支持异步请求处理。你可以使用 async def
定义异步端点:
@app.get("/async-example")
async def async_example():
await some_async_function()
return {"message": "This is an async example"}
9. 依赖注入
FastAPI 提供了强大的依赖注入系统,允许你在端点中注入依赖项:
from fastapi import Depends
def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):
return commons
10. 部署
当你准备好部署应用时,可以使用 Uvicorn 或其他 ASGI 服务器(如 Hypercorn)来运行你的 FastAPI 应用。
uvicorn main:app --host 0.0.0.0 --port 80
总结
FastAPI 是一个功能强大且易于使用的框架,适合构建高性能的 API。它结合了类型提示、自动文档生成、数据验证和异步支持,使得开发过程更加高效和愉快。通过以上步骤,你可以快速入门并开始构建自己的 API。