itvbackend

module
v0.0.0-...-eee2b2e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 9, 2020 License: MIT

README

itvbackend

Решение тестовой задачи для собеседования в компании ITV

Условие задачи

Нужно написать back-end для сервиса, который бы исполнял http-запросы к другим ресурсам.

Алгоритм работы.

Клиент просит сервис выполнить http запрос к некому ресурсу. В просьбе в формате json описаны поля {метод, адрес} (опционально: заголовки, тело). Например, {GET http://google.com}. Сервис выполняет запрос из просьбы и в качестве ответа клиенту возвращает json объект с полями {сгенерированный id запроса, http статус, заголовки, длинна ответа}. Список просьб должен сохраняться на сервере, например в map.

Выше описана операция создания просьбы (FetchTask). Предусмотреть ещё операции получения всех существующих просьб (опционально постранично), операция удаления просьбы по id.

Задача предполагает, что кандидат покажет знание перечисленных выше пунктов за исключением, может быть, goroutine/chan/sync.Mutex. Так же мы хотели бы увидеть код приближённый к продакшн версии с понятными наименованиями переменных и http route-ов, unit тестами и т.д. Если кандидат уверен в своих силах, для выполнения просьб можно реализовать асинхронный вариант работы на основе паттерна workerpool на goroutine-ах, который бы получал задания из канала, выполнял их и безопасно в смысле многопоточности, сохранял результаты в БД.

Сборка и запуск приложения

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

$ make build

Выполните unit-тесты командой:

$ make test

Запустите приложение:

$ ./build/bin/itvbackend

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

$ ./scripts/client-app.sh
$ ./scripts/paginator.sh 

Режим конкурентного выполнения просьб

В этом режиме приложение взаимодействует с БД PostgreSQL. Создайте базу данных itvbackend на сервере PostgreSQL и выполните следующую команду для запуска миграций:

$ make migrate-db
2020/07/07 11:10:30 Start buffering 20200707011001/u create_requests
2020/07/07 11:10:30 Read and execute 20200707011001/u create_requests
2020/07/07 11:10:30 Finished 20200707011001/u create_requests (read 20.631333ms, ran 35.099882ms)
2020/07/07 11:10:30 Finished after 64.956965ms
2020/07/07 11:10:30 Closing source and database

Также приложение создает Worker Pool для конкурентной обработки запросов, размером которого можно управлять с помощью параметров командной строки.

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

$ ./build/bin/itvbackend --mode=database --pool=5 \
    --dsn='postgres://postgres:postgres@localhost:5432/itvbackend?sslmode=disable'

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

$ ./scripts/database-mode.sh

После выполнения скрипта в таблице requests появятся новые записи.

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL