Данный сервис может использоваться для различных вычислений в режиме онлайн.
Поддерживаемые операции:
- Сложение (+)
- Вычитание (-)
- Умножение (*)
- Деление (/)
- Операции приоритета (скобки)
Пользователю необходимо вычислять арифметические выражения. Например, он вводит строку 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 --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
"expression": <выражение>
}'
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
"expression": <выражение>
}'
- URL localhost/api/v1/calculate;
- Запрос POST;
- Body RAW {"expression": <выражение>};
- Нажать на SEND.
- 201 - выражение принято для вычисления
- 422 - невалидные данные
- 500 - что-то пошло не так
{
"id": <уникальный идентификатор выражения> // его ID
}
curl --location 'localhost/api/v1/expressions'
- 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 - что-то пошло не так
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
"expression": "2+2*2"
}'
Статус 201(успешно создано);
{
"id": 12345 // пример
}
curl --location 'localhost/api/v1/expressions/12345' // 12345 - это ID выше.
Статус 200(успешно получено);
{
"expression":
{
"id": 12345,
"status": "OK",
"result": 321
}
}
curl --location 'localhost/api/v1/expressions'
Статус 200(успешно получены);
{
"expressions": [
{
"id": 12345,
"status": "OK",
"result": 321
},
]
}
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
"radhgsags": "2+2/2"
}'
Статус 422(неправильный запрос);
curl --location 'localhost/api/v1/calculate' \
--header 'Content-Type: application/json' \
--data '{
"expression": "2+2/2"
}'
Статус 201(успешно создано);
{
"id": 12345 // пример
}
curl --location 'localhost/api/v1/expressions/45362'
Статус 404(не найдено);
curl --location 'localhost/api/v1/abc' \
--header 'Content-Type: application/json' \
--data '{
"expression": "121+2"
}'
Статус 404(NOT FOUND);