Skip to content

Latest commit

History

History
109 lines (75 loc) 路 3.63 KB

File metadata and controls

109 lines (75 loc) 路 3.63 KB

Q&A API

袩褉芯褋褌芯泄 褋械褉胁懈褋 胁芯锌褉芯褋芯胁 懈 芯褌胁械褌芯胁, 褉械邪谢懈蟹芯胁邪薪薪褘泄 薪邪 FastAPI.

孝械褏薪懈褔械褋泻懈泄 褋褌械泻

  • 袘褝泻械薪写: FastAPI, Uvicorn
  • 袘邪蟹邪 写邪薪薪褘褏: PostgreSQL
  • ORM: SQLAlchemy 2.0 (褋懈薪褏褉芯薪薪褘泄 写褉邪泄胁械褉)
  • 袦懈谐褉邪褑懈懈: Alembic
  • 袙邪谢懈写邪褑懈褟 懈 褋械褉懈邪谢懈蟹邪褑懈褟: Pydantic V2
  • 袣芯薪褎懈谐褍褉邪褑懈褟: Pydantic-settings
  • 袣芯薪褌械泄薪械褉懈蟹邪褑懈褟: Docker, Docker Compose
  • 孝械褋褌懈褉芯胁邪薪懈械: Pytest, HTTPX
  • 袥懈薪褌懈薪谐/褎芯褉屑邪褌懈褉芯胁邪薪懈械: Ruff

袟邪锌褍褋泻 锌褉芯械泻褌邪

袙褋械 蟹邪胁懈褋懈屑芯褋褌懈 懈 褋械褉胁懈褋褘 褍锌褉邪胁谢褟褞褌褋褟 褔械褉械蟹 Docker Compose.

  1. 小泻谢芯薪懈褉褍泄褌械 褉械锌芯蟹懈褌芯褉懈泄

  2. 小芯蟹写邪泄褌械 .env 褎邪泄谢 小泻芯锌懈褉褍泄褌械 褋芯写械褉卸懈屑芯械 懈蟹 .env.example 胁 薪芯胁褘泄 褎邪泄谢 .env. 袙褘 屑芯卸械褌械 懈蟹屑械薪懈褌褜 蟹薪邪褔械薪懈褟, 薪芯 写谢褟 谢芯泻邪谢褜薪芯谐芯 蟹邪锌褍褋泻邪 芯薪懈 锌芯写褏芯写褟褌.

  3. 袟邪锌褍褋褌懈褌械 褋械褉胁懈褋褘 袙褘锌芯谢薪懈褌械 泻芯屑邪薪写褍 胁 泻芯褉薪械胁芯泄 写懈褉械泻褌芯褉懈懈 锌褉芯械泻褌邪:

    docker-compose up --build

    协褌邪 泻芯屑邪薪写邪 褋芯斜械褉械褌 芯斜褉邪蟹 写谢褟 FastAPI-锌褉懈谢芯卸械薪懈褟, 锌芯写薪懈屑械褌 泻芯薪褌械泄薪械褉 褋 PostgreSQL, 锌褉懈屑械薪懈褌 屑懈谐褉邪褑懈懈 斜邪蟹褘 写邪薪薪褘褏 懈 蟹邪锌褍褋褌懈褌 胁械斜-褋械褉胁械褉.

    小械褉胁懈褋 斜褍写械褌 写芯褋褌褍锌械薪 锌芯 邪写褉械褋褍 http://localhost:8000. 袠薪褌械褉邪泻褌懈胁薪邪褟 写芯泻褍屑械薪褌邪褑懈褟 (Swagger UI) 写芯褋褌褍锌薪邪 锌芯 邪写褉械褋褍 http://localhost:8000/docs.

袟邪锌褍褋泻 褌械褋褌芯胁

袛谢褟 蟹邪锌褍褋泻邪 褌械褋褌芯胁 胁褘锌芯谢薪懈褌械 泻芯屑邪薪写褍:

docker-compose run --rm app pytest -q

协褌邪 泻芯屑邪薪写邪 蟹邪锌褍褋褌懈褌 薪芯胁褘泄 泻芯薪褌械泄薪械褉, 锌褉懈屑械薪懈褌 屑懈谐褉邪褑懈懈 泻 褌械褋褌芯胁芯泄 斜邪蟹械 写邪薪薪褘褏 懈 胁褘锌芯谢薪懈褌 胁褋械 褌械褋褌褘 懈蟹 锌邪锌泻懈 tests/.


袩褉懈屑械褉褘 蟹邪锌褉芯褋芯胁 泻 API (cURL)

1. 小芯蟹写邪褌褜 胁芯锌褉芯褋

curl -X POST "http://localhost:8000/questions/" \
-H "Content-Type: application/json" \
-d '{
  "text": "袣邪泻 懈褋锌芯谢褜蟹芯胁邪褌褜 SQLAlchemy 2.0 褋 FastAPI?"
}'

2. 袩芯谢褍褔懈褌褜 褋锌懈褋芯泻 胁褋械褏 胁芯锌褉芯褋芯胁

curl -X GET "http://localhost:8000/questions/"

3. 小芯蟹写邪褌褜 芯褌胁械褌 写谢褟 胁芯锌褉芯褋邪

袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 胁芯锌褉芯褋 褋 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"
}'

4. 袩芯谢褍褔懈褌褜 胁芯锌褉芯褋 褋 械谐芯 芯褌胁械褌邪屑懈

袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 胁芯锌褉芯褋 褋 id=1 褋褍褖械褋褌胁褍械褌.

curl -X GET "http://localhost:8000/questions/1"

5. 袩芯谢褍褔懈褌褜 泻芯薪泻褉械褌薪褘泄 芯褌胁械褌

袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 芯褌胁械褌 褋 id=1 褋褍褖械褋褌胁褍械褌.

curl -X GET "http://localhost:8000/answers/1"

6. 校写邪谢懈褌褜 芯褌胁械褌

袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 芯褌胁械褌 褋 id=1 褋褍褖械褋褌胁褍械褌.

curl -X DELETE "http://localhost:8000/answers/1"

7. 校写邪谢懈褌褜 胁芯锌褉芯褋 (泻邪褋泻邪写薪芯 褍写邪谢懈褌 胁褋械 芯褌胁械褌褘)

袩褉械写锌芯谢邪谐邪械褌褋褟, 褔褌芯 胁芯锌褉芯褋 褋 id=1 褋褍褖械褋褌胁褍械褌.

curl -X DELETE "http://localhost:8000/questions/1"