5.6 KiB
5.6 KiB
Racing A* Web Service - Сводка
Что было сделано
Алгоритм A* из ProgramAStar.cs успешно обёрнут в микросервис на базе ASP.NET Core Web API.
Созданные файлы
1. Основные файлы сервиса
ProgramWebService.cs- Web API с endpoints для решения картracing-webservice.csproj- конфигурация проекта веб-сервисаrun-webservice.sh- скрипт для запуска сервиса
2. Документация
WEBSERVICE-README.md- краткое руководство по использованиюAPI-DOCUMENTATION.md- полная документация API с примерами
3. Примеры и тесты
test-api.sh- bash скрипт для тестирования всех endpointsexample-client.py- Python клиент для работы с API
API Endpoints
| Method | Endpoint | Описание |
|---|---|---|
| GET | / |
Информация о сервисе и доступных endpoints |
| GET | /health |
Health check для мониторинга |
| POST | /solve |
Решение карты гонок (основной endpoint) |
Запуск
# Быстрый старт
./run-webservice.sh
# Проверка
curl http://localhost:5000/health
# Решение карты
curl -X POST http://localhost:5000/solve \
-H "Content-Type: application/json" \
-d @maps/simple-test.json
Формат API
Запрос (POST /solve)
{
"map": [
[0, 0, 4],
[5, 0, 0],
[0, 0, 0]
],
"maxIterations": 5000000,
"timeoutSeconds": 60
}
Ответ (успех)
{
"success": true,
"solution": [[0, 0], [1, 1], ...],
"statistics": {
"steps": 15,
"checkpoints": 1,
"iterations": 1234,
"computeTimeSeconds": 0.52,
"maxSpeed": 6
}
}
Ответ (ошибка)
{
"success": false,
"error": "No solution found within the iteration limit"
}
Особенности реализации
- Переиспользование кода - используется существующий класс
RaceTrackизProgramAStar.cs - Minimal API - современный подход .NET 8.0
- CORS - настроен для кросс-доменных запросов
- Логирование - вывод информации о запросах в консоль
- Обработка ошибок - корректная обработка и возврат ошибок
Тестирование
Сервис успешно протестирован:
✅ Health check endpoint работает
✅ Информационный endpoint отдаёт данные
✅ Решение простой карты (inline JSON) - успешно
✅ Решение карты из файла (simple-test.json) - успешно
Результаты тестов
// Health Check
{
"status": "healthy",
"version": "1.0.0",
"timestamp": "2025-10-20T18:04:18Z"
}
// Решение simple-test.json
{
"success": true,
"solution": [[0,0], [1,-2], [-1,1], [2,-1]],
"statistics": {
"steps": 4,
"checkpoints": 2,
"computeTimeSeconds": 0.0083
}
}
Интеграция с существующим кодом
Микросервис не изменяет существующий код:
ProgramAStar.csостаётся без измененийracing-astar.csprojдля CLI версии остаётся рабочим- Все существующие скрипты (
run-astar.sh,run-all-tests.sh) продолжают работать
Клиенты
Python
import requests
response = requests.post('http://localhost:5000/solve', json=map_data)
result = response.json()
JavaScript
const response = await fetch('http://localhost:5000/solve', {
method: 'POST',
body: JSON.stringify(mapData)
});
const result = await response.json();
cURL
curl -X POST http://localhost:5000/solve \
-H "Content-Type: application/json" \
-d @map.json
Развёртывание
Локально
./run-webservice.sh
Docker (опционально)
docker build -t racing-solver .
docker run -p 5000:5000 racing-solver
Cloud (Azure, AWS, GCP)
Проект готов к развёртыванию в облаке как стандартное ASP.NET Core приложение.
Следующие шаги (опционально)
- ✅ Базовый Web API - готово
- Добавить аутентификацию (API keys)
- Добавить rate limiting
- Добавить кэширование решений
- Добавить WebSocket для real-time обновлений
- Добавить Swagger/OpenAPI документацию
- Добавить Docker контейнеризацию
- Настроить CI/CD
Заключение
Микросервис готов к использованию! 🚀
- ✅ API работает корректно
- ✅ Документация создана
- ✅ Примеры клиентов подготовлены
- ✅ Тестовые скрипты работают
- ✅ Совместимость с существующим кодом сохранена
Используйте ./run-webservice.sh для запуска!