Платформа 3V/DataManager/Описание модели настроек DataManager: различия между версиями

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
(Полностью удалено содержимое страницы)
Метка: очистка
 
Строка 1: Строка 1:
{{DISPLAYTITLE: Описание модели настроек DataManager}}
 
Модель Json разделена на две части - '''Source''' (источник данных) и '''Destination''' (приёмник данных)
 
  
== Источник данных (Source) ==
 
=== Дискриминатор ===
 
discriminator - дискриминатор (тип данных - string)
 
 
* '''UrlDataManagerSource''' - в случае, если источник данных ''ссылка на ресурс''
 
Если источник данных - ''ссылка'', то в SOURCE необходимо указать '''Uri, Credentials, Headers''':
 
<syntaxhighlight lang="JSON" line>
 
"Source": {
 
        "discriminator": "UrlDataManagerSource",
 
        "Uri": "",
 
            "Credentials": "",
 
            "Headers": ""
 
      },
 
</syntaxhighlight> 
 
* '''ConstantDataManagerSource''' - если источник данных ''файл''
 
Если источник данных - ''файл'', то в SOURCE достаточно прописать только дискриминатор:
 
<syntaxhighlight lang="JSON" line>
 
"Source": {
 
            "discriminator": "ConstantDataManagerSource"
 
          },
 
</syntaxhighlight>
 
 
=== Унифицированный идентификатор ресурса ===
 
Uri - унифицированный идентификатор ресурса
 
 
DataManager поддерживает следующие источники:
 
* Postgres
 
* Любой get/post запрос
 
ВАЖНО: необходимо, чтобы запрос, прописанный в Uri возвращал данные в '''формате json'''
 
 
{| class="wikitable"
 
|-
 
! Стенд !! Пример !! Пояснение
 
|-
 
| finance || <syntaxhighlight lang="JSON" line>
 
"Source": {
 
            "discriminator": "UrlDataManagerSource",
 
            "Uri": "https://fmpcloud.io/api/v3/symbol/available-indexes?apikey=887f267b885bd2384c2b3ef0bfbee3c9"
 
          },
 
</syntaxhighlight>
 
|| Если перейти по ссылке, то данные представляются в json-формате
 
|-
 
| double.dev || <syntaxhighlight lang="JSON" line>
 
"Source": {
 
            "discriminator": "UrlDataManagerSource",
 
            "Uri": "http://filestorage/api/File/e0e88d78-339e-496c-baa8-d5fb18848692"
 
          },
 
</syntaxhighlight>
 
|| Ссылка на get-запрос файлового хранилища
 
''(как получить ссылку на файл из файлового хранилища см ниже)''
 
|-
 
| corp-portal || <syntaxhighlight lang="JSON" line>
 
"Source": {
 
            "discriminator": "UrlDataManagerSource",
 
            "Uri": "https://bs-extension.bright-soft.org/atlassian-adapter/Jira/Projects"
 
          },
 
</syntaxhighlight>
 
|| Ссылка на get-запрос сервиса atlassian-adapter
 
|}
 
 
Для того, чтобы получить ссылку на файл, необходимо сделать следующее:
 
# Получить идентификатор файла с помощью [[Платформа 3V/Справочник/Задание атрибутов в справочнике/Вычислимые значения файла|вычислимого атрибута]]
 
# Перейти в файловое хранилище проекта (filestorage) и найти get-метод [https://3v.3v-group.net/filestorage/swagger/index.html#/File/File_GetFile File/{fileid}]
 
# Заполнить параметр вызова "fileid" найденным в первом пункте значением (некоторые стенды дополнительно в качестве параметра запуска принимают тенант), запустить метод
 
# После запуска метода скопировать Request URL, оставить строку в формате "http://filestorage/api/File/НАБОР_ЦИФР" (набор цифр, в данном случае - ''fileid'')
 
 
''В случае, если данные предоставляются не из файлового хранилища, Request URL следует оставить без изменений''
 
 
=== Параметры авторизации ===
 
Credentials - параметры авторизации
 
 
На данный момент, для DataManager включена авторизация, без авторизации сервис работать не будет
 
Credentials содержит следующие настройки:
 
