Platform v сбер что это

Обновлено: 24.09.2022

Всем привет! Многие IT-компании, да и мы в Сбере пытаемся принять на работу лучших сотрудников. Часто наши HR-специалисты отмечают, что у кандидата возникают дополнительные вопросы в части задач и технического стека платформенной команды в SBI (Sberbank International). Так вот, данная статья раскрывает немного деталей о SBI Platform Team, чтобы у кандидата сразу было представление о том, над чем мы работаем.

Я Артём Соковец, руковожу платформенной командой в Sberbank International. До этого был TeachLead&ProductOwner продукта Platform V Studio. Прошёл путь от специалиста по автоматизации тестирования до лидера SDETs, а в 2018 году сменил профиль на разработку и двигаюсь в этом направлении дальше с заплывом в смежные области — DevOps и MobileDev.

Давайте погрузимся в нашу специализацию. Сейчас есть три основных направления, о которых далее пойдёт речь:

Адаптация Platform V под дочерние банки в других странах.

Разработка новых бизнес-приложений с использованием Platform V.

Разработка интеграционного слоя с использованием Synapse.

Кому интересно узнать детали, прошу под .


1. Platform V в другие страны

Чтобы стандартизировать процесс разработки и уменьшить T2M (time to market) вывода новых продуктов и их TCO (total cost of ownership), в Сбере используется технологическая платформа Platform V. А что такое, собственно, платформа? Это готовая среда разработки, компоненты, инструменты и набор паттернов для создания и исполнения приложений любой сложности в облаке. Компоненты образуют 4 основных слоя платформы: фронтальные сервисы, сервисы аналитической платформы (т. н. «фабрика данных»), сервисы интеграционной платформы, сервисы для построения бэкенда. В плане функционала компоненты можно поделить на 8 основных групп:


На первый взгляд может показаться, что компонентный состав платформы Сбера повторяет те же Google App Engine или Cloud Foundry, предлагая инструменты автоматизации пайплайна CI/CD, журналирования, мониторинга, AI, работы с реляционными БД, вычислениями в памяти и интеграций.

В действительности всё несколько сложнее: Сбер включил в платформу целый ряд сервисов и библиотек для решения задач построения отказоустойчивых, масштабируемых, управляемых приложений. Именно с их помощью и реализуются паттерны, предлагаемые платформой, будь то скоростная прикладная репликация, application sharding или авторизация межмодульных вызовов в защищённом периметре.

Если кратко пробежаться, то, пожалуй, отмечу:

платформа позволяет строить вычисления на виртуалках, по модели container-as-a-service, в k8s, serverless, через оркестрацию процессов или систему бизнес-правил в BRMS;

из коробки доступен service mesh, управляемые событийные кластеры, поддерживается потоковая обработка событий через Flink;

есть готовый фреймворк для горизонтального масштабирования приклада по паттерну application sharding;

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

в аналитической платформе можно решать любые задачи современного BI, DW, рассказ о ней заслуживает отдельной статьи;

есть полноценный набор инструментов для организации CI + CDL + CDP, тестирования, своих репозиториев кода, докер-контейнеров и pro-шная IDE для разработки;

есть готовые сервисы для решения типовых задач — PIM, документооборот, справочники и т.п.

Более детальное описание продуктов вы можете найти здесь.

Взять и установить платформу, как она есть, в дочерний банк невозможно. У каждой организации есть свой IT-ландшафт, с которым необходимо выполнить интеграцию, свои бизнес-процессы и другие бизнес- и технические заморочки. Здесь вступаем в игру мы как платформенная команда. Требуется адаптировать платформу: заменить определённые сервисы/продукты, дополнить новыми сервисами, протестировать новый функционал, провести нагрузочное тестирование, убедиться, что мы ничего не сломали, разработать скрипты деплоя и итогом вывести всё в промышленную эксплуатацию.

Так, например, в связи с локальными особенностями авторизации и аутентификации в одном из дочерних банков нашей платформенной команде потребовалось создать отдельный сервис, который отвечает за управление сессиями клиента и интегрирован с существующими системами дочерних банков. Для сбора продуктового профиля клиента потребовалось полностью переработать существующий платформенный сервис, т. к. интеграционное взаимодействие с IT-системами и логика работы кардинально отличаются от реализации в головном Сбере.

