Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Распределённый вычислитель арифметических выражений

Этот проект представляет собой распределённую систему для вычисления арифметических выражений. Он принимает выражения через REST API, вычисляет их асинхронно (с использованием распределённого агента) и позволяет получать информацию о статусе и результате вычислений.

Особенности

  • Асимметричная архитектура: Разделение на API-сервер и распределённого агента для выполнения вычислений.
  • Поддержка основных операций: Сложение, вычитание, умножение, деление (с обработкой ошибок, например, деления на ноль).
  • Асинхронные вычисления: После отправки запроса вычисление происходит в фоновом режиме.
  • REST API: Эндпоинты для подачи выражения, получения списка всех вычислений и запроса статуса конкретного выражения.
  • Настраиваемость: Параметры, такие как порт, время выполнения операций и вычислительная мощность, задаются через файл docker-compose.yml.

Быстрый старт

Необходимые компоненты

  • Go (версия 1.24+)
  • Docker (версия 20.10.20+)

Запуск проекта с использованием cmd.exe

  1. Убедитесь, что у вас установлен Go (версии 1.24 или выше).
  2. Клонируйте репозиторий:
git clone https://github.com/Rodef228/Go_calculator2
cd calculator
  1. Установите зависимости:
go mod tidy
  1. Откройте новое окно терминала и перейдите в директорию проекта:
cd calculator
  1. Запустите:
docker-compose up --build
  1. По умолчанию сервис будет доступен на http://localhost:8080.

Документация API

1. Вычисление выражения

Эндпоинт: /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"
    }

2. Получение списка всех вычислений

Эндпоинт: /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
    }
  ]
}

3. Получение результата по ID

Эндпоинт: /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

Успешный запрос на вычисление

curl --location "http://localhost:8080/api/v1/calculate" --header "Content-Type: application/json" --data "{\"expression\": \"2+2*2\"}"

Ожидаемый ответ:

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Ошибка: Неправильный HTTP-метод

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"
}

Ошибка: Неверный формат JSON

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: Количество задач, которые может обрабатывать агент параллельно.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages