使用fastapi定义api接口
时间: 2025-06-12 15:47:51 浏览: 2
### 使用 FastAPI 定义 API 接口的示例教程
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于 Python 类型提示和 Starlette 核心。以下是使用 FastAPI 定义 API 接口的详细方法。
#### 1. 创建 FastAPI 应用实例
首先需要创建一个 FastAPI 应用实例,这是所有路由和接口的基础。可以通过 `FastAPI()` 类来实现[^1]。
```python
from fastapi import FastAPI
app = FastAPI()
```
#### 2. 定义简单的 GET 路由
定义一个根路径 `/` 的 GET 路由,返回一个简单的 JSON 响应。通过装饰器 `@app.get("/")` 来定义路由[^3]。
```python
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
```
#### 3. 定义带有路径参数的 GET 路由
可以通过路径参数传递数据,例如 `/items/{item_id}`。路径参数会自动解析并传递给函数。
```python
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
```
#### 4. 定义 POST 路由以接收请求体数据
POST 路由通常用于接收客户端发送的数据。可以使用 Pydantic 模型验证请求体中的数据。
```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": item.dict()}
```
#### 5. 处理文件上传
FastAPI 提供了对文件上传的支持。可以使用 `UploadFile` 和 `File` 来处理文件上传[^2]。
```python
from fastapi import File, UploadFile
@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}
```
#### 6. 获取请求对象
如果需要直接访问请求对象,可以将 `Request` 添加为函数参数。这在需要获取请求头、IP 地址等信息时非常有用[^2]。
```python
from fastapi import Request
@app.post("/example")
async def read_request(request: Request):
body = await request.json()
return {"received_data": body}
```
#### 7. 组合多种参数类型
FastAPI 支持同时定义请求体参数、查询参数和依赖注入参数。以下是一个复杂接口的示例[^4]。
```python
from typing import Optional
from fastapi import Query, Depends
class ChatData(BaseModel):
message: str
class User(BaseModel):
username: str
def get_current_user() -> User:
return User(username="testuser")
@app.post("/chat/")
async def chat(
request: Request,
data: ChatData,
conversation_id: Optional[str] = Query(None),
current_user: User = Depends(get_current_user)
):
return {
"user": current_user.username,
"data": data.dict(),
"conversation_id": conversation_id
}
```
#### 8. 使用 APIRouter 组织接口
对于大型项目,可以使用 `APIRouter` 将接口分组,便于维护和管理[^1]。
```python
from fastapi import APIRouter
router = APIRouter()
@router.get("/hello/")
def say_hello():
return {"message": "Hello from router!"}
app.include_router(router, prefix="/router", tags=["router"])
```
---
### 总结
上述内容展示了如何使用 FastAPI 定义 API 接口,包括创建应用实例、定义路由、处理请求体、文件上传以及组合多种参数类型。此外,还介绍了如何通过 `APIRouter` 组织接口以提高代码的可维护性[^1]。
---
阅读全文
相关推荐


