Процесс адаптации платформы для использования в дочерних банках выстроен следующим образом: сначала мы проводим презентационную встречу, выявляем потребности заказчика, доносим ценность каждого платформенного дистрибутива (solutions), определяем состав сервисов для адаптации — и отправляемся в путь. IT-команда заказчика обычно обращается уже со сформированными потребностями и требованиями, включая юридические особенности работы.

Но наши задачи не заканчиваются только работой с Platform V, перейдём к следующему направлению.

2. Разработка новых бизнес-приложений с использованием Platform V

Кроме адаптации платформенных сервисов, есть и разработка бизнес-приложений с нуля. Например, продукт «Кобраузинг», когда клиенты могут продемонстрировать сотруднику контакт-центра экран своего устройства, то есть оператор дистанционно подключается и видит экран клиента в интернет-банке СберБизнес, СберБанке Онлайн и в других приложениях. Сервис не требует дополнительной установки программного обеспечения. Благодаря этому инструменту сотрудники банка своими глазами видят проблему клиента и сразу же приступают к устранению технических ошибок, помогают в навигации по приложению. Мы такой продукт разработали для коллег из Беларуси на базе нашей платформы. Ниже приведена краткая архитектурная схема.


Для наглядности процесса приведём схему последовательности вызовов сервисов для клиента:


Для оператора схему приводить не будем, она аналогичная.

Ещё одним примером бизнес-приложения с нуля является микросервис «Платежи», который реализует логику создания платежа более чем по 5600 видам услуг. При этом при добавлении нового вида платежа модификация исходного кода не требуется. За основу был взят микросервис, разработанный в Сбере. Он доработан с учётом новых программных сценариев и локальной специфики страны. Сервис развёрнут для мобильной и web-платформ и является для дочернего банка высокодоходным и business-critical. Мастер-система дочернего банка представляет собой собственный биллинговый модуль, поддерживающий интеграции как с основными государственными сервисами, рынком платёжных операторов, так и с конечными поставщиками услуг. Поиск платежа проводится пользователем через каталог, QR-код, штрих-код и по диплинк. Для пользователя доступны подписки на получение счетов по повторяющимся платежам с уведомлением, а также создание и управление автоплатежами. Реализован сервис оплаты административных штрафов с просмотром оригинальных протоколов в формате pdf и налоговых начислений с упрощённым для пользователя UI при оформлении платёжного поручения. Оплата мобильной связи реализована с использованием интеграции с MNP базой данных операторов СНГ, что позволяет снизить риск ошибки при оплате мобильной связи.

Мы гибко подходим к выбору методологии производства, широко используем и Scrum и Kanban. Проводим кросс-командное Code Review. Используем quality gates для проверки выпускаемых дистрибутивов. Стоить отметить, что помимо разработки бэка и фронта (web), также есть и мобильная разработка под Android и iOS, где мы используем модульный подход и мобильную платформу, в которую включены фреймворки дизайн-системы, сетевого слоя, утилит и backend driven UI-механизма, позволяющего безрелизно доставлять фичи до пользователей. Это всё позволяет нам максимально переиспользовать кодовую базу, создавать новые экраны и фичи, словно из кубиков лего.

Когда сервисы и приложения реализованы, приходит время подумать над маршрутизацией и оптимизацией коммуникаций. С этим нам поможет Service Mesh.

3. Разработка интеграционного слоя с использованием Synapse

В части интеграционного слоя мы используем продукт Platform V Synapse Service Mesh (далее — SSM). SSM является частью интеграционной платформы Synapse и обеспечивает интеграцию приложений с использованием подхода service mesh, или «сервисная сетка». Данный подход предполагает реализацию интеграционной логики на выделенных проксирующих компонентах (service proxy или сервисный прокси), развёрнутых в непосредственной близости от прикладного кода в режиме sidecar (контейнеры с проксирующим компонентом и прикладным кодом разворачиваются в одном pod). Подробное описание подхода service mesh можно найти по ссылке.

В целом Synapse — интеграционная платформа. Это решение на базе технологии service mesh уровня enterprise, то есть подходящее для больших корпораций. Для банка оно обеспечивает возможность отказа от решений вендоров и перехода на продукты, построенные с использованием open-source технологий. Synapse строится на базе Istio-решения, которое является одной из имплементаций архитектуры service mesh.


А ещё он поддерживает EDA (event-driven architecture).

Из преимуществ Synapse, пожалуй, отмечу:

по-человечески сопровождаемый дистрибутив istio без завязки на фичи от RedHat;

из коробки доступны инструменты предиктивного скейлинга и фейловера;

готовые компоненты для событийной обработки, в том числе с возможностью репликации событий между кластерами kafka и потоковой обработки через Flink;

при необходимости для всех интеграций можно активировать авторизацию взаимодействий.

Итого мы с вами рассмотрели три основных направления, над которыми работаем в платформенной команде. Наш стек:

Frontend — Redux, React, TypeScript;

DB — Apache Ignite, PostgresSQL, Oracle;

MQ — IMB MQ, Kafka;

CI/CD — Jenkins, Ansible, Docker, OpenShift, Kubernetes;

Environment — Jira, Adaptavista для тестирования, Nexus, Bitbucket.

На собеседованиях у нас есть блок live coding на 30 минут, где мы просим кандидата открыть любимую IDE или блокнот и решить задачку с нашими подсказками. Приведу пример фронтовой задачки:

Кому интересно попробовать себя в международном блоке Сбера в качестве разработчика, системного аналитика, DevOps-инженера и специалиста по функциональному тестированию — приходите к нам.

Сбер сделал Platform V для себя. Теперь платформа будет работать на вас: готовая среда разработки, компоненты и инструменты — все для быстрого создания и легкого масштабирования enterprise-приложений.

Облачная платформа
для enterprise-разработки

На базе Platform V разработчики могут быстро и легко собрать именно то бизнес-решение, которое станет уникальным конкурентным преимуществом компании.

Все для промышленной разработки

Platform V включает готовую среду разработки, компоненты и инструменты для создания облачных enterprise-приложений любой сложности и масштаба.

Продукты для разных технических задач

55+ продуктов Platform V охватывают все категории приложений и сервисов: frontend, backend, инструменты разработки, интеграцию, аналитику, AI.

Open Source + собственные решения

Платформа разработана на основе продуктов с открытым исходным кодом: Apache Ignite, Kubernetes, PostgreSQL, Istio, Flink, Akka, Activiti, ElasticSearch, Druid, Hadoop и др.

Плюсы разработки на Platform V:
быстро, надежно, безопасно

Экономия времени и бюджета

Разработчики не тратят время на рутинные задачи и могут фокусироваться на бизнес-логике. За счет коротких релизных циклов, единых стандартов и параллельной разработки time-to-market и total cost of ownership сокращаются в разы.

С 2019 года
в экосистеме
Сбера

Платформа — это и есть цифровая трансформация

Сегодня все бизнес-процессы — IT-процессы. Поэтому переход от неэффективной legacy-архитектуры к современному платформенному подходу неизбежен.

Legacy-архитектура: хаотично и неоптимально

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

Платформенный подход: системно и эффективно

Цифровая платформа необходима, чтобы полностью переосмыслить и привести в порядок IT-фундамент компании: стандартизировать архитектуру, унифицировать техстек, автоматизировать рутину. Единая технологическая стратегия особенно важна для экосистем, которые растут за счет интеграции разных бизнесов.

Обеспечивает
бесшовную
миграцию

Platform V обеспечивает бесшовную миграцию к современной архитектуре на всех уровнях IT-ландшафта.

Сбер сделал Platform V для себя. Теперь платформа будет работать на вас: готовая среда разработки, компоненты и инструменты — все для быстрого создания и легкого масштабирования enterprise-приложений.

Почему корпорации
выбирают Platform V?

Отечественное ПО

Усиленный Open Source

Проверенный High Load

Отказоустойчивость 99,99%

Экономия времени и бюджета

Масштабируемость

Platform V
«под капотом»
Сбера

Сбер совершил на Platform V свою цифровую трансформацию. 3000 agile-команд были обеспечены средой разработки, в 7 раз сократился срок вывода продуктов на рынок, в 2 раза снизилась стоимость транзакции.

Модели поставки платформы

Public Cloud

Private Cloud

Выделенные мощности в облаке

On-Premise

Локальное развертывание на ваших ресурсах

Продукты Platform V

Платформа включает компоненты для разработки, интеграции и эксплуатации, работы с данными и алгоритмами, построения инфраструктуры, обеспечения безопасности и других задач.

F unctions

Запуск произвольного кода в бессерверной модели исполнения

S ynapse

Cloud-native децентрализованная интеграционная платформа для замены любых КСШ

C orax

D ataGrid

Распределенная база данных для высокопроизводительных in-memory вычислений

P angolin

Реляционная СУБД на основе версии RDBMS PostgreSQL

D ataSpace

Облачное решение для хранения и управления данными приложения по модели DааS и BааS

SmartMarket —
все технологии Сбера здесь

Даже в консервативных индустриях Platform V позволит бесшовно мигрировать с legacy-архитектуры на современный платформенный IT-ландшафт и новый техстек.

Трансформация
сложных
бизнесов

Даже в консервативных индустриях Platform V позволит бесшовно мигрировать с legacy-архитектуры на современный платформенный IT-ландшафт и новый техстек.

Продукты

Ресурсы

© 2022 АО «СберТех» (является дочерним обществом ПАО «Сбербанк»).
Platform V — продукт ПАО «Сбербанк». Все права защищены.

Enterprise-приложения — корпоративные, бизнес-приложения. Open Source — ПО с открытым исходным кодом. High Load — высокие нагрузки, высоконагруженные приложения. Time to market — время от начала разработки идеи до выхода решения на рынок.

Agile — гибкая методология разработки IT-продуктов. Legacy — устаревший код, перешедший «по наследству» от прошлых разработчиков. Public, private, hybrid — типы облачных хранилищ данных: публичное, частное, гибридное.

image

У нас примерно три тысячи команд разработки, поэтому, очевидно, нам нужна была платформа, которая позволит быстро выпускать новые приложения, делать изменения в существующих, а так же обеспечивать надежное и безопасное исполнение созданных приложений. Спустя несколько поколений эволюции мы собрали вообще всё, что было разработано в банке, в единую систему. Можно, условно, постучать по API для доступа к любому нужному сервису — и получить кусочек конструктора. Сейчас мы даём доступ для разработки на этой Платформе.

Platform V в первую очередь полезна для разработки энтерпрайз-хайлоада, но это не значит, что ей не могут воспользоваться независимые разработчики. Это проект национального уровня, поэтому мы рассчитываем, что поможем компаниям, которым нужно автоматизировать бизнес-процессы с нуля либо перевести свою текущую автоматизацию на современный технологический стек. Первое, с чего мы начали, — это стали вести все новые разработки с использованием новых инструментов Платформы и инициировали проекты по переводу Legacy-приложений.

image

Платформа собрана на базе готовых опенсорсных решений. Мы берём какой-то наиболее зрелый опенсорс, коммитим свои изменения или создаём собственный plugin, не забывая отдавать ключевые фиксы в комьюнити. Цель — максимально переиспользовать поддерживаемый код. Большинство доработок и форков касаются поддержки для энтерпрайз-задач — средств обеспечения надёжности, мониторинга, кибербезопасности и самое главное нагрузки.

То есть у нас есть максимально открытый комбайн, который можно использовать для разработки и который будет поддерживаться далеко не только нами.

Что внутри

Используя Платформу, вы по факту работаете со всем тем пластом решений, на котором держится современный опенсорс. Платформа — это набор компонентов, набор инструментов, набор архитектурных шаблонов для построения приложений на всех слоях структуры Энтерпрайз-архитектуры. То есть, по сути, это комплексное решение для того, чтобы автоматизировать всё, чем пользуется любой большой энтерпрайз, да и любая другая компания. На Платформе можно делать фронтальные приложения. На Платформе можно делать бэкофисные приложения. Можно интегрировать. Можно включить свой Legacy-ландшафт в Платформу. И точно так же можно построить модели, аналитические витрины и так далее. Есть готовые компоненты, шаблонные структуры и шаблонные архитектуры.

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

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

