Code Monkey home page Code Monkey logo

bewise_1's Introduction

Проект Quiz Service

Техническое задание

  1. С помощью Docker (предпочтительно - docker-compose) развернуть образ с любой опенсорсной СУБД (предпочтительно - PostgreSQL). Предоставить все необходимые скрипты и конфигурационные (docker/compose) файлы для развертывания СУБД, а также инструкции для подключения к ней. Необходимо обеспечить сохранность данных при рестарте контейнера (то есть - использовать volume-ы для хранения файлов СУБД на хост-машине).
  2. Реализовать на Python3 веб сервис (с помощью FastAPI или Flask, например), выполняющий следующие функции:
    1. В сервисе должно быть реализован POST REST метод, принимающий на вход запросы с содержимым вида {"questions_num": integer}.
    2. После получения запроса сервис, в свою очередь, запрашивает с публичного API (англоязычные вопросы для викторин) https://jservice.io/api/random?count=1 указанное в полученном запросе количество вопросов.
    3. Далее, полученные ответы должны сохраняться в базе данных из п. 1, причем сохранена должна быть как минимум следующая информация (название колонок и типы данный можете выбрать сами, также можете добавлять свои колонки):
      1. ID вопроса
      2. Текст вопроса
      3. Текст ответа
      4. Дата создания вопроса. В случае, если в БД имеется такой же вопрос, к публичному API с викторинами должны выполняться дополнительные запросы до тех пор, пока не будет получен уникальный вопрос для викторины.
    4. Ответом на запрос из п.2.a должен быть предыдущей сохранённый вопрос для викторины. В случае его отсутствия - пустой объект.
  3. В репозитории с заданием должны быть предоставлены инструкции по сборке докер-образа с сервисом из п. 2., его настройке и запуску. А также пример запроса к POST API сервиса.
  4. Желательно, если при выполнении задания вы будете использовать docker-compose, SQLAalchemy, пользоваться аннотацией типов.

Стек технологий

  • Язык: Python 3 (CPython)
  • БД: PostgreSQL
  • Фрейморк: Flask
  • ORM: SQLAalchemy
  • Среда контейнеров: Docker(docker-compose)

Инструкция по сборке и запуску

Для удобства работы сервис включен в оркестратор вместе с ДБ и pgAdmin4 (Для просмотра ДБ). На уровне оркестратора они объединены в одну сеть. В качестве веб-сервера используется отладочный сервер Flask, поэтому данную установку не рекомендуется использовать в проде при серьёзных нагрузках и из за проблем с безопасностью. Сервис стартует (по-умолчанию) на порту 8080.

  • Старт сервиса (с БД и pgAdmin):
docker-compose --profile apiapp up -d
  • Старт только БД:
docker-compose --profile only_db up -d
  • Старт БД и pgAdmin:
docker-compose --profile admin_db up -d

В папке запуска при этом будут созданы папки для хранения данных БД, настроек БД и pgAdmin.

  • Проверка работы:
docker-compose ps

В контейнер встроена также дополнительная проверка состояния БД.

  • Просмотр логов:
docker-compose logs

Для ручной сборки и запуска контейнера только с сервисом можно использовать команды:

sudo docker build -t apiapp_image:latest .
docker run --name apiapp_container --rm -d -p 8080:8080 -e POSTGTRES_SQL_URI=postgresql://quizuser:quiz1234@localhost:5432/quizdb apiapp_image:latest

Параметры для аутентификации БД:

  • Имя БД: quizdb
  • Имя пользователя: quizuser
  • Пароль БД: quiz1234 (мастер пароль от pgAdmin тот же)
  • Имя хоста БД для подкючение pgAdmin в контейнере: quizdb_container

Пример запроса

  • Curl
curl -X POST http://localhost:8080/ -H 'Content-Type: application/json' -d '{"questions_num":10}'
  • testAPI (находится в каталоге проекта)
python testAPI.py

bewise_1's People

Contributors

alashkov83 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.