Модуль org.unidata.mdm.rest.v2.draft¶
Общая информация¶
Модуль предоставляет доступ к работе с черновиками посредством REST API.
Операции:
Получить список всех доступных провайдеров черновиков;
Получить состояния существующих черновиков;
Найти черновики по запросу;
Создать/обновить черновик;
Опубликовать черновик;
Удалить черновик.
Зависимости:
org.unidata.mdm.rest.v2.core
org.unidata.mdm.rest.system
org.unidata.mdm.draft
Параметры конфигурации:
Отсутствуют внешние параметры
Точки в пайплайнах:
Отсутствуют
Классы и интерфейсы модуля¶
DraftRestService
- REST-сервис для работы с черновиками.
Операции:
Получить список всех доступных провайдеров черновиков;
Получить состояния существующих черновиков;
Найти черновики по запросу;
Создать/обновить черновик;
Опубликовать черновик;
Удалить черновик.
REST-сервисы¶
REST-сервис работы с черновиками - org.unidata.mdm.rest.v2.draft.service.DraftRestService
/api/v2/draft
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/")
public class DraftRestService extends AbstractRestService {
private static final String SERVICE_TAG = "Draft";
/**
* Returns list of draft provider types, currently known to the system.
*/
@GET
@Path("types")
@Operation(
summary = "Get list of draft provider types, currently known to the system",
description = "Returns list of draft provider types, currently known to the system"
)
public GetDraftTypesResultRO types();
/**
* Returns list of known draft states.
*/
@GET
@Path("states")
@Operation(
summary = "Get list of draft states, currently known to the system",
description = "Returns list of draft states, currently known to the system"
)
public GetDraftStatesResultRO states();
/**
* Find drafts for request
*
* @return List of drafts
*/
@POST
@Path("drafts")
@Operation(summary = "Find drafts for request", description = "Find drafts for request"
)
public GetDraftResultRO drafts(GetDraftRequestRO request);
/**
* Upsert draft
*
* @return List of drafts
*/
@POST
@Path("upsert")
@Operation(
summary = "Upsert draft",
description = "Upsert draft, create or update display name if draft exists"
)
public UpsertDraftResultRO upsert(UpsertDraftRequestRO request);
/**
* Publish draft
*
* @return result
*/
@POST
@Path("publish")
@Operation(
summary = "Publish draft",
description = "Publish draft"
)
public PublishDraftResultRO publish(PublishDraftRequestRO request);
/**
* Remove drafts
*
* @return result
*/
@POST
@Path("remove")
@Operation(
summary = "Remove draft",
description = "Remove draft"
)
public RemoveDraftResultRO remove(RemoveDraftRequestRO request);
}
Swagger UI¶
/api/v2/draft/api-docs
Список примеров:
Поиск черновиков¶
POST /universe-backend/api/v2/draft/drafts
Ищет по любым имеющимся полям.
Принимает GetDraftRequestRO
.
Возвращает GetDraftResultRO
.
Запрос:
{
"query": {
"type": "string", //ID провайдера, например, "record", для записей реестров
"owner": "string", //Владелец черновика, например, "admin"
"subjectId": "string", //ID объекта, для которого создан черновик, например, Etalon ID записи
"draftId": 0, //ID искомого черновика
"parentDraftId": 0, //ID родительского черновика
"tags": [ //Тэги, например, "namespace:register" для поиска черновиков для записей реестров или "entity-name:TestReg" для поиска черновиков записей реестра "TestReg"
"string"
],
"state": "string" //Состояние черновика, например, "RUNNING" для поиска черновиков, с которыми ведется работа
},
"offset": 0,
"limit": 0 //Больше нуля или отсутствует
}
Ответ:
{
"details": { //Ошибки
"info": [],
"warning": [],
"error": []
},
"drafts": [ //Черновики
{
"type": "string",
"subjectId": "string",
"description": "string",
"owner": "string",
"ownerFullName": "string",
"createdBy": "string",
"updatedBy": "string",
"draftId": 0,
"parentDraftId": 0,
"editionsCount": 0,
"createDate": "2023-07-17T07:51:37.259Z",
"updateDate": "2023-07-17T07:51:37.259Z",
"tags": [
"string"
],
"state": "CREATED" //Состояние черновика
}
],
"totalCount": 0 //Общее количество найденных черновиков
}
Пример запроса для поиска всех черновиков:
{
}
Пример запроса для поиска всех черновиков модели данных:
{
"query": {
"type": "data-model"
}
}
Пример запроса для поиска всех черновиков записи реестра с etalon ID "5d909a39-1fea-11ee-8704-19e62a84c1f0", с которыми ведется работа ("RUNNING"):
{
"query": {
"type": "record",
"subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0",
"state": "RUNNING"
}
}
Пример ответа для запроса выше:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"drafts": [
{
"type": "record",
"subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0",
"description": "Черновик от 11.07.2023 15:56:06",
"owner": "admin",
"ownerFullName": "Admin Root",
"createdBy": "admin",
"updatedBy": "admin",
"draftId": 2,
"parentDraftId": null,
"editionsCount": 2,
"createDate": "2023-07-11T15:56:06.990655+03:00",
"updateDate": "2023-07-11T15:57:11.674683+03:00",
"tags": [
"record-external-id:4d39b560-1fea-11ee-addc-e31a630bec40\u001fTestReg\u001funidata",
"namespace:register",
"operation-code:UPSERT_DATA",
"entity-name:TestReg"
],
"state": "RUNNING"
}
],
"totalCount": 1
}
Создание или обновление черновика¶
POST /api/v2/draft/upsert
Принимает
UpsertDraftRequestRO
Возвращает
UpsertDraftResultRO
См. Поиск черновиков
Запрос:
{
"type": "string", //Указывается ID провайдера, например, "record" для создания черновика записи
"owner": "string", //Если отсутствует, то будет использоваться имя пользователя, который отправил запрос
"subjectId": "string", //Может быть пустым, если, например, запись реестра еще не создана
"draftId": 0, //Указывается для обновления
"parentDraftId": 0, //Указывается, если есть родитель
"tags": [ //Для записи реестра, например, указываются "namespace:register" и "entity-name:имя_реестра"
"string" //Могут быть опциональными, проставятся автоматически на основе остальных данных и параметров, например, для записи реестра
],
"description": "string", //Отображаемое имя черновика
"parameters": { //Параметры черновика, если есть
"additionalProp1": "string", //Например, "entity-name" : "имя_реестра" для создания черновика для записи реестра
"additionalProp2": "string",
"additionalProp3": "string"
}
}
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"draft": {
"type": "string",
"subjectId": "string",
"description": "string",
"owner": "string",
"ownerFullName": "string",
"createdBy": "string",
"updatedBy": "string",
"draftId": 0,
"parentDraftId": 0,
"editionsCount": 0,
"createDate": "2023-07-17T07:21:26.482Z",
"updateDate": "2023-07-17T07:21:26.482Z",
"tags": [
"string"
],
"state": "CREATED"
}
}
Пример создания черновика для записи (record) реестра (register) "TestReg" (системное имя) с etalon ID "5d909a39-1fea-11ee-8704-19e62a84c1f0":
{
"type": "record", //Провайдер для записей
"subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0", //Для записей ID эталона
"description": "example draft",
"parameters": {
"namespace" : "register", //Пространство имен реестров
"entity-name" : "TestReg" //Название реестра
}
}
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"draft": {
"type": "record",
"subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0",
"description": "example draft",
"owner": "admin",
"ownerFullName": "Admin Root",
"createdBy": "admin",
"updatedBy": null,
"draftId": 14,
"parentDraftId": null,
"editionsCount": 0,
"createDate": "2023-07-17T11:00:58.451+03:00",
"updateDate": null,
"tags": [
"namespace:register",
"entity-name:TestReg"
],
"state": "CREATED"
}
}
Пример создания черновика для добавления записи (record) в реестр (register) "TestReg" (системное имя). Записи еще нет, поэтому нет ID эталона:
{
"type": "record", //Провайдер для записей
"subjectId": "", //Еще нет объекта
"description": "example draft",
"parameters": {
"namespace" : "register", //Пространство имен реестров
"entity-name" : "TestReg" //Название реестра
}
}
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"draft": {
"type": "record",
"subjectId": "",
"description": "example draft to add record to entity",
"owner": "admin",
"ownerFullName": "Admin Root",
"createdBy": "admin",
"updatedBy": null,
"draftId": 15,
"parentDraftId": null,
"editionsCount": 0,
"createDate": "2023-07-17T11:05:20.678+03:00",
"updateDate": null,
"tags": [
"namespace:register",
"entity-name:TestReg"
],
"state": "CREATED"
}
}
Пример запроса для создания черновика модели данных для работы с моделями реестров и справочников:
{
"type": "data-model",
"subjectId": "",
"description": "example draft to update data-model",
"parameters": {
}
}
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"draft": {
"type": "data-model",
"subjectId": "",
"description": "example draft to update data-model",
"owner": "admin",
"ownerFullName": "Admin Root",
"createdBy": "admin",
"updatedBy": null,
"draftId": 16,
"parentDraftId": null,
"editionsCount": 0,
"createDate": "2023-07-17T11:06:31.562+03:00",
"updateDate": null,
"tags": [],
"state": "RUNNING"
}
}
Публикация черновика¶
POST /api/v2/draft/publish
Принимает
UpsertDraftRequestRO
Возвращает
UpsertDraftResultRO
Запрос:
{
"draftId": 0, //ID черновика
"force": true, //Принудительная публикация
"delete": true //Удаление черновика после публикации
}
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"draft": {
"type": "string",
"subjectId": "string",
"description": "string",
"owner": "string",
"ownerFullName": "string",
"createdBy": "string",
"updatedBy": "string",
"draftId": 0,
"parentDraftId": 0,
"editionsCount": 0,
"createDate": "2023-07-17T07:20:07.706Z",
"updateDate": "2023-07-17T07:20:07.706Z",
"tags": [
"string"
],
"state": "CREATED"
}
}
Пример запроса на публикацию черновика модели данных, который создали в другом примере с draftId = 16, с принудительной публикацией (force) и без удаления публикуемого черновика (delete):
{
"draftId": 16,
"force": true,
"delete": false
}
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"draft": {
"type": "data-model",
"subjectId": "",
"description": "example draft to update data-model",
"owner": "admin",
"ownerFullName": "Admin Root",
"createdBy": "admin",
"updatedBy": "admin",
"draftId": 16,
"parentDraftId": null,
"editionsCount": 1,
"createDate": "2023-07-17T11:06:31.729904+03:00",
"updateDate": "2023-07-17T11:06:31.729904+03:00",
"tags": [],
"state": "PUBLISHED"
}
}
Удаление черновика¶
POST /api/v2/draft/publish
Принимает
UpsertDraftRequestRO
Возвращает
UpsertDraftResultRO
Ищет по любым имеющимся полям. См. Поиск черновиков
Запрос:
{
"type": "string",
"owner": "string",
"subjectId": "string",
"draftId": 0,
"parentDraftId": 0,
"tags": [
"string"
],
"state": "string"
}
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"success": true //Успешность запроса
}
Запрос для удаления черновика с draftId = 15:
{
"draftId": 15
}
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"success": true
}
Пример запроса для удаления всех черновиков, которые были опубликованы:
{
"state" : "PUBLISHED"
}
Пример запроса для удаления всех черновиков пользователя "admin" записи (record) реестра (register) "TestReg" (системное имя) с etalon ID "5d909a39-1fea-11ee-8704-19e62a84c1f0", которые были созданы, но работа с которыми не велась:
{
"type": "record",
"owner": "admin",
"subjectId": "5d909a39-1fea-11ee-8704-19e62a84c1f0",
"tags": [
"entity-name:TestReg"
],
"state": "CREATED"
}
Получение списка возможных состояний черновика¶
POST /api/v2/draft/states
Запрос отправляется без параметров.
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"states": [
{
"name": "string", //Систеное имя состояния, которое используется при поиске в параметре "state"
"moduleId": "string", //Модуль, в котором определено состояние
"displayName": "string",
"description": "string"
}
]
}
Пример ответа:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"states": [
{
"name": "CREATED",
"moduleId": "org.unidata.mdm.draft",
"displayName": "Начальное состояние черновика",
"description": "Выставляется в случае, когда черновик только создан и еще не имеет ни одной редакции"
},
{
"name": "PUBLISHED",
"moduleId": "org.unidata.mdm.draft",
"displayName": "Черновик опубликован",
"description": "Черновик успешно опубликован"
},
{
"name": "DELAYED_BY_WORKFLOW",
"moduleId": "com.unidata.mdm.workflow.core",
"displayName": "Публикация черновика отложена",
"description": "Фактическая публикация черновика отложена до окончания процесса согласования."
},
{
"name": "FAILED",
"moduleId": "org.unidata.mdm.draft",
"displayName": "Неудачная публикация",
"description": "Процесс публикации завершился с ошибками в дополнительных действих после публикации"
},
{
"name": "RUNNING",
"moduleId": "org.unidata.mdm.draft",
"displayName": "Нормальное состояние черновика",
"description": "Черновик доступен для редактирования и имеет одну или несколько редакций"
}
]
}
Получение списка возможных типов провайдеров¶
POST GET /api/v2/draft/types
Запрос отправляется без параметров.
Ответ:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"types": [
{
"id": "string",
"description": "string",
"tags": [
"string"
]
}
]
}
Пример ответа:
{
"details": {
"info": [],
"warning": [],
"error": []
},
"types": [
{
"id": "bpmn-model",
"description": "com.unidata.mdm.workflow.core.bpmn.model.draft.provider.description",
"tags": []
},
{
"id": "matching-model",
"description": "app.matching.draft.model.provider.description",
"tags": []
},
{
"id": "classifier-model",
"description": "com.unidata.mdm.classifiers.draft.classifier.provider.description",
"tags": []
},
{
"id": "record",
"description": "Поддержка черновиков для типа данных \"записи\"",
"tags": [
"entity-name",
"operation-code",
"namespace",
"record-external-id"
]
},
{
"id": "data-model",
"description": "",
"tags": []
},
{
"id": "classifier-version",
"description": "com.unidata.mdm.classifiers.draft.version.provider.description",
"tags": []
},
{
"id": "quality-model",
"description": "app.dq.draft.model.provider.description",
"tags": []
},
{
"id": "workflow-model",
"description": "Провайдер черновиков модели бизнес-процессов",
"tags": []
},
{
"id": "classifier-node",
"description": "com.unidata.mdm.classifiers.draft.node.provider.description",
"tags": []
},
{
"id": "classification",
"description": "com.unidata.mdm.classifiers.draft.classification.provider.description",
"tags": [
"classified-origin-id",
"namespace",
"classified-id",
"operation-code",
"node-name",
"version-name",
"classifier-name"
]
},
{
"id": "relation",
"description": "Поддержка черновиков для типа данных \"связи\"",
"tags": [
"relation-from-etalon-id",
"namespace",
"relation-to-external-id",
"entity-name",
"operation-code",
"relation-to-etalon-id",
"relation-from-external-id"
]
}
]
}