image

Доступы

Часть сервисов доступна публично, но крупный энтерпрайз — это в первую очередь решения на базе частных облаков. Именно поэтому мы готовы ставить нашу Платформу в частном облаке как регион SberCloud, а в дополнение к этому предоставить обучение сотрудников эффективной работе с ней, в том числе подходам к миграции с Legacy-приложений. Всё, что касается безопасности, надёжности, сопровождения, всё это уже есть в Платформе. Плюс клиент сразу получает готовые решения по построению архитектуры, избавлению от единых точек отказа и работающие подходы к трансформации своего ландшафта. И все это от одного поставщика с гарантированным уровнем SLA.

Компоненты Платформы находятся или на территории заказчика, или в наших ЦОДах, при этом платформа предоставляется как услуга, а значит сразу обеспечивается полное соответствие отечественным стандартам в частности финансовой информации, персональных данных и так далее.

Уже сейчас два компонента платформы доступны на СмартМаркет. Они позволяют создать полноценный микросервис с хранением и обработкой бизнес логики в режими самообслуживания буквально за 15 минут. Заходите, регистрируйтесь, пробуйте бесплатно. Созданный микросервис можно использовать как в готовом приложении, так и в любом другом вашем собственном приложении. Раздел с документацией по Платформе.

Для организация мы предлагаем индивидуальные условия сотрудничества.
Более подробно на нашем сайте Platform V.

Компоненты

image

image

Больше деталей будет на конференции 20 мая — и техническая часть с разбором и примерами кода, и организационная для продактов, и больше про то, как начать работать с Платформой.


Микросервисы становятся стандартом для энтерпрайза. Это эффективный подход к построению архитектуры, но и у него есть свои минусы. Например, отсутствие функционала на старте проекта в сравнении с коробочными модульными версиями, сложности с отладкой и поддержанием целостности контура.

Меня зовут Виктор Бирюков, я главный руководитель IT-направления в СберТехе — компании, которая создаёт основные технологические решения для Сбера. В статье я расскажу, как с помощью PaaS-инструментов упростить и ускорить разработку микросервисов так, чтобы в конечном счёте на создание полноценного продукта у вас уходило не больше 15 минут.

У этой статьи будет продолжение. В этой части мы познакомимся с сервисом Platform V DataSpace и напишем frontend-приложение, используя DataSpace как сервис (Backend-as-a-Service). Во второй статье разберём Platform V Functions, напишем backend-приложение как облачную функцию и разместим наше frontend-приложение также как функцию (Function-as-a-Services).

Теперь обо всём по порядку.

О сервисах

Для разработки сервиса будем использовать продукты Platform V — технологической платформы Сбера.

Platform V создавалась как фундамент цифровой трансформации банка, а с 2021 года поставляется бизнесу и государству по модели PaaS. Всего на базе платформы более 60 инструментов для разработки. Но здесь речь пойдёт о двух, которые уже доступны разработчикам в SmartMarket, витрине IT-технологий Сбера. Это Platform V DataSpace и Platform V Functions.

Что будем разрабатывать

Чтобы наглядно показать, как работают платформенные сервисы, создадим небольшое приложение «Промоакция».


Архитектура приложения

В системе есть два вида пользователей: Администратор и Клиент. У них разные каналы для работы:

«Администратор» (Admin) работает с DataSpace через авторизованные запросы на API gateway, зная адрес сервиса, appKey (логин) и appSecret (пароль), далее ak/sk. Необходимая для работы статика приезжает посредством функции Function 1 Admin Frontend.

«Клиент» (Client) через общедоступный сервис вводит промокод и выбирает подарок. Воспользоваться промокодом можно только один раз. Необходимая для работы статика приезжает посредством функции Function 2 Client Frontend. В функции Function 3 Client Backend реализуем серверную логику обработки запросов от «Клиентов».

Frontend-приложение с помощью Platform V DataSpace