{| class="wikitable"
 
|-
 
! Поле !! Описание !! Тип
 
|-
 
| discriminator ||
 
* ConfidentialClientAuthenticationSettingsDto - аутентификация конфиденциального клиента
 
* PasswordAuthenticationSettingsDto - аутентификация с помощью логина и пароля
 
|| string (строка)
 
|-
 
| TokenRequestUrl || Ссылка из адресной строки перед авторизацией в приложении || string (строка)
 
|-
 
| ClientId || Идентификатор клиента, который берется из keycloakа || string (строка)
 
|-
 
| ClientSecret || Keycloak - realm - clients - раздел "Credentials" - поле "Secret" || string (строка)
 
|-
 
| UserName || Логин для авторизации на стенде ''(данное поле добавляется для дискриминатора '''"PasswordAuthenticationSettingsDto"''''') || string (строка)
 
|-
 
| Password || Пароль для авторизации на стенде''(данное поле добавляется для дискриминатора '''"PasswordAuthenticationSettingsDto"''''') || string (строка)
 
|}
 
 
===== Discriminator =====
 
Настройка для Credentials для авторизации по логину/паролю:
 
<syntaxhighlight lang="JSON" line>
 
"Credentials": {
 
                "discriminator": "PasswordAuthenticationSettingsDto",
 
                "TokenRequestUrl": "https://3v.3v-group.net/auth/realms/trivium/protocol/openid-connect/token",
 
                "clientId": "clientid",
 
                "clientSecret": "5gq428rz-wpx1-5751-b0r1-h4x5wb9m5210",
 
                "UserName": "username",
 
                "Password": "password"
 
              }
 
</syntaxhighlight>
 
 
Настройка для Credentials для аутентификации конфиденциального клиента:
 
<syntaxhighlight lang="JSON" line>
 
"Credentials": {
 
                "discriminator": "ConfidentialClientAuthenticationSettingsDto",
 
                "TokenRequestUrl": "https://smart-id-test.mos.ru/iam/auth/realms/dev/protocol/openid-connect/token",
 
                "clientId": "clientid",
 
                "clientSecret": "5gq428rz-wpx1-5751-b0r1-h4x5wb9m5210"
 
              }
 
</syntaxhighlight>
 
 
===== TokenRequestUrl =====
 
Для TokenRequestUrl ссылка берется из адресной строки перед авторизацией в приложении (берется из страницы перед авторизацией из источника). '''Копируем ссылку из адресной строки до "openid-connect/" и добавляем "token"'''
 
 
''ПРИМЕР'':
 
* Ссылка для корпоративного портала перед авторизацией пользователя выглядит следующим образом - "https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/auth?response_type=code&client_id=corp-engine&state=WFl3MDBGeS52TXJjYkl5bmFDeFBoSi5QU1VYUm1EYm1-ckJOSXBPTnFiTVhD&redirect_uri=https%3A%2F%2Fcorp-portal.x-service.online%2Fapp%2F&scope=openid%20profile&code_challenge=A5_wW-7WsXwMBgHPXxUiJ5Wh6Cwvzs83bzOcW4fU8jQ&code_challenge_method=S256&ui_locales=ru"
 
* Для TokenRequestUrl необходима только '''https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/'''
 
* К скопированной части ссылки добавляем "token"
 
* Получаем необходимый запрос для авторизации для DataManager - '''https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/token''')
 
 
===== ClientId =====
 
Чтобы получить clientId необходимо:
 
* Перейти в keycloak
 
* Выбрать проект (realm)
 
* Перейти в раздел "clients"
 
* Выбрать необходимого клиента (для DataManager может быть настроен клиент, который в название содержит "datamanager" - его можно использовать для дискриминатора "ConfidentialClientAuthenticationSettingsDto", так же можно использовать "corp-engine", но уже для парольной авторизации, то есть для дискриминатора "PasswordAuthenticationSettingsDto")
 
 
===== ClientSecret =====
 
Настройка "clientSecret" - опциональная!!!
 
Если все-таки необходима данная настройка, то, как и в случае с clientId:
 
* Перейти в keycloak
 
* Выбрать проект (realm)
 
* Перейти в раздел "clients"
 
* Выбрать необходимого клиента
 
* Перейти в раздел "Credentials"
 
* Найти поле "Sectet" и скопировать строку
 
 
=== Токен доступа ===
 
Headers - токен доступа
 
 
При обращении к сервисам (источникам данных), необходимо передавать токен:
 
В поле "secret" приходит определение того, кто может работать
 
 
'''1 вариант - secret'''
 
 
<syntaxhighlight lang="JSON" line>
 
"Headers": {
 
            "secret": "Ke2QSqWkX4FgyKnx6RYnYFLyqA2MHTq9Jvdk""
 
          },
 
</syntaxhighlight>
 
