快速入門¶
🚀 從資料模型到完整 REST API¶
快速體驗:建立可用的 REST API¶
from autocrud import AutoCRUD
from dataclasses import dataclass
@dataclass
class User:
id: str
name: str
email: str
age: int = 0
# 簡單設定
crud = AutoCRUD()
crud.register_model(User) # 完整 REST API 自動生成
# 創建生產級 API 應用
app = crud.create_fastapi_app(title="我的 API")
# 執行: uvicorn main:app --reload
# 訪問: http://localhost:8000/docs
🎯 主要功能:
完整的 REST API:
GET /users
,POST /users
,PUT /users/{id}
,DELETE /users/{id}
,GET /users/count
高級查詢功能:
GET /users?page=1&page_size=10&sort_by=name&sort_order=asc
時間範圍篩選:
GET /users?created_time_start=2024-01-01&created_time_end=2024-12-31
完整 Swagger 文檔: 自動產生的交互式 API 文檔 (訪問
/docs
)資料驗證: 自動請求/響應驗證,錯誤處理
零配置: 開箱即用,無需額外設置
💡 為什麼這是技術突破?¶
傳統手工建立一個 FastAPI CRUD 路由需要:
# 傳統方式 - 繁瑣且容易出錯
from fastapi import FastAPI, HTTPException, Query
from pydantic import BaseModel
from typing import Optional, List
app = FastAPI()
class UserCreate(BaseModel):
name: str
email: str
age: int = 0
class UserResponse(BaseModel):
id: str
name: str
email: str
age: int
@app.post("/users", response_model=UserResponse, status_code=201)
async def create_user(user: UserCreate):
# 驗證、ID生成、存儲、錯誤處理邏輯...
pass
@app.get("/users", response_model=List[UserResponse])
async def list_users(
page: int = Query(1, ge=1),
page_size: int = Query(20, ge=1, le=100),
sort_by: Optional[str] = None,
sort_order: str = Query("desc", regex="^(asc|desc)$")
):
# 分頁、排序、查詢邏輯...
pass
# ... 還需要 GET, PUT, DELETE, COUNT 等路由
# 每個模型都需要重複這些繁瑣的代碼!
用 AutoCRUD,這些全部自動完成!
進階應用:企業級多模型 API¶
from autocrud import AutoCRUD
from dataclasses import dataclass
from typing import List
from enum import Enum
class OrderStatus(str, Enum):
PENDING = "pending"
CONFIRMED = "confirmed"
SHIPPED = "shipped"
@dataclass
class User:
id: str
name: str
email: str
is_premium: bool = False
@dataclass
class Product:
id: str
name: str
price: float
category: str
@dataclass
class Order:
id: str
user_id: str
items: List[str]
total: float
status: OrderStatus = OrderStatus.PENDING
# 一次註冊,獲得完整的企業級 API 平台
crud = AutoCRUD()
crud.register_model(User) # -> 完整的 /users API
crud.register_model(Product) # -> 完整的 /products API
crud.register_model(Order) # -> 完整的 /orders API
app = crud.create_fastapi_app(title="企業級電商 API")
需要程式化控制?沒問題!¶
當自動 API 無法滿足所有需求時,你還有完整的程式化控制權:
# 完整的程式化 CRUD 操作
user_id = crud.create("users", {"name": "Alice", "email": "alice@example.com"})
user = crud.get("users", user_id)
all_users = crud.list_all("users")
# 高級查詢操作
from autocrud import ListQueryParams, SortOrder
params = ListQueryParams(
page=1,
page_size=10,
sort_by="name",
sort_order=SortOrder.ASC
)
result = crud.list("users", params)
print(f"總共 {result.total} 個使用者")
# 更新和刪除
crud.update("users", user_id, {"age": 25})
crud.delete("users", user_id)
🎯 生產環境部署¶
AutoCRUD 生成的 API 可以直接部署到任何支持 FastAPI 的環境:
# main.py - 生產就緒
from autocrud import AutoCRUD
from autocrud.storage import DiskStorage
import os
# 生產環境配置
storage = DiskStorage(storage_dir=os.getenv("DATA_DIR", "./data"))
crud = AutoCRUD(storage_factory=lambda name: storage)
# 註冊你的業務模型
crud.register_model(User)
crud.register_model(Product)
# 創建生產級應用
app = crud.create_fastapi_app(
title="生產 API v1.0",
version="1.0.0",
prefix="/api/v1"
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
部署命令:
# 開發環境
uvicorn main:app --reload
# 生產環境
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
# Docker 部署
docker build -t my-api . && docker run -p 8000:8000 my-api
🌟 核心優勢¶
🎯 自動 API 生成: 這是技術核心!從資料模型直接產生完整的 REST API
⚡ 零配置啟動: 定義模型 → 註冊模型 → 執行應用,就這麼簡單
📚 自動文檔: 完整的 OpenAPI/Swagger 文檔,包含所有端點和驗證規則
🔧 企業級功能: 內建分頁、排序、查詢、驗證、錯誤處理
💻 程式化控制: 當自動 API 不夠用時,完整的 CRUD 方法讓你有完全控制權
🚀 生產就緒: 直接部署到任何 FastAPI 支援的平台,無需額外配置
下一步¶
執行應用 (需要安裝 uvicorn)¶
uvicorn main:app --reload¶
### 多模型支援
```python
from autocrud import AutoCRUD, ResourceNameStyle
@dataclass
class Product:
id: str
name: str
price: float
category: str
# 建立多模型 CRUD 系統
multi_crud = AutoCRUD(
resource_name_style=ResourceNameStyle.SNAKE,
use_plural=True
)
# 註冊多個模型
user_crud = multi_crud.register_model(User) # URL: /users
product_crud = multi_crud.register_model(Product) # URL: /products
# 建立統一的 FastAPI 應用
app = multi_crud.create_fastapi_app(
title="多模型 API",
description="支援多個資料模型的 CRUD API"
)
插件系統¶
AutoCRUD 支援插件系統來擴展功能:
from autocrud import BaseRoutePlugin, plugin_manager
from fastapi import BackgroundTasks
class CustomPlugin(BaseRoutePlugin):
def __init__(self):
super().__init__("custom", "1.0.0")
def get_routes(self, crud):
async def custom_handler(crud, background_tasks: BackgroundTasks):
return {"message": "自定義端點"}
return [PluginRouteConfig(
name="custom",
path="/custom",
method=RouteMethod.GET,
handler=custom_handler,
summary="自定義端點"
)]
# 註冊插件
plugin_manager.register_plugin(CustomPlugin())
高級功能¶
時間戳和用戶追蹤¶
from autocrud import MetadataConfig
metadata_config = MetadataConfig(
enable_timestamps=True,
enable_user_tracking=True
)
user_crud = SingleModelCRUD(
model=User,
storage=storage,
resource_name="users",
metadata_config=metadata_config
)
高級更新操作¶
from autocrud import AdvancedUpdater, set_value, list_add
updater = AdvancedUpdater()
# 原子更新操作
operations = [
set_value("name", "New Name"),
list_add("tags", "new_tag")
]
success = updater.update(user_crud, user_id, operations)
URL 形式自訂¶
# 預設複數形式
multi_crud.register_model(User) # -> /api/v1/users
# 指定單數形式
multi_crud.register_model(Product, use_plural=False) # -> /api/v1/product
# 自訂資源名稱
multi_crud.register_model(Company, resource_name=\"organizations\") # -> /api/v1/organizations