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 ๆๆชใ
๐ ๅฎๆดๆๆชๅฐ่ชยถ
๐ ๅฟซ้้ฃ็ตยถ
๐ ๅฟซ้้ๅง - 5ๅ้ๅ ฅ้
๐ก ไฝฟ็จๆกไพ - ๅฎๆด็จๅผ็ขผ็ฏไพ
api_reference - ๅฎๆดๅๅง็ขผ
๐ ็จๆถๆๅ - ้ฒ้ๅ่ฝ
python -m fastapi dev your_file.py