Platform V DataSpace — это облачный сервис для хранения и управления данными приложения. Позволяет создать на основе модели данных клиента слой доступа к data и за счёт этого ускорить процесс разработки приложений.

Как начать работу:

регистрируемся или входим по Сбер ID, можно через QR-код в приложении СберБанк Онлайн;

В созданном пространстве жмём «Создать проект», где выбираем Platform V DataSpace и переходим в визуальный редактор конструирования модели данных.

Ниже в разделе «Знакомство с DataSpace» я расскажу, как формировать модель данных предметной области вашего приложения и выпускать соответствующий сервис.

Но для наглядности можно уже сейчас загрузить в редактор готовую модель данных для приложения «Промоакция» model.xml и нажать кнопку «Выпустить». После выпуска сервиса в приложении можно начать работу в качестве администратора.

Сервис будет доступен по адресу, где в качестве хранилища выступит DataSpace. Чтобы начать работу, нужно авторизоваться: нажать кнопку «Login page» и указать данные авторизации. Адрес/логин/пароль будут доступны в настройках вашего проекта DataSpace: адрес проекта, app_key, app_secret соответственно.



Фактически, пройдя по ранее указанному адресу, вы уже воспользовались сервисом Platform V Functions — получили статику web-приложения, работающего напрямую с вашим DataSpace.

Более детально поговорим об этом во второй статье, посвящённой Functions. А пока продолжаем разбираться с тем, как написать frontend-приложение c помощью DataSpace.

Знакомство с Platform V DataSpace

Наша задача — с помощью DataSpace спроектировать модель предметной области приложения в визуальном редакторе. Подробнее о том, как работает инструмент, можно узнать из этого видео. Начать работу поможет документация или обучающий ролик.

После выпуска сервиса DataSpace можно работать с данными через GraphQL API, в том числе через конструктор в визуальном редакторе. Вот видеоинструкция, как это делать, а вот документация.

Подписание запросов (авторизация)

Делать такие запросы можно с помощью соответствующего Java Script SDK с возможностью формировать запросы вручную через визуальную форму.


Данные для подписи запроса можно найти в настройках проекта в SmartMarket: там доступны ak/sk + адрес сервиса для вызова.

Function 1 Admin Frontend

Давайте теперь перейдём к написанию frontend-приложения, где в качестве backend'а используется DataSpace.

Вооружимся следующим технологическим стеком:

GraphQL — язык запросов к серверной части (DataSpace);

GraphQL Code Generator (TypeScript) — очень полезная утилита для преобразования GraphQL-запросов в конструкции на TypeScript;

Apollo Client v3 — JS-библиотека для работы через GraphQL: кэширование, react-хуки и другие «печеньки»;

Ant Design — готовые экранные компоненты.

Собирать всё это будем при помощи Webpack.

Список выглядит внушительно, но я сразу оговорюсь: мы создаём простое приложение, структура и компоненты которого будут понятны даже человеку с базовыми техническими знаниями по программированию.

В этом заключается главная идея статьи: чтобы работать с моделью, необязательно быть матёрым frontend-разработчиком (я и сам таковым не являюсь). По той же причине в материале много ссылок на конкретные документации: они будут полезны тем, кто захочет детальнее разобраться в сути технологий. Например, по этой ссылке доступны все исходники приложения.

Разработка приложения

Из интересного в конфигурации сборки только настройки прокси у сервера разработки:

Таким образом мы обходим проверку запрета на CORS со стороны сервиса при работе через браузер в режиме локальной разработки.

Для корректной работы прокси-сервера необходимо в файле .env указать адрес вашего сервиса DataSpace:

Теперь переходим к написанию приложения.

В файле src/index.tsx ничего необычного: подключаем React, отрисовываем корневой компонент App.

Прежде чем начать работать с DataSpace, надо научить наш провайдер GraphQL-запросов правильно их подписывать. Для этого даём возможность пользователю ввести адрес DataSpace + ak/sk, сохраняем данные в localStorage:

Заполнив параметры, передаём их далее в AppProvider, где уже при помощи ранее представленного JavaScript SDK определяем правило подписания, после чего инициализируем ApolloClient:

