
使用 Rust 构建功能完整的 gRPC API
在本文中,我们将逐步讲解如何在 Python 中创建一个安全的 REST API。假设你有一个创新想法,例如利用用户的相机硬件检测照片中的人物,并基于剪影生成趣味内容。本文将指导你实现目标,并构建一个安全且高效的 API。
在构建 REST API 时,开发者通常面临两种选择:
本文将演示如何使用 FastAPI 构建高性能 REST API,同时集成目标检测功能(YOLOv7 模型),满足实际应用需求。
在终端中执行以下命令,创建并激活虚拟环境:
python -m venv env
source env/bin/activate # Windows 用户使用 env\Scripts\activate
激活虚拟环境后,可安装所需依赖项,确保项目环境独立、可控。
FastAPI 是一款高性能、易扩展的 Python 框架,非常适合构建 REST API。
pip install fastapi uvicorn
在项目目录创建 main.py
文件:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Welcome to the FastAPI application!"}
uvicorn main:app --reload --port 8001
访问 http://localhost:8001/ 查看 API 根端点,同时可通过 http://localhost:8001/docs 查看自动生成的 Swagger 文档。
为了实现目标检测,我们将引入 YOLOv7 模型。
git clone https://github.com/WongKinYiu/yolov7.git
cd yolov7
pip install -r requirements.txt
在 main.py
中添加检测逻辑:
from yolov7 import YOLOv7
import time
model = YOLOv7("yolov7.onnx", conf_thres=0.5, iou_thres=0.5)
@app.post("/detect")
def detect_objects(image_url: str):
start_time = time.time()
results = model.detect(image_url)
computation_time = time.time() - start_time
return {
"boxes": results["boxes"],
"scores": results["scores"],
"classes": results["classes"],
"computation_time": computation_time
}
支持通过 URL 或 Base64 上传图像,并返回边界框、置信度分数及类别信息。
为了防止滥用,可通过令牌验证限制访问权限。
from fastapi import Depends, HTTPException
TOKEN = "your_secure_token"
def verify_token(token: str):
if token != TOKEN:
raise HTTPException(status_code=403, detail="Invalid token")
@app.post("/detect")
def detect_objects(image_url: str, token: str = Depends(verify_token)):
# 检测逻辑保持不变
pass
仅持有正确令牌的用户才能访问目标检测端点,增强 API 安全性。
本文展示了如何使用 FastAPI 构建安全的 Python REST API,并结合 YOLOv7 实现目标检测功能。通过令牌验证机制,我们实现了 API 的访问控制,为进一步开发和扩展提供了可靠基础,无论是用于 MVP 产品还是复杂应用场景。
https://lemon.io/blog/how-to-create-a-secure-rest-api-in-python/