В поле "secret" приходит определение того, кто может работать
 
 
''В некоторых проектах используется настройка "namespace", так как определение тенанта идет через заголовок, то есть когда авторизуешься в определенном приложении и выбираешь тенант - веб выбранный тенант сам вставляет во все запросы''
 
 
<syntaxhighlight lang="JSON" line>
 
"Headers": {
 
            "namespace": "landscaping""
 
          },
 
</syntaxhighlight>
 
 
'''2 вариант - Bearer <token>'''
 
 
Можно задать токен, но надо понимать, что Bearer токен имеет ограниченное время жизни. Токен берем из средств разработчика (f12 или ctrl+f12)
 
<syntaxhighlight lang="JSON" line>
 
"Headers": {
 
            "Authorization": "Bearer <token>"
 
          },
 
</syntaxhighlight>
 
 
== Приемник данных (Destination) ==
 
{| class="wikitable"
 
|-
 
! Название полей !! Описание !! Тип
 
|-
 
| discriminator || Дискриминатор:
 
* Если приемник - справочник, то "DictionaryDataOptions"
 
* Если приемник - показатель, то "IndicatorDataOption"
 
|| Текст ячейки
 
|-
 
| SaveMode ||
 
* DictionaryClient - запись через апи справочников (стоит по умолчанию, можно не прописывать)
 
* Postgres - запись через БД (в данном случае следует указать)
 
|| string (строка)
 
|-
 
| mapperOptions[] || Настройки маппинга || string (строка)
 
|-
 
| expressions[] || Настройки выражений (при необходимости) || коллекция полей
 
|-
 
| clearData || Очистить данные (для справочника '''(если дискриминатор - DictionaryDataOptions)''' добавлена настройка для частичной очистки данных) || boolean (логический тип)
 
|-
 
| dictionaryIdent || Код справочника-приемника данных || string (строка)
 
|}
 
'''Шаблон для Destination:'''
 
<syntaxhighlight lang="JSON" line>
 
"Destination": {
 
                "discriminator": "",
 
                "SaveMode": "Postgres",
 
                "mapperOptions": [ {}, {}],
 
                "expressions": [{}],
 
                "clearData": false,
 
                "dictionaryIdent": ""
 
              }
 
</syntaxhighlight>
 
 
=== Настройки маппинга ===
 
Все настройки маппинга записываются в поле mapperOptions
 
 
Количество столбцов источника данных, должны соответствовать количеству столбцов приемника данных
 
{| class="wikitable"
 
|-
 
! Название поля !! Описание !! Тип
 
|-
 
| propertyName || Наименование данных из источника || string (строка)
 
|-
 
| filedName || Название столбца-приемника || string (строка)
 
|-
 
| dataType || Тип столбца-приемника
 
'''(тип атрибута-источника и атрибута-приемника должен совпадать)'''
 
|| string (строка)
 
|-
 
| isPrimary || Первичный ключ (обычно первичным ключом является столбец с уникальными значениями, то есть идентификатор) || boolean (логический тип)
 
|-
 
| ExpressionId || Идентификатор выражения (необязательно, только если для данных требуется выражение) || string (строка)
 
|-
 
| discriminator || Дискриминатор (MapperOption) || string (строка)
 
|}
 
'''Шаблон для mapperOptions:'''
 
<syntaxhighlight lang="JSON" line>
 
"mapperOptions": [
 
                  {
 
                    "propertyName": "",
 
                    "filedName": "",
 
                    "dataType": "",
 
                    "isPrimary": true,
 
                    "discriminator":"MapperOption"
 
                  },
 
                  {
 
                    "propertyName": "",
 
                    "filedName": "",
 
                    "dataType": "",
 
                    "isPrimary": false,
 
                    "discriminator":"MapperOption",
 
                    "ExpressionId": 1
 
                  },
 
                ]
 
</syntaxhighlight>
 
 
=== Настройки выражений ===
 
{| class="wikitable"
 
|-
 
! Название поля!! Описание !! Тип
 
|-
 
| Id || Идентификатор выражения || integer (целое число)
 
|-
 
| Expression || Условие для выражения || string (строка)
 
|-
 
| Variables || Переменные, которые используются в выражении || string (строка)
 
|}
 
'''Шаблон для выражений:'''
 
<syntaxhighlight lang="JSON" line>
 
"expressions":[
 
                {
 
                  "Id": 1,     
 
                  "Expression": "",
 
                  "Variables": {"1": "", "2": ""}
 
                }         
 
              ]
 
</syntaxhighlight>
 

Текущая версия на 04:36, 12 декабря 2022