Apollo Client нужен, чтобы упростить работу с сервисом DataSpace через GraphQL API. С одной стороны, он замечательно интегрируется с React через хуки (hooks), с другой — обеспечивает бесшовную интеграцию с GraphQL-сервером DataSpace, элегантно решая вопросы кэширования и нормализации данных на клиенте.


Вернёмся к нашему приложению «Промоакция».

В UI-консоли администратора необходимо обеспечить следующие возможности:

запрос списка компаний-спонсоров;

запрос списка подарков компании-спонсора;

Для написания соответствующих запросов воспользуемся GraphQL-конструктором внутри визуального редактора.

В примере ниже мы одним запросом создаём компанию-спонсора (GiftVendor) и два её первых подарка (Gift):

В верхней левой части представлен сам запрос, в левом нижнем углу — передаваемые в запрос параметры, справа — результат его выполнения

В верхней левой части представлен сам запрос, в левом нижнем углу — передаваемые в запрос параметры, справа — результат его выполнения

Давайте уделим внимание двум моментам:

Указывая ключ «SberBankAndTwoFirstGifts» в параметре idempotencePacketId в мутации packet, мы делаем этот запрос идемпотентным.

При повторном выполнении данного запроса (если первый был успешным) DataSpace вернёт результат выполнения, но не будет повторять саму операцию создания (изменения состояния БД).

Этот функционал DataSpace призван значительно упростить жизнь разработчику клиентской части, когда необходимо повысить надёжность взаимодействия с сервисом: можно не беспокоиться о лишних данных, делая повтор команды в случае, к примеру, получения ошибки таймаута выполнения при первоначальном вызове.

Также обратите внимание на лексему «ref:createGiftVendor», передаваемую в поле vendor создаваемых подарков: таким образом обеспечена связь между подарками и компанией-спонсором, создаваемой на первом шаге выполнения пакета.

Детальное описание формата GraphQL-запросов DataSpace доступно в документации.

Для нашего же приложения понадобится набор совсем простых GraphQL-запросов:

searchGiftVendor createGiftVendor deleteGiftVendor searchGift createGift deleteGift

searchGiftVendor createGiftVendor deleteGiftVendor searchGift createGift deleteGift

Зафиксируем данные запросы в файле src/graphql/requests.graphql.

Нам также понадобится GraphQL-схема API DataSpace, которая доступна в конструкторе визуального редактора.

Справа в закладке SCHEMA выбираем DOWNLOAD → SDL:


Выгруженный файл поместим в корневую папку проекта: schema.graphql.

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

В файле package.json у нас подключены необходимые JS-библиотеки для этапа разработки и прописана команда генерации в разделе scripts:

Конфигурируем правила генерации в codegen.yml:

Всё готово для генерации. Запускаем из консоли соответствующую команду «npm run codegen»:


Генерация прошла успешно, без ошибок. Давайте посмотрим на результаты: src/ generate/graphql- frontend.ts.

Остановимся подробнее на некоторых конструкциях в этом файле. В первую очередь теперь у нас есть Typescript-типы, определяющие ранее заведённые в DataSpace сущности. В их числе ряд служебных полей:

aggVersion: версия агрегата, которую можно использовать для формирования транзакции между получением и сохранением данных в БД (оптимистическая блокировка);

lastChangeDate: дата/время последнего изменения экземпляра сущности;

type: тип сущности (может быть полезен в случае использования наследования в модели данных);

aggregateRoot: ID корня агрегата.

Например, тип для сущности Gift:

Также отражено определённое нами ранее перечисление GiftKind:

В дальнейшем мы воспользуемся данным перечислением при написании формы создания подарков.

В конце файла видим сгенерированный ряд хуков, соответствующих нашим GraphQL-запросам (src/ graphql/requests.graphql).

Например, запросы searchGift, createGift, deleteGift представляют следующие функции

Давайте более детально посмотрим на useCreateGiftMutation:

CreateGiftMutationVariables определяют сигнатуру входящих параметров:

CreateGiftMutation определяет сигнатуру возвращаемого результата:

Итак, на данном этапе мы:

определили набор GraphQL-запросов, которые нам понадобятся для работы;

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

Разработка прикладных форм

Форма отображения/добавления/удаления компаний-спонсоров реализована в соответствующем компоненте: src/components/GiftVendorList.tsx.

Она отрисовывает список доступных компаний в виде вкладок (Tabs):


Кнопка «Add new gift vendor» позволяет заводить новые компании-спонсоры, кнопка Delete gift vendor» удаляет компанию.


На что важно обратить внимание:

Для получения списка компаний-спонсоров используется хук useSearchGiftVendorQuery. Он был сгенерирован на основе запроса SearchGiftVendor, зафиксированного в файле src/graphql/ requests.graphql.

Из результата выполнения хука деструктуризируем параметры data, loading, error. Чуть ниже по коду обрабатываем соответствующим образом значения loading, error

Сам GraphQL-запрос SearchGiftVendor нам вернёт JSON-структуру следующего вида:

Так как в дальнейшем для отрисовки вкладок с компаниями нам нужен только сам массив компаний, определим для этого отдельную константу giftVendorList, ссылающуюся на массив elems возвращаемой запросом конструкции.

Вся прелесть такого подхода заключается в том, что мы работаем с данными через типизированную структуру, которая основывается на модели предметной области приложения, описанной ранее в DataSpace.

Более подробно про работу с мутациями в Apollo можно почитать здесь.

Далее при помощи функции getTabs, принимающей на вход параметром список полученных компаний, отрисовываем вкладки.

Давайте теперь разберёмся с добавлением/удалением компаний:

Вытаскиваем из соответствующих хуков функции — мутации добавления/удаления. В модальной форме на кнопку «Ок» вешаем соответствующий обработчик, где делаем вызов мутации, передавая два параметра:

Первый — variables — набор параметров, заполняемых пользователем на форме. В нашем случае имя компании-спонсора.

Второй, update, позволяет передать функцию, которая в нашем случае обновит кэш Apollo-клиента (store) для запроса SearchGiftVendor, добавив туда результат (result) GraphQL-запроса createGiftVendor.

Такой подход позволяет обновлять списочные формы (в нашем случае список вкладок), не делая дополнительного запроса на сервер. Более детально про этот механизм можно почитать тут.

С удалением ситуация аналогичная: только здесь обработчик не добавляет элемент, а фильтрует массив, исключая ранее удалённый элемент.

Функционал для заведения подарков в рамках конкретной компании-споносора аналогичен заведению самих компаний: src/components/GiftList.tsx.

Вместо компонента Tabs используется компонент Table38 в самом простом его варианте. Что важно:

В хук useSearchGiftQuery передаётся через переменную cond соответствующего GraphQL-запроса условие фильтрации: "it.vendor.$id == '" + vendorId + "'". То есть запрашиваются подарки только конкретной компании-спонсора, на вкладке которой мы сейчас находимся.

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

Это пример запроса всех спонсоров, начинающихся с лексемы 'Sber' и имеющих хотя бы один подарок. У таких компаний нам будут интересны только подарки, которые создавались/менялись в течение суток после создания компании-родителя.

Детальное описание всех возможностей данного синтаксиса фильтрации: documentation/39expressions.md.

Обратите внимание на возможности сортировки и постраничной вычитки запросов. Подробная информация в документации: documentation/graphql.md

Мы написали приложение для фиксации компаний-спонсоров и выпускаемых ими подарков. Его можно развивать и дальше: добавлять формы для фиксаций серий и выдаваемых в рамках акций ваучеров. С готовыми сущностями в модели и сервисом для работы с ними это не займёт много времени. Достаточно будет зафиксировать новые запросы по аналогии с запросами к спонсорам и их подаркам src/ graphql/requests.graphql и отразить новые формы по аналогии с ранее рассмотренными компонентами src/components/GiftVendorList.tsx и src/components/GiftList.tsx.

Во второй статье будем разбирать Functions — платформенный сервис, который позволяет создавать приложения в парадигме serverless, реализуя архитектурный шаблон Function-as-a-Services. А пока — спасибо за внимание и до встречи!

Автор статьи

Куприянов Денис Юрьевич

Куприянов Денис Юрьевич

Юрист частного права

Страница автора

Читайте также: