Этот проект представляет собой распределённую систему для вычисления арифметических выражений. Он принимает выражения через REST API, вычисляет их асинхронно (с использованием распределённого агента) и позволяет получать информацию о статусе и результате вычислений.
- Асимметричная архитектура: Разделение на API-сервер и распределённого агента для выполнения вычислений.
- Поддержка основных операций: Сложение, вычитание, умножение, деление (с обработкой ошибок, например, деления на ноль).
- Асинхронные вычисления: После отправки запроса вычисление происходит в фоновом режиме.
- REST API: Эндпоинты для подачи выражения, получения списка всех вычислений и запроса статуса конкретного выражения.
- Настраиваемость: Параметры, такие как порт, время выполнения операций и вычислительная мощность, задаются через файл
docker-compose.yml.
- Убедитесь, что у вас установлен Go (версии 1.24 или выше).
- Клонируйте репозиторий:
git clone https://github.com/Rodef228/Go_calculator2
cd calculator- Установите зависимости:
go mod tidy- Откройте новое окно терминала и перейдите в директорию проекта:
cd calculator- Запустите:
docker-compose up --build- По умолчанию сервис будет доступен на
http://localhost:8080.
Эндпоинт: /api/v1/calculate
Метод: POST
Описание: Принимает JSON с арифметическим выражением для вычисления.
Тело запроса:
{
"expression": "2+2*2"
}Успешный ответ:
- Статус:
201 Created - Тело ответа:
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}Примеры ошибок:
-
Неподдерживаемый метод (например, GET вместо POST):
{ "error": "only POST method is allowed" } -
Неверный формат JSON:
{ "error": "invalid JSON" } -
Пустое выражение:
{ "error": "no expression provided" }
Эндпоинт: /api/v1/expressions
Метод: GET
Описание: Возвращает список всех отправленных выражений с их статусом и результатом.
Пример ответа:
- Статус:
200 OK - Тело ответа:
{
"expressions": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"result": 6
},
{
"id": "z9y8x7w6-v5u4-3210-tsrq-ponmlkjihgfe",
"status": "pending",
"result": 0
}
]
}Эндпоинт: /api/v1/expressions/{id}
Метод: GET
Описание: Возвращает статус и результат вычисления для выражения с указанным ID.
Пример успешного ответа:
- Статус:
200 OK - Тело ответа:
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"result": 6
}Примеры ошибок:
-
Если ID не передан в URL:
{ "error": "ID not provided" } -
Если выражение с данным ID отсутствует:
{ "error": "there is no such expression" }
curl --location "http://localhost:8080/api/v1/calculate" --header "Content-Type: application/json" --data "{\"expression\": \"2+2*2\"}"Ожидаемый ответ:
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}curl --location "http://localhost:8080/api/v1/calculate" --request GETОжидаемый ответ:
{
"error": "only POST method is allowed"
}curl --location "http://localhost:8080/api/v1/calculate" --header "Content-Type: application/json" --data "{\"expression\": \"\"}"Ожидаемый ответ:
{
"error": "no expression provided"
}curl --location "http://localhost:8080/api/v1/calculate" --header "Content-Type: application/json" --data "{invalid json}"Ожидаемый ответ:
{
"error": "invalid JSON"
}Основные параметры системы задаются через файл docker-compose.yml:
PORT=8080
TIME_ADDITION_MS=1000
TIME_SUBTRACTION_MS=1000
TIME_MULTIPLICATIONS_MS=1000
TIME_DIVISIONS_MS=1000
COMPUTING_POWER=10
- PORT: Порт, на котором слушает сервер.
- TIME_*_MS: Симулированное время выполнения для каждой арифметической операции.
- COMPUTING_POWER: Количество задач, которые может обрабатывать агент параллельно.