Python的FastAPI框架真是让人眼前一亮,它吸收了Flask和Django的精华,还加入了不少现代化的特性。咱们今天就来聊聊这个新秀框架,看看它是怎么帮我们又快又好地开发REST API的。
框架特点
FastAPI是个异步优先的框架,基于Python 3.6+的类型提示功能构建。它支持异步编程,性能相当棒。跟其他框架比起来,它的代码写起来特别简洁,而且自带API文档,写好代码文档就自动生成了,贼方便。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.get(“/”)
async def read_root():
return {“Hello”: “World”}
@app.get(“/items/{item_id}”)
async def read_item(item_id: int):
return {“item_id”: item_id}
数据校验
写API最烦人的就是参数校验了,FastAPI用了Pydantic这个库,数据校验变得超级简单。你只要定义好数据模型,框架就会自动帮你处理参数校验,出错了还会返回友好的错误提示。
from typing import Optional
from pydantic import BaseModel, Field
class UserCreate(BaseModel):
username: str = Field(..., min_length=3, max_length=20)
email: str = Field(..., regex=r“^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$”)
age: Optional[int] = Field(None, ge=0, le=120)
@app.post(“/users/”)
async def create_user(user: UserCreate):
return user
小贴士:
记得给所有的路径操作函数加上async关键字
Pydantic模型的字段类型要写明确,别用Any
数据验证失败会自动返回422状态码
依赖注入
FastAPI的依赖注入系统特别好用,比如要做用户认证、数据库连接这些常见操作,直接用Depends就搞定了。
from fastapi import Depends, HTTPException
from typing import Annotated
async def get_db():
db = Database()
try:
yield db
finally:
db.close()
@app.get(“/users/me”)
async def read_users_me(db: Annotated[Database, Depends(get_db)]):
return await db.get_current_user()
中间件和异常处理
写API肯定要处理各种异常情况,FastAPI的异常处理机制就很优雅。中间件的写法也很直观,想加个请求计时器轻轻松松。
from fastapi import HTTPException
import time
class TimerMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
response.headers[“X-Process-Time”] = str(process_time)
return response
app.add_middleware(TimerMiddleware)
@app.exception_handler(HTTPException)
async def custom_http_exception_handler(request, exc):
小贴士:
自定义异常处理器要放在应用启动前注册
中间件的执行顺序是后进先出
异常处理要考虑全面,别让用户看到500错误
FastAPI这么多高级特性,关键是用起来并不复杂。它的性能也相当给力,每秒能处理几万个请求不在话下。文档也写得特别清楚,看得我都想给开发团队打钱了。
要是你以前写过Django或Flask,上手FastAPI绝对是分分钟的事。就算你是第一次接触Web框架,照着文档撸两天也能搞出个像样的API服务。
推 荐 阅 读
点赞分享
让钱和爱流向你
领取专属 10元无门槛券
私享最新 技术干货