Управление связями активов

В этой статье:

Совет

Описание модели управления связями активов см. по ссылке

Создание / Обновление связей

Endpoint: POST /v1/dg/data/relations/upsert

Swagger (пример ссылки, подставьте свой хост и порт): http://<хост>:<порт>/universe-backend/api/v1/dg/data/openapi.json#/assets/upsert

  • Тело запроса: UpsertRelationsRequestRO

Название

Тип

Обязательный

Описание

typeName

String

Да

Системное название типа актива левого конца

etalonId

String

Нет

Идентификатор эталонной записи актива левого конца

lsn

Long

Нет

Порядковый номер эталонной записи актива левого конца

externalId

AssetExternalIdRO

Нет

Внешний идентификатор исходной записи актива левого конца

parentDraftId

Long

Нет

Идентификатор родительского черновика (черновика актива, являющегося левым концом связи)

relations

RelationRecordRO[]

Да

Список связей для вставки/обновления

Важные примечания:

  • Запрос должен содержать хотя бы один из способов идентификации актива левого конца (etalonId, lsn, externalId).

  • Если в запросе указан идентификатор черновика-родителя (parentDraftId), то параметр draftId из модели RelationRecordRO может быть пустым. Для создаваемых/обновляемых в запросе связей соответствующие черновики создадутся автоматически.

  • Связь RelationRecordRO должна иметь один из способов идентификации правого конца связи (toEtalonId, toLsn, toExternalId). Тип связи (relationType) является обязательным.

  • Ответ: UpsertRelationsResultRO

Название

Тип

Описание

etalons

EtalonRelationRO[]

Список созданных/обновленных записей связей активов

Пример

POST /v1/dg/data/relations/upsert
REQUEST_BODY:
{
    "typeName": "database",
    "etalonId": "23451fc2-ac26-11ec-9124-b5e9fc06bdf9",
    "parentDraftId": 13,
    "relations": [
        {
            "relationType": "include",
            "toEtalonId": "dab1fa92-baa5-11ec-b055-4fb2ec1632f9",
            "toTypeName": "tables"
        }
    ]
}

Результат: В результате выполнения запроса будет создана связь типа include в режиме черновика от актива типа database с идентификатором эталонной записи 23451fc2-ac26-11ec-9124-b5e9fc06bdf9 к активу типа tables c идентификатором эталонной записи dab1fa92-baa5-11ec-b055-4fb2ec1632f9.

Получение связи по идентификатору эталонной записи

Endpoint: GET /v1/dg/data/relations/{name}/{id}. Отвечает за получение эталонных связей по идентификатору эталонной записи и по типу связи.

Swagger (пример ссылки, подставьте свой хост и порт): http://<хост>:<порт>/universe-backend/api/v1/dg/data/openapi.json#/relations/get_4

  • Параметры запроса:

Название

Тип

Расположение

Обязательный

Описание

name

String

Path

Да

Тип связи

id

String

Path

Да

Идентификатор эталонной записи связи

draftId

Long

Query

Нет

Идентификатор черновика связи. Если не указан, будет возвращена опубликованная версия связи

  • Ответ: GetRelationResultRO

Название

Тип

Описание

relationKeys

RelationKeysRO

Ключи эталонной записи связи

etalonRelation

EtalonRelationRO

Эталонная запись связи

Пример

GET /v1/dg/data/relations/include/092ad86d-93b1-11ec-a4d3-b336588c82b2

Результат: В результате выполнения запроса будет возвращена эталонная запись связи типа include c идентификатором 092ad86d-93b1-11ec-a4d3-b336588c82b2.

Получение списка связей для актива

Endpoint: POST /v1/dg/data/relations. Отвечает за получение списка эталонных связей для актива с возможностью фильтрации.

Swagger (пример ссылки, подставьте свой хост и порт): http://<хост>:<порт>/universe-backend/api/v1/dg/data/openapi.json#/relations/get_3

  • Тело запроса: GetRelationsRequestRO

Название

Тип

Обязательный

Описание

typeName

String

Да

Системное название типа актива

etalonId

String

Нет

Идентификатор эталонной записи актива

lsn

Long

Нет

Порядковый номер эталонной записи актива

externalId

AssetExternalIdRO

Нет

Внешний идентификатор исходной записи актива

parentDraftId

Long

Нет

Идентификатор черновика актива

relationTypes

String[]

Нет

Фильтр для типов связей. Если пуст, вернутся все связи

toTypeNames

String[]

Нет

Фильтр для правых концов связей. Если пуст, вернутся все связи

fetchAll

Boolean

Нет

Если true, вернутся все связи без учета фильтрации

includeInactive

Boolean

Нет

