01.06.2026 Технический разбор RU

Как собрать сервис автоматизации документов из трёх языков: практический разбор

Разбор архитектуры сервиса автоматизации дипломных приложений: Java API, Python-обработка Excel, XML-генерация и Docker Compose.

Никита Конкин

Проект Репозиторий Демо
Языковые версии: RU EN

Современные серверные системы всё чаще проектируются не как единое приложение, а как набор небольших независимых сервисов, написанных на разных языках и объединённых общим протоколом. В этом разборе на примере сервиса автоматизации приложений к дипломам показано, какие инженерные решения стоят за такой «полиглот»-архитектурой и почему она оправдана для прикладной задачи.

Задача

Исходная работа рутинна: взять Excel-ведомость с дисциплинами, часами и оценками, проверить её на ошибки и выгрузить в строгий XML-формат. Ручная обработка занимает много времени и провоцирует ошибки, поэтому процесс имеет смысл автоматизировать.

Задача разбита на два сценария:

  • сборка сводной таблицы с подсветкой проблемных ячеек;
  • генерация XML-документа по заданному шаблону.

Архитектура: почему три модуля, а не один

Система намеренно разделена на три независимых сервиса вместо одного монолитного приложения.

  • java-api — входной шлюз. Принимает HTTP-запросы и маршрутизирует задачи. Построен на лёгком фреймворке Takes: для шлюза достаточно минималистичного слоя, а не полновесного Spring.
  • python-engine — модуль обработки таблиц на FastAPI совместно с pandas и openpyxl. Читает Excel, выявляет несоответствия и выделяет проблемные ячейки цветом.
  • python-xml-engine — генератор XML по шаблону, также на FastAPI.

Такое разделение даёт практическую выгоду: каждый модуль можно дорабатывать и перезапускать отдельно. Python применяется там, где он силён в обработке данных, Java — в роли надёжного API-слоя. Каждый язык используется по своему прямому назначению.

Пример: подсветка ошибок в Excel

Наиболее показательный фрагмент — логика проверки ячеек. С помощью openpyxl сервис проходит по файлу и заливает цветом значения, которые выглядят подозрительно: пустые ячейки и символы ! и ?.

from openpyxl import load_workbook
from openpyxl.styles import PatternFill

fill = PatternFill(start_color="FFC7CE",
                   end_color="FFC7CE",
                   fill_type="solid")

for row in ws.iter_rows():
    for cell in row:
        if cell.value in (None, "", "!", "?"):
            cell.fill = fill   # отметили проблему

Приём простой, но именно он экономит часы ручной сверки: проверяющему достаточно просмотреть выделенные ячейки, а не весь файл.

Docker: запуск одной командой

Три сервиса означают три потенциальные точки сбоя при настройке окружения. Эту сложность снимает Docker Compose: все модули описаны в docker-compose.yml, работают в общей сети и запускаются одной командой.

docker-compose up --build

Подход исключает ситуацию «работает только на моей машине» и ручную установку Java и Python. Воспроизводимое окружение здесь — не удобство, а требование к прикладному сервису.

Выводы

  1. Крупную задачу полезно разбивать на независимые сервисы.
  2. Языки можно сочетать, подбирая инструмент под конкретную подзадачу.
  3. Связка pandas и openpyxl эффективна для работы с Excel.
  4. Docker Compose превращает разнородный стек в единый воспроизводимый проект.

Доступность

Проект открыт под лицензией MIT и доступен без регистрации и ограничений: можно запустить демонстрационную версию, развернуть сервис локально или изучить исходный код.

Теги

программирование backend python java docker микросервисы fastapi

Другие обновления по проекту