Проект реализует простое REST API для проведения A/B тестов мобильных приложений. Он состоит из одного эндпоинта, который предоставляет информацию об экспериментах мобильным клиентам.
Подробное описание представлено в Техническом Задании
- Получение списка экспериментов: Мобильное приложение может получить список экспериментов с их значениями, отправив GET запрос на /api/v1/experiments. При запросе требуется предоставить уникальный идентификатор устройства в заголовке Device-Token. Ответом на запрос будет JSON объект, содержащий список экспериментов и их значений в формате [{"experiment_name": "option"}, ...].
- Статистика экспериментов: Для просмотра статистики по экспериментам пользователь может отправить GET запрос на /pages/experiment-stats. На выходе будет HTML страница с таблицей, отображающей информацию о каждом эксперименте, общее количество устройств, участвующих в эксперименте, и их распределение между опциями.
- Каждый устройство должно попадать только в одну группу эксперимента и оставаться в ней.
- Если устройство однажды получило значение, оно должно оставаться с этим значением.
- Эксперименты проводятся только для новых устройств, то есть если эксперимент создан после первого запроса от устройства, оно не должно получать информацию об этом эксперименте.
При запуске в контейнерах поднимается веб-сервер NGINX, который сконфигурирован с возможностью кеширования данных. Пользователь отправляет запрос с дополнительным заголовком Device-Token. Если пользователь уже отправлял запрос с таким заголовком, то, если в кэше еще осталась информация об этом запросе именно с этим заголовком, то nginx возвращает ответ, который лежит в кэше. Если в пользователь не отправлял запрос с таким заголовком или если отправлял, но в кэше нет информации об этом запросе, то запрос проксируется на сервер приложения.
Время хранения ответа от "api/v1/experiments" составляет 5 минут Время хранени ответа от "pages/experiment-stats" составляет 1 минуту
Каждый экспперимент обрабатывается параллельно, в фоне, своим Celery воркером. В качестве брокера используется RabbitMQ, в качестве Results Backend - Redis
Чтобы запустить проект:
- Перейдите в директорию с вашими проектами.
- Склонируйте репозиторий на свой локальный компьютер:
# Linux
> https://github.com/semyonnakrokhin/ab_experiments_backend.git
- Перейдите в каталог проекта:
# Linux
> cd ab_experiments_backend
-
В этой директории и в директории ./fastapi_app создайте файлы, перечисленные в environment.txt. В какой именно директории нужно создавать файл указано в квадратных скобках
-
Выполните команду находясь в корневой директории проекта:
# Linux
> docker-compose up --build
-
Откройте веб-браузер и перейдите по адресу http://localhost:1337/docs для доступа к веб-сервису в режиме Swgger. Для отслеживания информации в базе данных Redis, вы также можете использовать Redis Commander, который доступен на порту 8081. Просто откройте браузер и перейдите по адресу http://localhost:8081.
-
Для остановки контейнеров выполните команду:
# Linux
> docker-compose down
-
Убедитесь, что в корневой директории есть все файлы, перечисленные в environment.txt
-
Выполните команду находясь в корневой директории проекта:
# Linux
> docker-compose -f docker-compose_test.yaml up --build
- Для остановки контейнеров выполните команду:
# Linux
> docker-compose down
Семен Накрохин 2206095@gmail.com
Этот проект распространяется под лицензией MIT. Подробности смотрите в файле LICENSE.