Примеры запросов
Необходимо убедиться, что пользователя c rn = testRN, systemId = 00000000-0000-0001-0000-000000000001 и id = 00000000-0000-0001-0000-000000000001 нет в системе.
Запрос:
Curl type=jsoncurl -X POST "http://localhost:8080/notification-center/api/settings/v1/admin/rn/testRN/system/00000000-0000-0001-0000-000000000001/user" -H "accept: */*" -H "Content-Type: application/json" -d "{\"id\":\"00000000-0000-0001-0000-000000000001\",\"name\":\"Test User\"}"
Статус ответа: 200.
Тело ответа:
Ответ type=json{ "rn": "testRN", "systemUUID": "00000000-0000-0001-0000-000000000001", "id": "00000000-0000-0001-0000-000000000001", "name": "Test User", "creationDate": "2021-11-23T09:52:29.892028" }
Необходимо убедиться, что пользователи c rn = testRN и systemId = 00000000-0000-0001-0000-000000000001 уже созданы
Запрос:
Curl type=jsoncurl -X GET "http://localhost:8080/notification-center/api/settings/v1/admin/rn/testRN/system/00000000-0000-0001-0000-000000000001/user?page=0&size=10" -H "accept: */*"
Статус ответа: 200.
Тело ответа (
content
- список пользователей, соответствующий переданным rn и systemId):Ответ type=json{ "content": [ { "rn": "testRN", "systemUUID": "00000000-0000-0001-0000-000000000001", "id": "00000000-0000-0001-0000-000000000001", "name": "Alex Illingsworth", "creationDate": "2021-11-23T09:27:01.176417" }, { "rn": "testRN", "systemUUID": "00000000-0000-0001-0000-000000000001", "id": "4df15d3d-df6b-4faa-9f44-1fd198972330", "name": "Test User", "creationDate": "2021-11-23T09:50:37.949373" } ], "pageable": { "sort": { "sorted": false, "unsorted": true, "empty": true }, "pageNumber": 0, "pageSize": 10, "offset": 0, "unpaged": false, "paged": true }, "last": true, "totalPages": 1, "totalElements": 3, "numberOfElements": 3, "first": true, "number": 0, "sort": { "sorted": false, "unsorted": true, "empty": true }, "size": 10, "empty": false }
Запрос:
Curl type=jsoncurl -X POST "http://localhost:8080/notification-center/api/settings/v1/admin/rn/testRN/system/00000000-0000-0001-0000-000000000001/user" -H "accept: */*" -H "Content-Type: application/json" -d "{\"name\":\"Test User\"}"
Статус ответа: 200.
Тело ответа:
Ответ type=json{ "rn": "testRN", "systemUUID": "00000000-0000-0001-0000-000000000001", "id": "${Новый сгенерированный UUID}", "name": "Test User", "creationDate": "2021-11-23T09:52:29.892028" }
-
Редактирование пользователя.Запрос:Curl type=json
curl -X POST "http://localhost:8080/notification-center/api/settings/v1/admin/rn/testRN/system/00000000-0000-0001-0000-000000000001/user" -H "accept: */*" -H "Content-Type: application/json" -d "{\"id\":\"00000000-0000-0001-0000-000000000001\",\"name\":\"${Новое имя пользователя}\"}"
Статус ответа: 200Тело ответа:Ответ type=json{ "rn": "testRN", "systemUUID": "00000000-0000-0001-0000-000000000001", "id": "00000000-0000-0001-0000-000000000001", "name": "${Новое имя пользователя}", "creationDate": "2021-11-23T09:52:29.892028" }
Тело запроса:
Запрос type=json{ "profileId": "{{$guid}}", "profileName": "Test_prof", "description": "Test_prof", "dictionaryName": "{{codeDic}}", "domainName": "{{code_dom}}", "primaryNameKey": "{{nsixId}}", "displayNameKey": "{{code}}", "columns": [ { "columnName": "{{nsixId}}", "columnDescription": "", "type": "LONG", "position": 2, "calculatedField": false, "required": false, "systemColumn": false, "excludedField": false }, { "columnName": "{{code}}", "columnDescription": "", "type": "STRING", "position": 5, "calculatedField": false, "required": false, "systemColumn": true, "excludedField": false }, { "columnName": "code2", "columnDescription": "", "type": "STRING", "position":6, "calculatedField": false, "required": false, "excludedField": false } ], "validationRules": [ { "ruleName": "isEveryInArray", "values": [ { "source": "TABLE", "key": "{{code}}" }, { "source": "CONSTANT", "key": "7;6;8" }, { "source": "CONSTANT", "key": ";" } ], "description": "isEveryInArray", "ruleType": "CHECKER", "uiDestination": "HEAD" } ], "checkModel": false, "csvSeparator": ",", "encoding": "UTF-8", "skipRowsFromStart": 0, "skipRowsFromEnd": 0, "profileType": "CSV" }
Статус ответа: 200.
Возвращается идентификатор созданного профиля.
Содержание файла профиля справочника:
profile.txt type=json{ "profileId": "4a5733d4-8cc0-4268-8bf5-50af3e8193df", "profileName": "test_MAIL", "columns": [ { "columnName": "mail", "columnDescription": "", "type": "STRING", "uniqueKeys": null, "position": 0, "calculatedField": false, "required": false } ], "validationRules": [ { "description": "это майл", "ruleName": "isEmail", "ruleType": "CHECKER", "values": [ { "source": "TABLE", "key": "mail" } ] } ], "csvSeparator": ",", "encoding": "UTF-8", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
Данные в файле:
data.csv type=txtivan@mail.ru info@
Ответ:
Error type=json{ "type": "Validation Exception", "title": "Your request file didn't validate with your validation rules", "invalid params": [ { "rowIndex": 1, "ruleName": "isEmail", "message": "false" } ] }
Содержание файла профиля справочника:
profile.json type=json{ "profileId": "e32e0a0c-149f-40b9-a60c-50d31597f113", "profileName": "test_calculated_field", "columns": [ { "columnName": "mail", "columnDescription": "", "type": "STRING", "uniqueKeys": null, "position": 0, "calculatedField": false, "required": false }, { "columnName": "mailServer", "columnDescription": "", "type": "STRING", "uniqueKeys": null, "position": 0, "calculatedField": false, "required": false } ], "validationRules": [ { "ruleName": "getRegexp", "values": [ { "source": "CONSTANT", "key": "@.*" }, { "source": "TABLE", "key": "mail" } ], "resultName": "mailServer", "description": "получить сервер почты", "ruleType": "CALCULATED_FIELD" } ], "csvSeparator": ",", "encoding": "UTF-8", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
Данные в файле:
data.csv type=jsonivan@mail.ru info@sberbank.ru
Ответ:
Response type=json{ "dictionaryCode": "456", "versionCode": "INIT_1_2021_05_20_13_14_55_891", "versionName": "VER.INIT_1_2021_05_20_13_14_55_891", "subsystem": null, "items": [ { "attrs": { "mail": "ivan@mail.ru", "mailServer": "@mail.ru" } }, { "attrs": { "mail": "info@sberbank.ru", "mailServer": "@sberbank.ru" } } ] }
Необходимо выбрать минимальное значение среди имеющихся колонок и перезаписать его в колонку
min
, предварительно отметив поле как isCalculated
.Данные в файле:
first | second | third | min |
---|---|---|---|
3 | 312 | 4 |
-
Создадим профиль с RuleName: 'min'.profile.json type=json
{ "profileId": "e34dc8c8-48f2-4aa5-9e36-f7a9415f84e2", "profileName": "getMinimalValueTest", "columns": [ { "columnName": "first", "type": "STRING", "position": 0, "required": false, "calculatedField": false }, { "columnName": "second", "type": "STRING", "position": 1, "required": false, "calculatedField": false }, { "columnName": "third", "type": "STRING", "position": 2, "required": false, "calculatedField": false }, { "columnName": "min", "type": "STRING", "position": 3, "required": false, "calculatedField": true } ], "validationRules": [ { "ruleName": "min", "values": [ { "source": "TABLE", "key": "first" }, { "source": "TABLE", "key": "second" }, { "source": "TABLE", "key": "third" } ], "resultName": "min", "ruleType": "CALCULATED_FIELD" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Отправляем запрос с данными для начала парсинга.
Part Description fileФайл для загрузки dictionaryCodeКод справочника dictionaryNameНазвание справочника profileIdID профиля taskTypeТип загрузки. Для примера выбрано TaskType.DEMO Curl type=json$ curl 'http://localhost:8080/now/profile' -i -X POST \ -H 'Content-Type: multipart/form-data;charset=UTF-8' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e2' \ -F 'taskType=DEMO' \
-
В ответ получаем ID задания.
8212ba1a-e442-4985-b118-8188303e96d3
-
Отправляем запрос для получения данных.Curl type=json
$ curl 'http://localhost:8080/now/8212ba1a-e442-4985-b118-8188303e96d3/data' -i -X GET \ -H 'Content-Type: application/json;charset=UTF-8'
-
Получаем ответ.Response type=json
{ "dictionaryCode" : "ANY", "versionCode" "versionName" "subsystem" : "items" : [ { : "INIT_1_2021_09_08_19_46_31_078", : "VER.INIT_1_2021_09_08_19_46_31_078", "DICTIONARY_AUTO_UPLOAD", "attrs" : { "min" : 3.0, "third" : "4.00", "first" : "3", "second" : "312" } } ], "dictionaryMultiData" : null }
Как можем наблюдать, в колонку
min
записалось минимальное значение из всех имеющихся колонок в десятичном представлении.Необходимо посчитать сумму значений имеющихся колонок и записать его в колонку
sum
, предварительно отметив поле как isCalculated
.Данные в файле:
first | second | third | four | five |
---|---|---|---|---|
312 | -312 | 4 | 6 | 20 |
312 | -312 | 4 | 6 | 30 |
-
Создаем профиль с RuleName: 'sum'.profile.csv type=json
{ "profileId": "776c99c6-6404-48d7-a03c-4f3dae6444c5", "profileName": "getSumOfValues", "columns": [ { "columnName": "first", "type": "STRING", "position": 0, "required": false, "calculatedField": false }, { "columnName": "second", "type": "STRING", "position": 1, "required": false, "calculatedField": false }, { "columnName": "third", "type": "STRING", "position": 2, "required": false, "calculatedField": false }, { "columnName": "fourth", "type": "STRING", "position": 3, "required": false, "calculatedField": false }, { "columnName": "five", "type": "STRING", "position": 4, "required": false, "calculatedField": false }, { "columnName": "sum", "type": "STRING", "position": 5, "required": false, "calculatedField": true } ], "validationRules": [ { "ruleName": "sum", "values": [ { "source": "TABLE", "key": "first" }, { "source": "TABLE", "key": "second" }, { "source": "TABLE", "key": "third" }, { "source": "TABLE", "key": "fourth" }, { "source": "TABLE", "key": "five" } ], "resultName": "sum", "ruleType": "CALCULATED_FIELD" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Отправляем запрос с данными для начала парсинга.
Part Description fileФайл для загрузки dictionaryCodeКод справочника dictionaryNameНазвание справочника profileIdID профиля taskTypeТип загрузки. Для примера выбрано TaskType.DEMO Curl type=json$ curl 'http://localhost:8080/now/profile' -i -X POST \ -H 'Content-Type: multipart/form-data;charset=UTF-8' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=776c99c6-6404-48d7-a03c-4f3dae6444c5' \ -F 'taskType=DEMO' \
-
Получаем в ответ ID задания.
e7de30b7-8fec-4693-beb4-a93da6f08cc4
-
Отправляем запрос для получения данных.Curl type=json
$ curl 'http://localhost:8080/now/e7de30b7-8fec-4693-beb4-a93da6f08cc4/data' -i -X GET \ -H 'Content-Type: application/json;charset=UTF-8'
-
Получаем ответ.Response type=json
{ "dictionaryCode" : "ANY", "versionCode" "versionName" "subsystem" : "items" : [ { : "INIT_1_2021_09_08_19_46_24_817", : "VER.INIT_1_2021_09_08_19_46_24_817", "DICTIONARY_AUTO_UPLOAD", "attrs" : { "third" : "4", "sum" : 30.0, "fourth" : "6", "five" : "20", "first" : "312", "second" : "-312" } }, { "attrs" : { "third" : "4", "sum" : 40.0, "fourth" : "6", "five" : "30", "first" : "312", "second" : "-312" } } ], "dictionaryMultiData" : null }
Как можем наблюдать, в колонку
sum
записалась сумма значений из всех имеющихся колонок в десятичном представлении.Необходимо поделить значение колонки
first
на значение колонки second
и записать результат в колонку div
, предварительно отметив поле как isCalculated
.Данные в файле:
first | second |
---|---|
225 | 15,2 |
-
Создаем профиль с RuleName: 'div'.profile.json type=json
{ "profileId": "e34dc8c8-48f2-4aa5-9e36-f7a9415f84e1", "profileName": "getDivOfValuesTest", "columns": [ { "columnName": "first", "type": "STRING", "position": 0, "required": false, "calculatedField": false }, { "columnName": "second", "type": "STRING", "position": 1, "required": false, "calculatedField": false }, { "columnName": "div", "type": "STRING", "position": 3, "required": false, "calculatedField": true } ], "validationRules": [ { "ruleName": "div", "values": [ { "source": "TABLE", "key": "first" }, { "source": "TABLE", "key": "second" } ], "resultName": "div", "ruleType": "CALCULATED_FIELD" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Отправляем запрос с данными для начала парсинга.
Part Description fileФайл для загрузки dictionaryCodeКод справочника dictionaryNameНазвание справочника profileIdID профиля taskTypeТип загрузки. Для примера выбрано TaskType.DEMO Curl type=json$ curl 'http://localhost:8080/now/profile' -i -X POST \ -H 'Content-Type: multipart/form-data;charset=UTF-8' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e1' \ -F 'taskType=DEMO' \
-
Получаем в ответ ID задания.
fc373bc0-83b7-4e34-99d4-9379e1847da5
-
Отправляем запрос для получения данных.Curl type=json
$ curl 'http://localhost:8080/now/fc373bc0-83b7-4e34-99d4-9379e1847da5/data' -i -X GET \ -H 'Content-Type: application/json;charset=UTF-8'
-
Получаем ответ.Response type=json
{ "dictionaryCode" : "ANY", "versionCode" "versionName" "subsystem" : "items" : [ { : "INIT_1_2021_09_08_19_46_28_983", : "VER.INIT_1_2021_09_08_19_46_28_983", "DICTIONARY_AUTO_UPLOAD", "attrs" : { "div" : 14.8, "first" : "225", "second" : "15.2" } } ], "dictionaryMultiData" : null }
Как можем наблюдать, в колонку
div
записалось частное из колонок first
и second
в десятичном представлении.Использование regular expression для валидации: допустим, у нас есть колонка
A
(тип данных - число), и оттуда мы хотим взять первые три числа выражением "\d3", затем проверить, соответвует ли вычисленное поле, выражению "\w".Регулярные выражения:
- выражение "\d3" соответствует цифровому символу в количестве трех знаков;
- выражение "\w" соответствует любому цифро-буквенному символу, включая нижнее подчеркивание, но в количестве равному 1.
-
Создаем профиль.profile.json type=json
{ "profileId": "ba456cfa-ced5-4ac2-a39d-effbbcf22623", "profileName": "regexTest", "columns": [ { "columnName": "A", "type": "STRING", "position": 0, "required": false, "calculatedField": false } ], "validationRules": [ { "ruleName": "getRegexp", "values": [ { "source": "CONSTANT", "key": "\\d{3}" }, { "source": "TABLE", "key": "A" } ], "resultName": "regexpResult", "ruleType": "CALCULATED_FIELD" }, { "ruleName": "isMatchByRegexp", "values": [ { "source": "CONSTANT", "key": "\\w" }, { "source": "ENV", "key": "regexpResult" } ], "ruleType": "CHECKER" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Отправляем запрос с данными для начала парсинга.
Part Description fileФайл для загрузки dictionaryCodeКод справочника dictionaryNameНазвание справочника profileIdID профиля taskTypeТип загрузки. Для примера выбрано TaskType.DEMO Curl type=json$ curl 'http://localhost:8080/now/profile' -i -X POST \ -H 'Content-Type: multipart/form-data;charset=UTF-8' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=ba456cfa-ced5-4ac2-a39d-effbbcf22623' \ -F 'taskType=DEMO' \
-
Получаем в ответ ID задания.
b3e347eb-dd95-4c3f-8b03-457bebf351af
-
Отправляем запрос для получения данных.Curl type=json
$ curl 'http://localhost:8080/now/b3e347eb-dd95-4c3f-8b03-457bebf351af/data' -i -X GET \ -H 'Content-Type: application/json;charset=UTF-8'
-
Получаем ответ.Response type=json
{ "type": "Your request file didn't validate with your validation rules", "title": "Validation Exception", "invalidParams": [ { "rowIndex": 0, "ruleName": "isMatchByRegexp", "field": "", "message": "false" } ], "error": null, "messageChain": null }
Как и было ожидаемо, мы получили ошибку валидации, так как из первого правила мы получали 3 цифры, а во втором проверяли, что результат первого правила соответствует любому цифробуквенному символу, включая нижнее подчеркивание, но в количестве равному 1.
В демопримерах реализованы стандартные сценарии, демонстрирующие работу отдельных сервисов Платформы ГосТех. Отправка тестовых запросов в демопримерах позволит вам ознакомиться с функциями того или иного сервиса. Доступные демопримеры и описания реализованной в них функциональности представлены ниже.
Справочники GET
Получение доступных справочников и данных об их элементах по коду на примере трёх общедоступных классификаторов: ОКЕИ, ОКВЭД, ОКОПФ
Справочники POST
Получение данных из доступных справочников на примере трёх общедоступных классификаторов: ОКЕИ, ОКВЭД, ОКОПФ. Настройка отображаемых столбцов