Флаг, отвечающий за фильтрацию по статусам связей. Если includeInactive = true, вернутся все связи, включая логически удаленные.

count

Integer

Да

Количество связей на странице

page

Integer

Нет

Номер страницы связей

Важные примечания:

  • Запрос должен содержать хотя бы один из способов идентификации актива (etalonId, lsn, externalId).

  • При получении связей актива в режиме черновика доступно получение только по etalonId - идентификатору эталонной записи.

  • Ответ: GetRelationsResultRO

Название

Тип

Описание

relations

EtalonRelationRO[]

Список эталонных связей

totalCount

Integer

Общее количество связей, удовлетворяющих запросу

Примеры

  • Получение списка всех связей актива:

    POST /v1/dg/data/relations
    REQUEST_BODY:
    {
        "typeName": "database",
        "etalonId": "23451fc2-ac26-11ec-9124-b5e9fc06bdf9",
        "fetchAll": true,
        "count": 5
    }
    

Результат: В результате выполнения запроса будут возвращены активные эталонные записи связей актива типа database с идентификатором 23451fc2-ac26-11ec-9124-b5e9fc06bdf9. Количество связей в ответе = 5.

  • Получение связей в режиме черновика с фильтрацией:

    POST /v1/dg/data/relations
    REQUEST_BODY:
    {
        "typeName": "database",
        "etalonId": "23451fc2-ac26-11ec-9124-b5e9fc06bdf9",
        "parentDraftId": 13,
        "relationTypes": ["include"],
        "toTypeNames": ["tables"],
        "count": 5
    }
    

Результат: В результате выполнения запроса будут возвращены эталонные записи связей, относящиеся к черновику 13 актива типа database с идентификатором 23451fc2-ac26-11ec-9124-b5e9fc06bdf9, которые имеют тип связи - include и тип актива правого конца - tables.

Удаление связи по идентификатору эталонной записи

Endpoint: DELETE /v1/dg/data/relations/delete/{name}/{id}

Swagger (пример ссылки, подставьте свой хост и порт): http://<хост>:<порт>/universe-backend/api/v1/dg/data/openapi.json#/relations/delete_2

  • Параметры запроса:

Название

Тип

Расположение

Обязательный

Описание

name

String

Path

Да

Типа связи

id

String

Path

Да

Идентификатор эталонной записи связи

draftId

Long

Query

Нет

Идентификатор черновика связи. Если указан, удаление актива будет выполняться в режиме черновика

wipe

Boolean

Query

Нет

Флаг-идентификатор типа удаления. Если wipe = true, запись будет удалена физически. Значение по умолчанию: wipe = false - логическое удаление

Примечание

При удалении связи в режиме черновика доступно только логическое удаление

  • Ответ: DeleteRelationResultRO

Название

Тип

Описание

relationKeys

RelationKeysRO

Ключи удаленной эталонной записи связи

Пример

DELETE /v1/dg/data/relations/delete/include/092ad86d-93b1-11ec-a4d3-b336588c82b2
QUERY_PARAMS:
{
    wipe: true
}

Результат: В результате выполнения запроса будет физически удалена эталонная запись связи типа Include c идентификатором 092ad86d-93b1-11ec-a4d3-b336588c82b2.

Удаление нескольких связей

Endpoint: DELETE /v1/dg/data/relations/delete

Swagger (пример ссылки, подставьте свой хост и порт): http://<хост>:<порт>/universe-backend/api/v1/dg/data/openapi.json#/relations/delete_3

  • Тело запроса: DeleteRelationsRequestRO

Название

Тип

Обязательный

Описание

parentDraftId

Long

Нет

Идентификатор черновика родительского актива

deletes

RelationDeleteWrapperRO[]

Да

Список связей для удаления

Примечание

При удалении связи в режиме черновика доступно только логическое удаление эталонной записи

  • Ответ: DeleteRelationsResultRO

Название

Тип

Описание

relationsKeys

RelationKeysRO[]

Ключи удаленных эталонных записей связей

Пример

DELETE /v1/dg/data/relations/delete
REQUEST_BODY:
{
    "deletes": [
        {
            "etalonId": "092ad86d-93b1-11ec-a4d3-b336588c82b2",
            "relationType": "include",
            "wipe": true
        },
        {
            "etalonId": "23451fc2-ac26-11ec-9124-b5e9fc06bdf9",
            "relationType": "contains",
            "wipe": true
        }
    ]
}

Результат: В результате выполнения запроса будет физически удалена связь типа Include c идентификатором 092ad86d-93b1-11ec-a4d3-b336588c82b2 и связь типа Contains c идентификатором 23451fc2-ac26-11ec-9124-b5e9fc06bdf9.