Федерация данных
Платформа предоставляет возможность использовать данные не только из хранилища данных, структуру которого вы описываете при создании модели данных, но и из других хранилищ данных, поддерживающих GraphQL. Таким образом, Платформа реализует федерацию данных — программный процесс объединения данных из различных источников и преобразования данных в общую модель с целью единообразного доступа к данным.
В модель федерации данных могут быть включены данные следующих сервисов:
сервисы Платформы:
- сервис доступа к хранилищу данных: обслуживает модели данных всех приложений, разработанных и развернутых в Платформе;
- сервис аутентификации: содержит информацию о пользователях, созданных в Платформе;
- сервис аудита: содержит информацию о событиях, зарегистрированных в Платформе;
внешние сервисы.
Например, в разрабатываемом приложении при включении в модель федерации данных сервиса аутентификации вы можете получить такие данные о пользователе, как фамилия и имя, адрес электронной почты, номер телефона.
Модель федерации данных описывается JSON-файлом с расширением mdfed
. Следующий пример демонстрирует содержимое файла модели федерации данных:
{
"sdl": "extend type LuckyAttribu tes_TShirt { FileStructure: [System_file] @delegate(schema: \"s113978\", path: \"system_file().items\")}"
"description": "конфигурация сервиса Федерации для storagedata",
"services": [
{
"name": "storagedata",
"description": "main dataservice",
"enabled": true,
"serviceType": "System",
"url": "",
"version": "",
"headers": "",
"sdl": "",
"ignoreRootTypes": false
}
]
}
Для добавления данных какого-либо сервиса в модель федерации данных вам нужно настроить файл с расширением mdfed
. Такой файл вам нужно создать в корневой папке системного проекта.
Вы настраиваете файл модели федерации данных в кодовом режиме специализированного редактора, ассоциированного с файлом с расширением mdfed
. При настройке файла вы указываете значения следующих ключей:
sdl
: декларирует связывание сущностей в GraphQL-схемах сервисов, включенных в федерацию данных, на языке Schema Definition Language (SDL). Более подробную информацию об объединении GraphQL-схем вы можете найти на веб-сайте ChilliCream Inc.services
: описывает сервисы, данные которых включаются в модель федерации данных.serviceType
: определяет тип сервиса. Этот ключ может иметь следующие значения:System
: используется для сервиса доступа к хранилищу данных;Platform
: используется для сервисов Платформы, кроме сервиса доступа к хранилищу данных;External
: используется для внешних сервисов.
name
: определяет имя сервиса, данные которого включаются в модель федерации данных. Этот ключ может иметь следующие значения:storagedata
: используется для добавления данных сервиса доступа к хранилищу данных с одним узлом.<имя пользовательского хранилища>
: используется для распределенного варианта организации хранилища данных.<имя сервиса Платформы согласно информации в Discovery>
: используется при добавлении данных сервисов Платформы, кроме сервиса доступа к хранилищу данных. Например, для добавления в модель федерации данных сервиса аутентификации используетсяidentity
, поскольку под этим именем сервис регистрируется в сервисе обнаружения сервисов.<имя внешнего сервиса>
: используется при добавлении данных внешних сервисов и содержит имя сервиса, который будет доступен для запросов к сервису федерации данных. Указанное имя сервиса будет отображаться в GraphQL-схеме данных.
description
: содержит произвольное описание сервиса.enabled
: устанавливает признак временного исключения сервиса из модели федерации данных при разработке или эксплуатации приложения, для которого настроена модель федерации данных. Может принимать значенияfalse
— сервис исключен илиtrue
— сервис используется. Для сервисаidentity
ключenabled
может иметь значение толькоtrue
.url
: URL-адрес точки доступа GraphQL для внешних сервисов. Например, значение этого ключа может быть следующим:"https://countries.trevorblades.com/graphql"
.headers
: используется для передачи данных авторизации во внешний сервис. Например, значение этого ключа может быть следующим:"{"authorization":"apikey x-hlsdh8r31209yh0gadl"}"
.ignoreRootTypes
: устанавливает признак исключения типов данных, описываемых GraphQL-схемой включаемого в федерацию данных сервиса, из объединенной GraphQL-схемы. Для сервиса доступа к хранилищу данных значение ключа всегда имеет значениеfalse
. Для других сервисов значение этого ключа может бытьfalse
илиtrue
. При значении этого ключаtrue
в ключеsdl
должны быть описаны типы данных включаемого в федерацию данных сервиса, которые должны использоваться в объединенной GraphQL-схеме.