FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API。它基于 Python 3.6+ 类型提示,旨在提供快速开发、简洁设计和高性能。本文将引导你了解 FastAPI 的基础知识,包括环境搭建、基本概念、路由创建、请求处理,以及响应格式化等,提供一个全面的入门指南。
FastAPI 概述
FastAPI 是一个用于构建 API 的现代 Python Web 框架。它兼容 OpenAPI 和 JSON Schema,提供了自动数据验证、序列化和 API 文档等功能。
核心特点
- 高性能:与 NodeJS 和 Go 相当。
- 快速编码:减少约 40% 的开发时间。
- 自动生成文档:支持 Swagger UI 和 ReDoc。
- 基于标准:基于 OpenAPI 和 JSON Schema。
环境搭建
首先,需要安装 FastAPI 和一个 ASGI 服务器,如 Uvicorn。
bash
pip install fastapi[all]
创建第一个 FastAPI 应用
基本示例
创建一个基本的 FastAPI 应用:
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
运行应用
使用 Uvicorn 运行应用:
bash
uvicorn main:app --reload
访问 http://127.0.0.1:8000
可以看到响应。
路由和参数
FastAPI 使用 Python 类型提示定义路径参数和查询参数。
路径参数示例
python
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
查询参数示例
python
@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
return fake_items_db[skip : skip + limit]
请求体和数据模型
FastAPI 使用 Pydantic 库来处理数据模型。
请求体定义
python
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item
响应处理
FastAPI 允许你定义响应模型和状态码。
响应模型
python
from fastapi.responses import JSONResponse
@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: int):
...
return JSONResponse(content=item)
异常处理
FastAPI 提供了异常处理机制。
python
from fastapi import HTTPException
@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
return items[item_id]
中间件和依赖注入
FastAPI 支持中间件和依赖注入,以增强应用功能。
python
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/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
部署
FastAPI 应用可以部署在多种服务器和平台上,如 Gunicorn、Docker 等。
使用 Gunicorn 部署
bash
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
总结
FastAPI 以其高性能、快速开发和易用性在 Python Web 框架中脱颖而出。通过本文的介绍,你应该能够掌握 FastAPI 的基本用法,并开始构建自己的 Web API。随着学习的深入,你还可以探索 FastAPI 更多高级功能,以构建更复杂和强大的应用。