Перейти к содержимому
Все проекты

GovTech · Интеграции

e.gov.tm — портал государственных услуг

Единый портал государственных услуг Туркменистана. Я был одним из двух backend-разработчиков платформы, на которой к началу 2024 года работало более 40 онлайн-услуг.

Моя роль
Один из двух backend-разработчиков (июнь 2022 – декабрь 2023). Работал над backend на Go и PostgreSQL, интеграциями с государственными и платёжными сервисами и развитием платформы.
Стек
  • Go
  • PostgreSQL

Задача

Каждая онлайн-услуга портала зависит от внешних систем — государственных ведомств и платёжных провайдеров, у каждого свой протокол, формат данных и уровень доступности. Платформе нужно было постоянно добавлять новые услуги так, чтобы каждая интеграция не превращалась в уникальный частный случай.

Архитектура

e.gov.tm — портал государственных услуг — Схема архитектурыWeb portalcitizensGo backendintegrationsGovernmentagency systemsPaymentspayment providersPostgreSQLapplications
Граждане пользуются веб-порталом, который обращается к backend на Go. Backend хранит заявления и их статусы в PostgreSQL и взаимодействует с системами государственных ведомств и платёжными провайдерами через отдельные интеграции.

Ключевые решения

  1. 01Каждая внешняя система — за своим интеграционным модулем

    Почему
    Системы ведомств и платёжных провайдеров различаются протоколами и надёжностью. Изоляция каждой из них за единым внутренним интерфейсом — со своими таймаутами, обработкой ошибок и логированием — отделяет бизнес-логику услуг от деталей провайдеров и делает добавление новой услуги рутинной задачей.
    Компромисс
    Дополнительный слой абстракции; специфичные возможности провайдеров иногда требуют отдельной обработки.
  2. 02Изменения статуса оплаты — внутри транзакций

    Почему
    Callback-и от платёжных систем могут приходить с задержкой, дважды или не по порядку. Транзакционная запись переходов состояний в PostgreSQL сохраняет согласованность статуса заявления и статуса оплаты.
    Компромисс
    Более строгую модель статусов нужно поддерживать, а для крайних случаев всё равно нужна сверка.
  3. 03Go для сервисного слоя

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

Что я сделал

  • Backend-разработка на Go и PostgreSQL
  • Интеграция сервисов государственных ведомств
  • Интеграция платёжных сервисов
  • Развитие платформы до 40+ онлайн-услуг к началу 2024 года

В цифрах

онлайн-услуг на платформе к началу 2024 года
40+
backend-разработчика в команде, включая меня
2