前言
FastAPI是一个现代、高性能的Python Web框架,专为构建API而设计。它基于Starlette和Pydantic,利用Python的类型提示和异步编程特性,提供了卓越的性能、自动文档生成和强大的数据验证功能。本文将从基础概念讲起,逐步深入到高级特性,帮助读者全面掌握FastAPI。
1. FastAPI简介
FastAPI是一个用于构建API的现代、快速的Web框架,适用于Python 3.6+。它具有以下核心特性:
-
高性能:与Node.js和Go等语言的高性能框架相媲美。
-
自动文档生成:支持Swagger UI和ReDoc两种交互式文档。
-
数据验证和转换:基于Pydantic,自动处理请求和响应数据的验证。
-
类型提示支持:利用Python的类型提示,减少错误并提高代码可读性。
-
异步支持:支持异步编程,适合处理高并发请求。
2. 环境搭建与快速启动
安装FastAPI和Uvicorn
FastAPI需要一个ASGI服务器,如Uvicorn。可以通过以下命令安装:
bash复制
pip install fastapi uvicorn
创建第一个FastAPI应用
创建一个名为main.py
的文件,并写入以下代码:
Python复制
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello World"}
启动服务
在终端中运行以下命令启动服务:
bash复制
uvicorn main:app --reload
--reload
参数会在代码更改后自动重启服务。
访问服务
启动后,访问http://127.0.0.1:8000
,你会看到{"message": "Hello World"}
的响应。
查看交互文档
FastAPI自动生成了交互文档,可以通过以下地址访问:
-
Swagger UI:
http://127.0.0.1:8000/docs
-
ReDoc:
http://127.0.0.1:8000/redoc
。
3. 路由与请求处理
路由定义
FastAPI支持多种HTTP方法(如GET、POST、PUT、DELETE):
Python复制
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
请求参数
FastAPI支持路径参数、查询参数、请求体等多种参数类型:
Python复制
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
数据验证
FastAPI利用Pydantic进行数据验证,自动处理请求数据的类型检查和转换。
4. 高级特性
异步编程
FastAPI支持异步请求处理,适合IO密集型任务:
Python复制
@app.get("/async")
async def async_example():
return {"message": "This is an async endpoint"}
依赖注入
FastAPI提供了一个强大的依赖注入系统,可以简化代码并提高复用性。
WebSocket支持
FastAPI支持WebSocket协议,适合实时应用开发:
Python复制
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
await websocket.send_text("Hello WebSocket")
await websocket.close()
安全与认证
FastAPI内置支持OAuth2、JWT等认证机制,确保API的安全性。
5. 数据库集成
FastAPI可以与多种ORM工具集成,如SQLAlchemy和Tortoise ORM。以下是一个简单的SQLAlchemy集成示例:
Python复制
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
6. 部署
FastAPI应用可以通过多种方式部署,如使用Uvicorn、Docker或云平台。
使用Uvicorn部署
bash复制
uvicorn main:app --host 0.0.0.0 --port 80
使用Docker部署
创建一个Dockerfile
:
dockerfile复制
FROM python:3.8-slim
WORKDIR /app
COPY . /app
RUN pip install fastapi uvicorn
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
7. 总结
FastAPI是一个功能强大且易于上手的Web框架,适合从初学者到高级开发者的不同需求。它不仅提供了高性能和自动文档生成,还支持异步编程和强大的数据验证。通过学习本文,读者可以全面掌握FastAPI框架的各个方面,并能够构建出功能强大、性能优越的API应用。