一、方式 1:FastAPI 内置自动文档(零成本,首选)
FastAPI 原生集成了 Swagger UI 和 ReDoc,无需额外配置,启动服务后即可可视化调试接口,适合开发初期快速验证。
操作步骤:
- 编写示例接口 (
main.py):
python
运行
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI(title="库存微服务", version="1.0")
# 定义请求体模型
class InventoryItem(BaseModel):
product_id: int
stock: int
# POST 接口
@app.post("/inventory/", summary="创建库存记录")
async def create_inventory(item: InventoryItem):
# 模拟业务逻辑(调试时可加打印)
print(f"收到库存请求:product_id={item.product_id}, stock={item.stock}")
return {
"code": 200,
"message": "库存创建成功",
"data": item.dict()
}
# GET 接口(根据商品ID查库存)
@app.get("/inventory/{product_id}", summary="查询库存")
async def get_inventory(product_id: int):
return {
"code": 200,
"data": {"product_id": product_id, "stock": 100}
}
- 启动 Uvicorn 开发服务器(带热重载):
bash
运行
uvicorn main:app --host 0.0.0.0 --port 8001 --reload
- 访问自动文档调试接口 :
- Swagger UI(交互性强,支持直接发送请求):http://localhost:8001/docs
- ReDoc(更规范的文档展示):http://localhost:8001/redoc
调试操作(以 Swagger UI 为例):
- 找到
/inventory/POST 接口,点击「Try it out」; - 自动填充示例请求体(或手动修改
product_id/stock); - 点击「Execute」,直接查看响应结果、状态码、请求头;
- 调试 GET 接口同理,只需输入路径参数
product_id即可。
优势:无需安装额外工具,实时同步代码修改(热重载),能直接看到接口参数校验、响应格式是否符合预期。
二、方式 2:命令行工具(curl/httpie)
适合快速验证接口,或在无图形界面的服务器上调试,补充两种常用工具:
1. curl(系统自带,你之前用过)
bash
运行
# 调试 POST 接口
curl -X POST http://localhost:8001/inventory/ \
-H "Content-Type: application/json" \
-d '{"product_id": 10001, "stock": 100}' \
-v # -v 显示详细请求/响应(含头信息、状态码)
# 调试 GET 接口
curl http://localhost:8001/inventory/10001 -v
2. httpie(更友好的语法,推荐)
bash
运行
# 安装
pip install httpie
# 调试 POST 接口(自动识别 JSON,无需手动加 Content-Type)
http POST http://localhost:8001/inventory/ product_id=10001 stock=100
# 调试 GET 接口
http GET http://localhost:8001/inventory/10001
三、方式 3:图形化工具(功能强大,生产 / 联调首选)
适合复杂场景(如带认证、文件上传、批量调试),推荐两款主流工具:
1. Postman(最常用)
- 下载:https://www.postman.com/
- 调试步骤:
-
新建「Collection」,命名为「库存微服务」;
-
新建请求,选择「POST」,输入 URL:
http://localhost:8001/inventory/; -
切换到「Body」→「raw」→「JSON」,粘贴请求体: json
{"product_id": 10001, "stock": 100} -
点击「Send」,查看响应(可直接看到状态码、响应体、耗时);
-
支持保存请求、设置环境变量(如切换开发 / 测试环境地址)、批量运行测试用例。
-
2. Insomnia(轻量替代)
- 下载:https://insomnia.rest/
- 操作逻辑和 Postman 类似,界面更简洁,支持自动格式化 JSON、代码生成(如 curl/Python 请求代码)。
四、方式 4:Python 代码调试(结合 IDE 断点)
适合接口逻辑复杂(如涉及数据库、第三方服务),需要逐行调试代码的场景,以 PyCharm/VS Code 为例:
步骤(PyCharm):
-
打开
main.py,在接口函数内打断点(点击代码行号旁的空白处):python
运行
async def create_inventory(item: InventoryItem): print(f"收到库存请求:product_id={item.product_id}, stock={item.stock}") # 在此行打断点 ↓ return { "code": 200, "message": "库存创建成功", "data": item.dict() } -
配置 Uvicorn 调试启动项:
- 点击 PyCharm 右上角「Add Configuration」;
- 选择「Python」→「Script path」:选择系统中
uvicorn脚本路径(如venv/bin/uvicorn或python/site-packages/uvicorn/__main__.py); - 「Parameters」:输入
main:app --port 8001 --reload; - 点击「OK」,启动调试模式(绿色虫子图标)。
-
触发接口请求(通过 Swagger/Postman/curl),代码会停在断点处:
- 查看变量值(如
item的内容); - 逐行执行(F8),检查逻辑是否符合预期;
- 修改变量值,验证边界场景(如
stock=0时的处理)。
- 查看变量值(如
VS Code 补充:
- 打开「运行和调试」面板(Ctrl+Shift+D);
- 新建配置,选择「Python」→「FastAPI」,自动生成
launch.json; - 启动调试,触发请求即可断点调试。
五、方式 5:日志 / 打印调试(排查线上问题)
若无法用断点(如测试环境),可通过日志输出关键信息:
python
运行
from fastapi import FastAPI, Request
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(message)s")
logger = logging.getLogger(__name__)
app = FastAPI()
@app.post("/inventory/")
async def create_inventory(item: InventoryItem, request: Request):
# 打印请求头、客户端IP、请求体
logger.info(f"客户端IP:{request.client.host}")
logger.info(f"请求头:{dict(request.headers)}")
logger.info(f"请求体:{item.dict()}")
return {"code": 200, "data": item.dict()}
启动服务后,控制台会输出详细日志,方便定位问题。
六、调试常见问题及解决
表格
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 接口返回 422 错误 | 请求体参数类型 / 格式错 | 查看 Swagger UI 的「Response Body」,核对参数类型(如 product_id 需为 int) |
| 断点不生效 | 未用 --reload 或 IDE 配置错 | 启动时加 --reload,确认 IDE 调试配置指向正确的 uvicorn 脚本 |
| 访问不到接口 | 端口 /host 配置错 | 确认启动命令是 --host 0.0.0.0 --port 8001,访问地址为 localhost:8001 |
总结
- 快速调试 :优先用 FastAPI 内置的
/docs(Swagger UI),零配置、可视化; - 命令行验证:用 curl/httpie 快速测试接口(适合服务器环境);
- 复杂逻辑调试:结合 IDE 断点(PyCharm/VS Code),逐行检查变量和逻辑;
- 线上问题排查:通过日志输出请求 / 响应关键信息,定位问题。