Шаблон для построения API с помощью фреймворка FastAPI и ORM Peewee. Для аутентификации используется JWT.
Последовательность действий для установки:
-
Для создания виртуальной среды могут использоваться conda или virtualenv.
-
Создайте виртуальное окружение
conda create -n venv
-
Активируйте виртуальное окружение
conda activate venv
-
Установите пакеты
pip install -r requirements.txt
-
Перейдите в папку с проектом
-
Создайте базу данных <database>
-
Выполните миграцию
python pw_migrate.py migrate --database=postgresql://postgres@<host_postgres>:5432/<database>
<host_postgres> - рабочий хост базы данных
<database> - имя базы данных
-
Настройте конфигурационный файл conf.yaml
-
Запустите API
uvicorn main:app --reload
Файл конфигурации: conf.yaml
SECRET_KEY - Секретный ключ для JWT-токена.
ALGORITHM: "HS256" - Используемый алгоритм шифрования JWT-токена.
ACCESS_TOKEN_EXPIRE_MINUTES: 1440 - Количество минут истечения действия JWT-токена.
DB:
DOMAIN: "127.0.0.1" - Хост, на котором запускается сервер.
PORT: 8000 - Используемый порт.
NAME: "fapi_template" - Имя БД.
USER: "postgres" - Имя пользователя БД. Для доступа к БД используется метод trust (без пароля), локальный хост и стандартный порт 5432.
ASYNC: True - Асинхронные запросы к БД.
Запустите на отладку файл main.py
Проверьте API на локальной машине: http://127.0.0.1:8000/
Доступ к REST API Swagger: http://127.0.0.1:8000/docs#/
Доступ к REST API Redoc: http://127.0.0.1:8000/redoc
Тесты наследуют класс TestCase
. Тесты лучше всего запускать не под привелигированным пользователем (т.е. не root).
cd ./tests
conda activate venv
pytest test_main.py
Эндпойнт | Описание |
---|---|
POST /login | Логин для получения JWT-токена. |
GET /api/items/list | Список всех элементов. |
GET /api/items/{item_id} | Вернуть 1 элемент. |
PUT /api/items/{item_id} | Изменить 1 элемент. |
POST /api/items/new | Создать новый элемент. |
Для форматирования кода используйте утилиту black
black --config ./pyproject.toml -v -S ./
Для добавления своего функционала можно воспользоваться готовым примером:
- /backend/models/item.py - Модели объектов: для использования в API и для хранения в базе данных
- /backend/api/mainapp.py - Реализация конечных точек API
- /migrations/002_ITEM.py - Миграция данных под созданные модели объектов.