FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 APIs,基于 Python 3.7+ 的类型提示。FastAPI 是一个非常流行的选择,因为它提供了很多现代 Web 开发所需的功能,同时保持了简洁性和易用性。
FastAPI 的特点
声明式路由:
- 使用装饰器来定义 API 路由,使代码更加清晰和易于维护。
自动文档生成:
- 自动生成交互式文档(支持 Swagger UI 和 ReDoc),方便测试和文档编写。
异步支持:
- 支持异步请求处理,利用 Python 的
async/await
语法提高性能。
类型提示:
- 利用 Python 的类型提示来自动验证请求和响应数据。
依赖注入:
- 强大的依赖注入系统,简化了服务和组件的管理和注入。
性能:
- 快速响应时间和高吞吐量,适合构建高性能的 API。
安装 FastAPI
要开始使用 FastAPI,首先需要安装它。你可以通过 pip
来安装 FastAPI:
此外,你还需要安装一个 ASGI 兼容的服务器,如 uvicorn
,用于运行 FastAPI 应用:
快速入门示例
下面是一个简单的 FastAPI 应用示例:
- 创建一个 FastAPI 应用:
1 2 3 4 5 6 7
| from fastapi import FastAPI
app = FastAPI()
@app.get("/") async def root(): return {"message": "Hello, FastAPI!"}
|
- 运行 FastAPI 应用:
你可以使用 uvicorn
来运行你的 FastAPI 应用:
1
| uvicorn main:app --reload
|
这里的 main
是包含 FastAPI 应用的 Python 文件名(假设为 main.py
)。--reload
参数使服务器在代码更改时自动重启。
- 访问应用:
启动服务器后,你可以通过浏览器或 HTTP 客户端访问 http://127.0.0.1:8000
来查看你的应用。
- 查看文档:
FastAPI 自动生成交互式文档。你可以通过访问 http://127.0.0.1:8000/docs
或 http://127.0.0.1:8000/redoc
来查看和测试你的 API。
接口发布demo
FastAPI 提供了许多其他功能,包括:
路径参数:
1 2 3
| @app.get("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id}
|
查询参数:
1 2 3
| @app.get("/items/") async def read_item(skip: int = 0, limit: int = 10): return {"skip": skip, "limit": limit}
|
请求体 json:
1 2 3 4 5 6 7 8 9 10 11
| from pydantic import BaseModel
class Item(BaseModel): name: str description: str | None = None price: float tax: float | None = None
@app.post("/items/") async def create_item(item: Item): return item
|
表单数据
1 2 3 4 5 6 7
| from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/") async def login(username: str = Form(...), password: str = Form(...)): return {"username": username, "password": password}
|
文件上传
create_file
接口接受原始字节数据,而 create_upload_file
接口接受上传文件对象。
1 2 3 4 5 6 7 8 9 10 11
| from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/files/") async def create_file(file: bytes = File(...)): return {"file_size": len(file)}
@app.post("/uploadfile/") async def create_upload_file(file: UploadFile = File(...)): return {"filename": file.filename}
|
依赖注入:
- 用于管理服务的依赖关系。
- 定义一个依赖项来处理请求的解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from fastapi import FastAPI, Depends
app = FastAPI()
async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 100): return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/") async def read_items(params: dict = Depends(common_parameters)): return params
@app.get("/users/") async def read_users(params: dict = Depends(common_parameters)): return params
|
使用 Request
对象
访问原始的请求对象,例如处理复杂的请求头或原始请求数据。
read_headers
接口读取请求头,read_raw_body
接口读取原始请求体。
1 2 3 4 5 6 7 8 9 10 11 12 13
| from fastapi import FastAPI, Request
app = FastAPI()
@app.get("/headers/") async def read_headers(request: Request): headers = request.headers return {"headers": headers}
@app.post("/raw-body/") async def read_raw_body(request: Request): body = await request.body() return {"body": body.decode()}
|
返回值
使用pydantic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| from fastapi import FastAPI from pydantic import BaseModel
app = FastAPI()
class PathInfo(BaseModel): path: str additional_info: str | None = None
class ResponseModel(BaseModel): paths: dict[str, PathInfo]
@app.get("/paths/", response_model=ResponseModel) async def get_paths(): path_data = { "id1": PathInfo(path="path1", additional_info="info1"), "id2": PathInfo(path="path2", additional_info="info2"), "id3": PathInfo(path="path3"), } response = ResponseModel(paths=path_data) return response
|
纯字典
1 2 3 4 5 6 7 8 9 10 11 12 13
| from fastapi import FastAPI
app = FastAPI()
@app.get("/paths/") async def get_paths(): paths = { "id1": "path1", "id2": "path2", "id3": "path3", } return paths
|
总结
FastAPI 是一个强大且灵活的 Web 框架,非常适合用于构建高性能的 API。通过上述示例,你应该能够快速上手并开始构建自己的 FastAPI 应用。如果你需要更深入的学习或具体的案例,可以查阅 FastAPI 的官方文档或其他资源。
服务生成的所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点