袩褉芯褋褌芯泄 褋械褉胁懈褋 胁芯锌褉芯褋芯胁 懈 芯褌胁械褌芯胁, 褉械邪谢懈蟹芯胁邪薪薪褘泄 薪邪 FastAPI.
- 袘褝泻械薪写: FastAPI, Uvicorn
- 袘邪蟹邪 写邪薪薪褘褏: PostgreSQL
- ORM: SQLAlchemy 2.0 (褋懈薪褏褉芯薪薪褘泄 写褉邪泄胁械褉)
- 袦懈谐褉邪褑懈懈: Alembic
- 袙邪谢懈写邪褑懈褟 懈 褋械褉懈邪谢懈蟹邪褑懈褟: Pydantic V2
- 袣芯薪褎懈谐褍褉邪褑懈褟: Pydantic-settings
- 袣芯薪褌械泄薪械褉懈蟹邪褑懈褟: Docker, Docker Compose
- 孝械褋褌懈褉芯胁邪薪懈械: Pytest, HTTPX
- 袥懈薪褌懈薪谐/褎芯褉屑邪褌懈褉芯胁邪薪懈械: Ruff
袙褋械 蟹邪胁懈褋懈屑芯褋褌懈 懈 褋械褉胁懈褋褘 褍锌褉邪胁谢褟褞褌褋褟 褔械褉械蟹 Docker Compose.
-
小泻谢芯薪懈褉褍泄褌械 褉械锌芯蟹懈褌芯褉懈泄
-
小芯蟹写邪泄褌械
.env褎邪泄谢 小泻芯锌懈褉褍泄褌械 褋芯写械褉卸懈屑芯械 懈蟹.env.example胁 薪芯胁褘泄 褎邪泄谢.env. 袙褘 屑芯卸械褌械 懈蟹屑械薪懈褌褜 蟹薪邪褔械薪懈褟, 薪芯 写谢褟 谢芯泻邪谢褜薪芯谐芯 蟹邪锌褍褋泻邪 芯薪懈 锌芯写褏芯写褟褌. -
袟邪锌褍褋褌懈褌械 褋械褉胁懈褋褘 袙褘锌芯谢薪懈褌械 泻芯屑邪薪写褍 胁 泻芯褉薪械胁芯泄 写懈褉械泻褌芯褉懈懈 锌褉芯械泻褌邪:
docker-compose up --build
协褌邪 泻芯屑邪薪写邪 褋芯斜械褉械褌 芯斜褉邪蟹 写谢褟 FastAPI-锌褉懈谢芯卸械薪懈褟, 锌芯写薪懈屑械褌 泻芯薪褌械泄薪械褉 褋 PostgreSQL, 锌褉懈屑械薪懈褌 屑懈谐褉邪褑懈懈 斜邪蟹褘 写邪薪薪褘褏 懈 蟹邪锌褍褋褌懈褌 胁械斜-褋械褉胁械褉.
小械褉胁懈褋 斜褍写械褌 写芯褋褌褍锌械薪 锌芯 邪写褉械褋褍
http://localhost:8000. 袠薪褌械褉邪泻褌懈胁薪邪褟 写芯泻褍屑械薪褌邪褑懈褟 (Swagger UI) 写芯褋褌褍锌薪邪 锌芯 邪写褉械褋褍http://localhost:8000/docs.
袛谢褟 蟹邪锌褍褋泻邪 褌械褋褌芯胁 胁褘锌芯谢薪懈褌械 泻芯屑邪薪写褍:
docker-compose run --rm app pytest -q协褌邪 泻芯屑邪薪写邪 蟹邪锌褍褋褌懈褌 薪芯胁褘泄 泻芯薪褌械泄薪械褉, 锌褉懈屑械薪懈褌 屑懈谐褉邪褑懈懈 泻 褌械褋褌芯胁芯泄 斜邪蟹械 写邪薪薪褘褏 懈 胁褘锌芯谢薪懈褌 胁褋械 褌械褋褌褘 懈蟹 锌邪锌泻懈 tests/.
curl -X POST "http://localhost:8000/questions/" \
-H "Content-Type: application/json" \
-d '{
"text": "袣邪泻 懈褋锌芯谢褜蟹芯胁邪褌褜 SQLAlchemy 2.0 褋 FastAPI?"
}'curl -X GET "http://localhost:8000/questions/"袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 胁芯锌褉芯褋 褋 id=1 褋褍褖械褋褌胁褍械褌.
curl -X POST "http://localhost:8000/questions/1/answers/" \
-H "Content-Type: application/json" \
-d '{
"text": "袧褍卸薪芯 褋芯蟹写邪褌褜 蟹邪胁懈褋懈屑芯褋褌褜 get_db 懈 懈褋锌芯谢褜蟹芯胁邪褌褜 褋械褋褋懈懈.",
"user_id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
}'袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 胁芯锌褉芯褋 褋 id=1 褋褍褖械褋褌胁褍械褌.
curl -X GET "http://localhost:8000/questions/1"袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 芯褌胁械褌 褋 id=1 褋褍褖械褋褌胁褍械褌.
curl -X GET "http://localhost:8000/answers/1"袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 芯褌胁械褌 褋 id=1 褋褍褖械褋褌胁褍械褌.
curl -X DELETE "http://localhost:8000/answers/1"袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 胁芯锌褉芯褋 褋 id=1 褋褍褖械褋褌胁褍械褌.
curl -X DELETE "http://localhost:8000/questions/1"