Giter Club home page Giter Club logo

forum's Introduction

Forum API

Сервис, имитирующий API интернет-форума. Проект написан на Python 3.9, основной фреймворк - Flask, база данных - PostgreSQL 13.

Запуск

Перед запуском сервиса необходимо установить docker-compose и назначить следующие переменные окружения:

# логин роли Postgres, от имени которой будут выполняться операции с БД
FORUM_DB_USER
# пароль роли Postgres, от имени которой будут выполняться операции с БД
FORUM_DB_PASSWORD
# путь, где будет храниться БД сервиса на хосте
FORUM_DB_PATH
# путь, где будет храниться БД сервиса в контейнере Postgres
PGDATA
# пароль суперюзера Postgres
POSTGRES_PASSWORD

Запуск выполняется командой:

docker-compose up --build -d

После запуска поднимутся два контейнера: forum_db - сервер БД PostgreSQL и forum - сервис API. Сервис будет ожидать запросы по адресу http://0.0.0.0:8000/api/v1.

Описание API

Создание пользователя

Метод: POST

Путь: api/v1/users/create

Аутентификация: нет

В теле запроса ожидается JSON с ключами username, common_name email, password. В случае успешной обработки запроса от сервера придет ответ вида {"user_id": "some_id"}.

Получение токена

Метод: POST

Путь: api/v1/tokens

Аутентификация: basic access authentication. В заголовке запроса нужно указать username и пароль созданного пользователя.

В случае успешной обработки запроса от сервера придет ответ вида {"token": "user_token"}.

Для всех методов, перечисленных ниже, используется аутентификация bearer authentication. В заголовке запроса нужно указать действующий токен.

Создание форума

Метод: POST

Путь: api/v1/forums/create

В теле запроса ожидается JSON с ключами name и short_name. В случае успешной обработки запроса от сервера придет ответ вида {"forum_id": "some_id"}.

Создание треда сообщений

Метод: POST

Путь: api/v1/threads/create

В теле запроса ожидается JSON с ключем forum_id. Опционально можно указать ключи name, short_name, text. В случае успешной обработки запроса от сервера придет ответ вида {"thread_id": "some_id"}.

Создание сообщения

Метод: POST

Путь: api/v1/posts/create

В теле запроса ожидается JSON с ключем text и thread_id. В случае успешной обработки запроса от сервера придет ответ вида {"post_id": "some_id"}.

Получение подробной информации о сущности

Метод: GET

Путь:api/v1/<название сущности>/<id сущности>. Например, api/v1/users/5

В теле ответа сервера придет JSON со всеми доступными свойствами сущности.

Обновление информации о пользователе

Метод: PUT

Путь: api/v1/users/<id пользователя>

В теле запроса ожидается JSON с ключами доступных для изменения свойств пользователя: username, email, common_name.

Получение всех сообщений пользователя и всех тредов форума

Метод: GET

Путь для получения сообщений: /api/v1/users/<user_id>/posts Путь для получения тредов: /api/v1/forums/<forum_id>/threads

В теле ответа сервера придет JSON с информацией о всех постах пользователя и тредах форума соответственно.

Удаление тредов и сообщений

Метод: DELETE

Путь для удаления сообщений: /api/v1/posts/<post_id> Путь для удаления тредов: /api/v1/threads/<thread_id>

При удалении треда будут удалены все сообщения, которые он содержит.

Восстановление тредов и сообщений

Метод: POST

Путь для восстановления сообщений: /api/v1/posts/restore Путь для восстановления тредов: /api/v1/threads/restore

При восстановлении треда будут восстановлены сообщения, удаленные из-за удаления треда.

Запуск тестов

Тесты расположены в директории tests. Для их запуска потребуется поднять сервис вне докер-контейнеров.

Предварительно необходимо установить Python 3.9 и Postgres 13.2.

  1. Установка зависимостей Python;
pip install -r requirements-dev.txt
  1. Создание в Postgres базы данных, которую будет использовать сервис. Скрипт инициализации БД находится здесь.

  2. Назначить переменные окружения

export FLASK_APP=forum.py
export DATABASE_URL=postgresql://<db_user>:<db_password>@localhost/<db_name>
  1. Провести миграции БД и запустить сервис.
flask db upgrade
flask run
  1. Запустить тесты. Тесты ожидают, что сервис слушает запросы по адресу http://127.0.0.1:5000/.
pytest ./tests/

forum's People

Contributors

andreyad1 avatar

Watchers

 avatar  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.