Skip to content

imil23456/---

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Калькулятор

Краткое описание

Данный сервис может использоваться для различных вычислений в режиме онлайн.

Поддерживаемые операции:

  1. Сложение (+)
  2. Вычитание (-)
  3. Умножение (*)
  4. Деление (/)
  5. Операции приоритета (скобки)

Предназначение

Пользователю необходимо вычислять арифметические выражения. Например, он вводит строку 2 + 2 * 2 и ожидает получить результат 6. Однако операции сложения, умножения, деления и вычитания в нашей системе выполняются крайне медленно (это симуляция).

Из-за этого подход, при котором пользователь отправляет HTTP-запрос и сразу получает результат, не подходит. Более того, вычисление каждой операции требует огромных вычислительных ресурсов в нашей "альтернативной реальности".

Чтобы справиться с этой задачей, мы должны иметь возможность выполнять каждую операцию отдельно и масштабировать систему, добавляя новые вычислительные мощности (например, дополнительные "машины").

В связи с этим пользователь может периодически запрашивать у сервера статус вычисления, чтобы узнать, готов ли результат.

Установка

Клонируйте репозиторий:

  git clone https://github.com/imil23456/---.git
   cd calculate

Создайте в корне проекта файл .env и добавьте в него настройки (пример заполнения):

  • TIME_ADDITION_MS=100
  • TIME_SUBTRACTION_MS=100
  • TIME_MULTIPLICATIONS_MS=100
  • TIME_DIVISIONS_MS=100
  • COMPUTING_POWER=100

Чтобы запустить сервер проект, впишите команду:

  go run orchestrator\main.go 

Как это работает

При запуске приложения стартует сервер, который принимает запросы пользователей, а также агент, который опрашивает сервер на наличие новых задач. Если задачи есть, агент их обрабатывает и обновляет статус выражения.

Управление

Добавление выражения для вычисления на API.

Curl
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
  "expression": <выражение>
}'
Curl
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
  "expression": <выражение>
}'
Postman
  • URL localhost/api/v1/calculate;
  • Запрос POST;
  • Body RAW {"expression": <выражение>};
  • Нажать на SEND.
Коды ответа:
  • 201 - выражение принято для вычисления
  • 422 - невалидные данные
  • 500 - что-то пошло не так
Тело ответа
{
    "id": <уникальный идентификатор выражения> // его ID
}

Получение списка выражений

Curl
curl --location 'localhost/api/v1/expressions'
Postman
  • URL localhost/api/v1/expressions;
  • Запрос GET;
  • Body NONE;
  • Нажать на SEND.
Тело ответа:

Получение всех сохранённых выражений(ID не нужен).

{
    "expressions": [
        {
            "id": 8251431,
            "status": "OK",
            "result": 3>
        },
        {
            "id": 34942763,
            "status": "Wait",
            "result": 0
        }
    ]
}
Коды ответа:
  • 200 - успешно получен список выражений
  • 500 - что-то пошло не так
Тело ответа:
{
    "expression":
        {
            "id": <идентификатор выражения>,
            "status": <статус вычисления выражения>,
            "result": <результат выражения>
        }
}
Коды ответа:
  • 200 - успешно получено выражение
  • 404 - нет такого выражения
  • 500 - что-то пошло не так

Примеры работы с API

Простой пример

Делаем запрос на вычисление выражения

Curl
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
  "expression": "2+2*2"
}'
Ответ

Статус 201(успешно создано);

{
    "id": 12345 // пример
}

Получаем наше выражение

Curl
curl --location 'localhost/api/v1/expressions/12345' // 12345 - это ID выше.
Ответ

Статус 200(успешно получено);

{
    "expression":
        {
            "id": 12345,
            "status": "OK",
            "result": 321
        }
}

Получаем все выражения

Curl
curl --location 'localhost/api/v1/expressions'
Ответ

Статус 200(успешно получены);

{
    "expressions": [
        {
            "id": 12345,
            "status": "OK",
            "result": 321
        },
    ]
}

Пример с ошибкой в запросе №1

Делаем неправильный запрос на вычисление выражения

Curl
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
  "radhgsags": "2+2/2"
}'
Ответ

Статус 422(неправильный запрос);

Пример с ошибкой в запросе №2

Делаем правильный запрос на вычисление выражения

Curl
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
  "expression": "2+2/2"
}'
Ответ

Статус 201(успешно создано);

{
    "id": 12345 // пример
}

Далее получаем наше выражение(неправильный ID)

Curl
curl --location 'localhost/api/v1/expressions/45362'
Ответ

Статус 404(не найдено);

Пример с ошибкой в запросе №3

Делаем запрос с некорректным URL на вычисление выражения

Curl
curl --location 'localhost/api/v1/abc' \
--header 'Content-Type: application/json' \
--data '{
  "expression": "121+2"
}'
Ответ

Статус 404(NOT FOUND);

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages