Простой сервис вопросов и ответов, реализованный на 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"