Платформа 3V/DataManager/Источник данных: различия между версиями
Il.iashin (обсуждение | вклад) |
|||
(не показано 10 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Как настроить источник данных для DataManager}} | {{DISPLAYTITLE: Как настроить источник данных для DataManager}} | ||
− | Источник данных (Source) - ОТКУДА БЕРУТСЯ САМИ ДАННЫЕ. | + | '''Источник данных (Source)''' - ОТКУДА БЕРУТСЯ САМИ ДАННЫЕ. |
+ | |||
Чтобы настроить источник нужно знать, через какие параметры авторизации (учетка/токены) доступны данные для выгрузки. | Чтобы настроить источник нужно знать, через какие параметры авторизации (учетка/токены) доступны данные для выгрузки. | ||
+ | |||
''Источник состоит из:'' | ''Источник состоит из:'' | ||
* Discriminator - дискриминатор | * Discriminator - дискриминатор | ||
Строка 10: | Строка 12: | ||
discriminator - дискриминатор (тип данных - string) | discriminator - дискриминатор (тип данных - string) | ||
− | * '''UrlDataManagerSource''' - в случае, если источник данных ''ссылка на ресурс'' | + | * '''UrlDataManagerSource''' - в случае, если источник данных ''ссылка на ресурс/запрос'' |
Если источник данных - ''ссылка'', то в SOURCE необходимо указать '''Uri, Credentials, Headers''': | Если источник данных - ''ссылка'', то в SOURCE необходимо указать '''Uri, Credentials, Headers''': | ||
<syntaxhighlight lang="JSON" line> | <syntaxhighlight lang="JSON" line> | ||
Строка 40: | Строка 42: | ||
! Стенд !! Пример !! Пояснение | ! Стенд !! Пример !! Пояснение | ||
|- | |- | ||
− | | | + | | stand 1|| <syntaxhighlight lang="JSON" line> |
"Source": { | "Source": { | ||
"discriminator": "UrlDataManagerSource", | "discriminator": "UrlDataManagerSource", | ||
− | "Uri": "https:// | + | "Uri": "https://URL_BASE/api/v3/symbol/available-indexes?apikey=887f267b885bd2384c2b3ef0bfbee3c9" |
}, | }, | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| Если перейти по ссылке, то данные представляются в json-формате | || Если перейти по ссылке, то данные представляются в json-формате | ||
|- | |- | ||
− | | | + | | stand 2 || <syntaxhighlight lang="JSON" line> |
"Source": { | "Source": { | ||
"discriminator": "UrlDataManagerSource", | "discriminator": "UrlDataManagerSource", | ||
Строка 55: | Строка 57: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|| Ссылка на get-запрос файлового хранилища | || Ссылка на get-запрос файлового хранилища | ||
− | |||
|- | |- | ||
− | | | + | | stand 3 || <syntaxhighlight lang="JSON" line> |
"Source": { | "Source": { | ||
"discriminator": "UrlDataManagerSource", | "discriminator": "UrlDataManagerSource", | ||
− | "Uri": "https:// | + | "Uri": "https://URL_BASE/adapter" |
}, | }, | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | || Ссылка на get-запрос сервиса | + | || Ссылка на get-запрос сервиса adapter |
|} | |} | ||
− | Для того, чтобы получить ссылку на | + | Для того, чтобы получить ссылку на GET/POST запрос, необходимо сделать следующее: |
− | # | + | # Перейти в swagger на нужный метод, благодаря которому будут доступны данные для загрузки через DM |
− | # | + | # При необходимости ввести входные параметры (если таковы имеются) |
− | # | + | # Нажать "Execute" |
− | # | + | # Скопировать ссылку из '''"Request URL"''' |
+ | |||
+ | [[Файл:URI.gif|700px]] | ||
− | |||
− | |||
=== Параметры авторизации === | === Параметры авторизации === | ||
Credentials - параметры авторизации | Credentials - параметры авторизации | ||
− | На данный момент, для DataManager включена авторизация, без авторизации сервис работать не будет | + | |
+ | '''На данный момент, для DataManager включена авторизация, без авторизации сервис работать не будет''' | ||
+ | |||
Credentials содержит следующие настройки: | Credentials содержит следующие настройки: | ||
{| class="wikitable" | {| class="wikitable" | ||
Строка 91: | Строка 94: | ||
| ClientId || Идентификатор клиента, который берется из keycloakа || string (строка) | | ClientId || Идентификатор клиента, который берется из keycloakа || string (строка) | ||
|- | |- | ||
− | | ClientSecret || Keycloak - realm - clients - раздел "Credentials" - поле "Secret" || string (строка) | + | | ClientSecret || Keycloak -> realm -> clients -> раздел "Credentials" -> поле "Secret" || string (строка) |
|- | |- | ||
| UserName || Логин для авторизации на стенде ''(данное поле добавляется для дискриминатора '''"PasswordAuthenticationSettingsDto"''''') || string (строка) | | UserName || Логин для авторизации на стенде ''(данное поле добавляется для дискриминатора '''"PasswordAuthenticationSettingsDto"''''') || string (строка) | ||
Строка 103: | Строка 106: | ||
"Credentials": { | "Credentials": { | ||
"discriminator": "PasswordAuthenticationSettingsDto", | "discriminator": "PasswordAuthenticationSettingsDto", | ||
− | "TokenRequestUrl": "https:// | + | "TokenRequestUrl": "https://URL_BASE/auth/realms/REALM_NAME/protocol/openid-connect/token", |
"clientId": "clientid", | "clientId": "clientid", | ||
− | "clientSecret": " | + | "clientSecret": "SECRET_STRING", |
"UserName": "username", | "UserName": "username", | ||
"Password": "password" | "Password": "password" | ||
Строка 115: | Строка 118: | ||
"Credentials": { | "Credentials": { | ||
"discriminator": "ConfidentialClientAuthenticationSettingsDto", | "discriminator": "ConfidentialClientAuthenticationSettingsDto", | ||
− | "TokenRequestUrl": "https:// | + | "TokenRequestUrl": "https://URL_BASE/iam/auth/realms/REALM_NAME/protocol/openid-connect/token", |
"clientId": "clientid", | "clientId": "clientid", | ||
− | "clientSecret": " | + | "clientSecret": "SECRET_STRING" |
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== TokenRequestUrl ===== | ===== TokenRequestUrl ===== | ||
− | Для TokenRequestUrl ссылка берется из адресной строки перед авторизацией в приложении ( | + | Для TokenRequestUrl ссылка берется из адресной строки перед авторизацией в приложении (брать из источника). '''Копируем ссылку из адресной строки до "openid-connect/" и добавляем "token"''' |
''ПРИМЕР'': | ''ПРИМЕР'': | ||
− | * Ссылка для корпоративного портала перед авторизацией пользователя выглядит следующим образом - "https:// | + | * Ссылка для корпоративного портала перед авторизацией пользователя выглядит следующим образом - "https://URL_BASE/auth/realms/REALM_NAME/protocol/openid-connect/auth?........" |
− | * Для TokenRequestUrl необходима только '''https:// | + | * Для TokenRequestUrl необходима только '''https://URL_BASE/auth/realms/REALM_NAME/protocol/openid-connect/''' |
* К скопированной части ссылки добавляем "token" | * К скопированной части ссылки добавляем "token" | ||
− | * Получаем необходимый запрос для авторизации для DataManager - '''https:// | + | * Получаем необходимый запрос для авторизации для DataManager - '''https://URL_BASE/auth/realms/REALM_NAME/protocol/openid-connect/token''') |
===== ClientId ===== | ===== ClientId ===== | ||
Строка 157: | Строка 160: | ||
<syntaxhighlight lang="JSON" line> | <syntaxhighlight lang="JSON" line> | ||
"Headers": { | "Headers": { | ||
− | "secret": " | + | "secret": "SECRET_STRING"" |
}, | }, | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
''В некоторых проектах используется настройка "namespace", так как определение тенанта идет через заголовок, то есть когда авторизуешься в определенном приложении и выбираешь тенант - веб выбранный тенант сам вставляет во все запросы'' | ''В некоторых проектах используется настройка "namespace", так как определение тенанта идет через заголовок, то есть когда авторизуешься в определенном приложении и выбираешь тенант - веб выбранный тенант сам вставляет во все запросы'' | ||
Строка 166: | Строка 168: | ||
<syntaxhighlight lang="JSON" line> | <syntaxhighlight lang="JSON" line> | ||
"Headers": { | "Headers": { | ||
− | "namespace": " | + | "namespace": "TENANT_NAME"" |
}, | }, | ||
</syntaxhighlight> | </syntaxhighlight> |
Текущая версия на 11:45, 25 апреля 2023
Источник данных (Source) - ОТКУДА БЕРУТСЯ САМИ ДАННЫЕ.
Чтобы настроить источник нужно знать, через какие параметры авторизации (учетка/токены) доступны данные для выгрузки.
Источник состоит из:
- Discriminator - дискриминатор
- Uri - ссылка
- Credentials - параметры авторизации
- Headers - заголовок
Содержание
Дискриминатор
discriminator - дискриминатор (тип данных - string)
- UrlDataManagerSource - в случае, если источник данных ссылка на ресурс/запрос
Если источник данных - ссылка, то в SOURCE необходимо указать Uri, Credentials, Headers:
1 "Source": {
2 "discriminator": "UrlDataManagerSource",
3 "Uri": "",
4 "Credentials": "",
5 "Headers": ""
6 },
- ConstantDataManagerSource - если источник данных файл
Если источник данных - файл, то в SOURCE достаточно прописать только дискриминатор:
1 "Source": {
2 "discriminator": "ConstantDataManagerSource"
3 },
Унифицированный идентификатор ресурса
Uri - унифицированный идентификатор ресурса
DataManager поддерживает следующие источники:
- Postgres
- Любой get/post запрос
ВАЖНО: необходимо, чтобы запрос, прописанный в Uri возвращал данные в формате json
Стенд | Пример | Пояснение |
---|---|---|
stand 1 | 1 "Source": {
2 "discriminator": "UrlDataManagerSource",
3 "Uri": "https://URL_BASE/api/v3/symbol/available-indexes?apikey=887f267b885bd2384c2b3ef0bfbee3c9"
4 },
|
Если перейти по ссылке, то данные представляются в json-формате |
stand 2 | 1 "Source": {
2 "discriminator": "UrlDataManagerSource",
3 "Uri": "http://filestorage/api/File/e0e88d78-339e-496c-baa8-d5fb18848692"
4 },
|
Ссылка на get-запрос файлового хранилища |
stand 3 | 1 "Source": {
2 "discriminator": "UrlDataManagerSource",
3 "Uri": "https://URL_BASE/adapter"
4 },
|
Ссылка на get-запрос сервиса adapter |
Для того, чтобы получить ссылку на GET/POST запрос, необходимо сделать следующее:
- Перейти в swagger на нужный метод, благодаря которому будут доступны данные для загрузки через DM
- При необходимости ввести входные параметры (если таковы имеются)
- Нажать "Execute"
- Скопировать ссылку из "Request URL"
Параметры авторизации
Credentials - параметры авторизации
На данный момент, для DataManager включена авторизация, без авторизации сервис работать не будет
Credentials содержит следующие настройки:
Поле | Описание | Тип |
---|---|---|
discriminator |
|
string (строка) |
TokenRequestUrl | Ссылка из адресной строки перед авторизацией в приложении | string (строка) |
ClientId | Идентификатор клиента, который берется из keycloakа | string (строка) |
ClientSecret | Keycloak -> realm -> clients -> раздел "Credentials" -> поле "Secret" | string (строка) |
UserName | Логин для авторизации на стенде (данное поле добавляется для дискриминатора "PasswordAuthenticationSettingsDto") | string (строка) |
Password | Пароль для авторизации на стенде(данное поле добавляется для дискриминатора "PasswordAuthenticationSettingsDto") | string (строка) |
Discriminator
Настройка для Credentials для авторизации по логину/паролю:
1 "Credentials": {
2 "discriminator": "PasswordAuthenticationSettingsDto",
3 "TokenRequestUrl": "https://URL_BASE/auth/realms/REALM_NAME/protocol/openid-connect/token",
4 "clientId": "clientid",
5 "clientSecret": "SECRET_STRING",
6 "UserName": "username",
7 "Password": "password"
8 }
Настройка для Credentials для аутентификации конфиденциального клиента:
1 "Credentials": {
2 "discriminator": "ConfidentialClientAuthenticationSettingsDto",
3 "TokenRequestUrl": "https://URL_BASE/iam/auth/realms/REALM_NAME/protocol/openid-connect/token",
4 "clientId": "clientid",
5 "clientSecret": "SECRET_STRING"
6 }
TokenRequestUrl
Для TokenRequestUrl ссылка берется из адресной строки перед авторизацией в приложении (брать из источника). Копируем ссылку из адресной строки до "openid-connect/" и добавляем "token"
ПРИМЕР:
- Ссылка для корпоративного портала перед авторизацией пользователя выглядит следующим образом - "https://URL_BASE/auth/realms/REALM_NAME/protocol/openid-connect/auth?........"
- Для TokenRequestUrl необходима только https://URL_BASE/auth/realms/REALM_NAME/protocol/openid-connect/
- К скопированной части ссылки добавляем "token"
- Получаем необходимый запрос для авторизации для DataManager - https://URL_BASE/auth/realms/REALM_NAME/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
1 "Headers": {
2 "secret": "SECRET_STRING""
3 },
В некоторых проектах используется настройка "namespace", так как определение тенанта идет через заголовок, то есть когда авторизуешься в определенном приложении и выбираешь тенант - веб выбранный тенант сам вставляет во все запросы
1 "Headers": {
2 "namespace": "TENANT_NAME""
3 },
2 вариант - Bearer <token>
Можно задать токен, но надо понимать, что Bearer токен имеет ограниченное время жизни. Токен берем из средств разработчика (f12 или ctrl+f12)
1 "Headers": {
2 "Authorization": "Bearer <token>"
3 },