# API расписания РТУ МИРЭА

> REST API расписания: преобразование iCal в JSON, поиск и OpenAPI.

Статус: Open source.

![API расписания РТУ МИРЭА](https://vasilev-aleksandr.ru/mirea-schedule-api.jpg)


## О проекте

- **Формат:** Open source
- **Сфера:** Образовательные сервисы
- **Роль:** Проектирование и разработка API



## Контекст

Университет публикует расписание в iCal: формат подходит календарным приложениям, но неудобен для ботов и веб-сервисов. Клиентам нужен структурированный JSON, поиск групп, преподавателей и кабинетов, а также понятная работа с учебной неделей.

## Задача

Собрать единый REST API, который получает исходное расписание, нормализует события и отдаёт их по стабильным методам с документацией и воспроизводимым Docker-запуском.

- загрузка и разбор iCal-источника
- нормализация расписания в JSON
- поиск групп, преподавателей и кабинетов
- расписание по идентификатору и названию
- определение номера текущей недели
- TTL-кэширование, OpenAPI и Docker

## Проблема

Календарные файлы университета неудобны для приложений и ботов.

## Решение

Сервис разбирает iCal, отдаёт JSON и предоставляет поиск и OpenAPI-документацию.

## Как решал задачу

- **iCal как внешний источник, JSON как контракт.** Парсер изолирует особенности календарного файла и преобразует события в стабильную структуру API. Клиентам не нужно разбирать iCal самостоятельно. Результат: Боты и приложения получают одинаковые нормализованные данные независимо от исходного представления.
- **Два способа получить расписание.** API поддерживает точный запрос по идентификатору и поиск по названию. Отдельный метод поиска помогает сначала найти группу, преподавателя или кабинет. Результат: Интеграция подходит и для сохранённых идентификаторов, и для пользовательского поиска.
- **Кэш между источником и клиентами.** Полученные и разобранные данные сохраняются с TTL. Частые клиентские запросы не требуют каждый раз обращаться к университетскому источнику и повторно разбирать файл. Результат: Ответы выдаются быстрее, а зависимость от доступности внешнего источника уменьшается.
- **Самодокументируемый запуск.** Контракт опубликован через OpenAPI, а сервис упакован для запуска в Docker. Методы и формат ответа можно проверить до подключения клиентского приложения. Результат: API проще развернуть, исследовать и подключить к новому потребителю.



## Результат

Публичный API стал единой точкой доступа к расписанию.

## Метрики

- Отдельные метрики не опубликованы.



## Технологии

- Python
- REST API
- iCal
- OpenAPI
- Docker

## Материалы

[Открыть дополнительные материалы](https://profi.ru/profile/VasilyevAA210/?photoId=32987432)

## Связанные услуги

- [API и интеграции](https://vasilev-aleksandr.ru/services/api-integrations/index.md)

## Следующий кейс

[dotcd](https://vasilev-aleksandr.ru/cases/dotcd/index.md)


## Есть похожая задача?

Опишите исходный процесс и результат, который хотите получить.

[Обсудить похожую задачу](https://t.me/wyndace)
