Реализовать простой HTTP-мультиплексор. Это должен быть простой http-сервер с одним хендлером. Хендлер получает на вход POST-запрос со списком url в json-формате. После этого сервер запрашивает данные по всем этим url и возвращает результат клиенту в json-формате. Если в процессе обработки хотя бы одного из url получена ошибка, обработка всего списка прекращается и клиенту возвращается текстовая ошибка.
- для реализации задачи следует использовать Go 1.13 или выше
- использовать можно только компоненты стандартной библиотеки Go
- сервер не должен принимать запрос если количество url в в нем больше 20
- таймаут на запрос одного url - одна секунда
- в репозитории должен быть приложен Dockerfile, который позволяет собрать и запустить сервис
- пожалуйста, добавь README с описанием того, как сервис собирать и запускать (с использованием docker) и какого формата запрос он принимает, какой ответ нам ожидать
- будет супер, если ты добавишь минимальные комментарии в код, которые объяснят, что где происходит
- для каждого входящего запроса должно быть не больше 4 одновременных исходящих
- сервер не должен обслуживать больше чем 100 одновременных входящих http-запросов
- обработка запроса может быть отменена клиентом в любой момент, это должно повлечь за собой остановку всех операций связанных с этим запросом
- сервис должен поддерживать 'graceful shutdown'
go run ./main.go
Сборка:
docker build -t go-test-task .
Запуск:
docker run -it --rm -it --rm -p 8080:8080 go-test-task --name="go-test-task"
{
"urls": [
url1,
url2,
...
]
}
Вместе с результатом возвращается ошибка. В случае успеха ошибка будет пустая:
{
"error":"",
"responses":[
{
"url":"url1",
"response":"..."
},
{
"url":"url2",
"response":"..."
}
...
]
}
В случае возникновения ошибки (таймаут, сигнал от ОС) ошибка не пустая, а "responses" отсутствуют:
{
"error":"some error",
"responses":null
}