AutoCRUDยถ

๐Ÿš€ ่‡ชๅ‹•็”Ÿๆˆ CRUD API ็š„ Python ๅบซ - ๆ”ฏๆŒๅคš็จฎๆ•ธๆ“š้กžๅž‹๏ผŒ้›ถ้…็ฝฎๅฟซ้€Ÿๆง‹ๅปบ REST API

โœจ ็‰น่‰ฒยถ

  • ๐ŸŽฏ ๅคšๆ•ธๆ“š้กžๅž‹: msgspec.Struct, Pydantic, dataclass, TypedDict

  • โšก ้›ถ้…็ฝฎ: ไธ€่กŒไปฃ็ขผ็”ŸๆˆๅฎŒๆ•ด CRUD API

  • ๐Ÿ“š ่‡ชๅ‹•ๆ–‡ๆช”: ้›†ๆˆ OpenAPI/Swagger

  • ๐Ÿ”ง ้ซ˜ๅบฆๅฏๅฎšๅˆถ: ้ˆๆดป็š„่ทฏ็”ฑๅ’Œๅ‘ฝๅ

  • ๐ŸŽ๏ธ ้ซ˜ๆ€ง่ƒฝ: ๅŸบๆ–ผ FastAPI ๅ’Œ msgspec

๐Ÿš€ ๅฟซ้€Ÿ้–‹ๅง‹ยถ

from datetime import datetime, timedelta
from fastapi import FastAPI
from fastapi.testclient import TestClient
from autocrud import AutoCRUD
from msgspec import Struct

class TodoItem(Struct):
    title: str
    completed: bool
    due: datetime

class TodoList(Struct):
    items: list[TodoItem]
    notes: str

# ๅ‰ตๅปบ CRUD API
crud = AutoCRUD()
crud.add_model(TodoItem)
crud.add_model(TodoList)

app = FastAPI()
crud.apply(app)

# ๆธฌ่ฉฆ
client = TestClient(app)
resp = client.post("/todo-list", json={"items": [], "notes": "ๆˆ‘็š„ๅพ…่พฆ"})
todo_id = resp.json()["resource_id"]

# ไฝฟ็”จ JSON Patch ๆทปๅŠ ้ …็›ฎ
client.patch(f"/todo-list/{todo_id}", json=[{
    "op": "add", 
    "path": "/items/-",
    "value": {
        "title": "ๅฎŒๆˆ้ …็›ฎ",
        "completed": False,
        "due": (datetime.now() + timedelta(hours=1)).isoformat()
    }
}])

# ็ฒๅ–็ตๆžœ
result = client.get(f"/todo-list/{todo_id}/data")
print(result.json())

ๅ•Ÿๅ‹•้–‹็™ผๆœๅ‹™ๅ™จ:

python -m fastapi dev main.py

่จชๅ• http://localhost:8000/docs ๆŸฅ็œ‹่‡ชๅ‹•็”Ÿๆˆ็š„ API ๆ–‡ๆช”ใ€‚

๐Ÿ“š ๅฎŒๆ•ดๆ–‡ๆช”ๅฐŽ่ˆชยถ

๐Ÿ”— ๅฟซ้€Ÿ้€ฃ็ตยถ

python -m fastapi dev your_file.py

๐Ÿ“š ๆ–‡ๆช”ยถ