Шаблон для построения 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 - Миграция данных под созданные модели объектов.