mirror of
https://github.com/wowlikon/LibraryAPI.git
synced 2025-12-11 21:30:46 +00:00
145 lines
7.5 KiB
Markdown
145 lines
7.5 KiB
Markdown

|
||
# LibraryAPI
|
||
|
||
Это проект приложения на FastAPI - современном веб фреймворке для создания API на Python. Я использую Pydantic для валидации данных, SQLModel для взаимодействия с базой данных, Alembic для управления миграциями, PostgreSQL как систему базы данных и Docker Compose для легкого развертывания.
|
||
|
||
### **Ключевые элементы:**
|
||
|
||
1. FastAPI: Предоставляет высокопроизводительность и простоту для разработки RESTful API, поддерживает асинхронные операции и автоматическую генерацию документации.
|
||
2. Pydantic: Используется для валидации данных и сериализации, позволяет легко определить схемы данных.
|
||
3. SQLModel: Объединяет SQLAlchemy и Pydantic, включая операции с базой данных с помощью классов Python.
|
||
4. Alembic: Инструмент для управления миграциями базы данных, упрощающий отслеживание и применение изменений в схеме базы данных.
|
||
5. PostgreSQL: Надежная реляционная база данных для хранения данных.
|
||
6. Docker Compose: Упрощает развертывание приложения и его зависимостей в контейнерах.
|
||
|
||
|
||
### **Инструкция по установке**
|
||
|
||
1. Клонируйте репозиторий:
|
||
```bash
|
||
git clone https://github.com/wowlikon/libraryapi.git
|
||
```
|
||
|
||
2. Перейдите в каталог проекта:
|
||
```bash
|
||
cd libraryapi
|
||
```
|
||
|
||
3. Настройте переменные окружения:
|
||
```bash
|
||
edit .env
|
||
```
|
||
|
||
4. Соберите контейнеры Docker:
|
||
```bash
|
||
docker compose build
|
||
```
|
||
|
||
5. Запустите приложение:
|
||
```bash
|
||
docker compose up api
|
||
```
|
||
|
||
Для создания новых миграций:
|
||
```bash
|
||
docker compose run --rm -T api alembic revision --autogenerate -m "Migration name"
|
||
```
|
||
|
||
Для запуска тестов:
|
||
```bash
|
||
docker compose up test
|
||
```
|
||
|
||
### **Эндпоинты API**
|
||
|
||
**Авторы**
|
||
| Метод | Эндпоинты | Описание |
|
||
|--------|-----------------------|---------------------------------|
|
||
| POST | `/authors` | Создать нового автора |
|
||
| GET | `/authors` | Получить список всех авторов |
|
||
| GET | `/authors/{id}` | Получить автора по ID с книгами |
|
||
| PUT | `/authors/{id}` | Обновить автора по ID |
|
||
| DELETE | `/authors/{id}` | Удалить автора по ID |
|
||
|
||
**Книги**
|
||
| Метод | Эндпоинты | Описание |
|
||
|--------|-----------------------|---------------------------------|
|
||
| POST | `/books` | Создать новую книгу |
|
||
| GET | `/books` | Получить список всех книг |
|
||
| GET | `/book/{id}` | Получить книгу по ID с авторами |
|
||
| PUT | `/books/{id}` | Обновить книгу по ID |
|
||
| DELETE | `/books/{id}` | Удалить книгу по ID |
|
||
|
||
**Жанры**
|
||
| Метод | Эндпоинты | Описание |
|
||
|--------|-----------------------|---------------------------------|
|
||
| POST | `/genres` | Создать новый жанр |
|
||
| GET | `/genres` | Получить список всех жанров |
|
||
| GET | `/genres/{id}` | Получить жанр по ID |
|
||
| PUT | `/genres/{id}` | Обновить жанр по ID |
|
||
| DELETE | `/genres/{id}` | Удалить жанр по ID |
|
||
|
||
**Связи**
|
||
| Метод | Эндпоинты | Описание |
|
||
|--------|------------------------------|-----------------------------------|
|
||
| GET | `/authors/{id}/books` | Получить список книг для автора |
|
||
| GET | `/books/{id}/authors` | Получить список авторов для книги |
|
||
| POST | `/relationships/author-book` | Связать автор-книга |
|
||
| DELETE | `/relationships/author-book` | Разделить автор-книга |
|
||
| GET | `/genres/{id}/books` | Получить список книг для жанра |
|
||
| GET | `/books/{id}/genres` | Получить список жанров для книги |
|
||
| POST | `/relationships/genre-book` | Связать автор-книга |
|
||
| DELETE | `/relationships/genre-book` | Разделить автор-книга |
|
||
|
||
**Другие**
|
||
| Метод | Эндпоинты | Описание |
|
||
|--------|-------------|-------------------------------|
|
||
| GET | `/api/info` | Получить информацию о сервисе |
|
||
|
||
|
||
```mermaid
|
||
erDiagram
|
||
AUTHOR {
|
||
int id PK "ID автора"
|
||
string name "Имя автора"
|
||
}
|
||
|
||
BOOK {
|
||
int id PK "ID книги"
|
||
string title "Название книги"
|
||
string description "Описание книги"
|
||
}
|
||
|
||
GENRE {
|
||
int id PK "ID жанра"
|
||
string name "Название жанра"
|
||
}
|
||
|
||
AUTHOR_BOOK {
|
||
int author_id FK "ID автора"
|
||
int book_id FK "ID книги"
|
||
}
|
||
|
||
GENRE_BOOK {
|
||
int genre_id FK "ID жанра"
|
||
int book_id FK "ID книги"
|
||
}
|
||
|
||
AUTHOR ||--o{ AUTHOR_BOOK : "писал"
|
||
BOOK ||--o{ AUTHOR_BOOK : "написан"
|
||
|
||
BOOK ||--o{ GENRE_BOOK : "принадлежит"
|
||
GENRE ||--o{ GENRE_BOOK : "содержит"
|
||
```
|
||
|
||
|
||
### **Используемые технологии**
|
||
|
||
- **FastAPI**: Современный web фреймворк для построения API с использованием Python, известный своей скоростью и простотой использования.
|
||
- **Pydantic**: Библиотека для валидации данных и управления настройками, использующая аннотации типов Python.
|
||
- **SQLModel**: Библиотека для взаимодействия с базами данных с использованием классов Python, объединяющая функции SQLAlchemy и Pydantic.
|
||
- **Alembic**: Легковесный инструмент для миграции базы данных на основе SQLAlchemy.
|
||
- **PostgreSQL**: Сильная, открытая реляционная система управления базами данных.
|
||
- **Docker**: Платформа для разработки, распространения и запуска приложений в контейнерах.
|
||
- **Docker Compose**: Инструмент для определения и запуска многоконтейнерных приложений Docker.
|