Реализовать сервис, который хранит в PostgreSQL данные о писателях и их книгах, и способен по HTTP-запросу GET /writers/<writer_id> возвращать информацию о писателе и его книгах в формате JSON.
- Сервис должен иметь поддержку запуска из консоли с параметром командной строки init, который создает в базе данных нужные таблицы, и заполняет их тестовыми данными (пара-тройка писателей и их книг).
- Метод получения данных о писателе по HTTP-запросу не должен обращаться к базе данных более одного раза.
- Наличие которого README.md с инструкцией по инициализации базы данных и по запуску сервиса.
id | идентификатор |
name | имя |
id | идентификатор |
author_id | идентификатор автора |
title | название |
Разработанный сервис реализован на основе трехзвенной архитектуры и включает в себя следующие составляющие:
- Клиент (writers.py)
- Сервер (app.py)
- База данных (writers)
Для развертывания базы данных и сервера воспользуйтесь следующей инструкцией:
- Создайте базу данных writers. В терминале Linux вы можете сделать это посредством применения следующих команд:
- sudo -i -u <username>, где username - имя пользователя (по умолчанию postgres).
- createdb writers
- В папке с сервером создайте файл переменных окружения .env (touch .env). В созданном файле создайте переменную DATABASE_URL, имеющую в качестве своего значения ссылку на базу данных. (По умолчанию для локальной сети DATABASE_URL=postgresql://postgres:postgres@localhost/writers)
- Установите необходимые зависимости (pip install -r requirements.txt) для сервера.
- Запустите серверное приложение (python3 app.py).
Для использование сервиса выполните следующие шаги:
- Перед первым запуском клиентского приложения в папке с приложением создайте файл переменных окружения .env (touch .env). В созданном файле создайте переменную HOST_URL, имеющую в качестве своего значения ссылку на сервер. (По умолчанию для локальной сети HOST_URL=http://localhost:5000)
- Запустите клиентское приложение (python3 writers.py) с одним из следующих параметров командной строки:
- -i (--init) - для создания необходимых таблиц в базе данных.
- -s (--show) - для получения данных об идентификаторах писателей.
- -w (--writer) <writer_id> - для получения данных о выбранном писателе по его идентификатору.
- Создание таблиц (python3 writers.py -i):
Tables 'writers' and 'books' has been initialized.
- Получение данных об идентификаторах писателей (python3 writers.py -s):
[
{
"id": 1,
"name": "Достоевский, Ф.М."
},
{
"id": 2,
"name": "Булгаков, М.А."
},
{
"id": 3,
"name": "Куприн, А.И."
}
]
- Получение данных о трудах Достоевского (python3 writers.py -w 1):
{
"id": 1,
"name": "Достоевский, Ф.М.",
"books": [
{
"id": 2,
"title": "Преступление и наказание"
},
{
"id": 3,
"title": "Игрок"
},
{
"id": 7,
"title": "Братья Карамазовы"
},
{
"id": 8,
"title": "Идиот"
}
]
}