Примеры запросов

Создание пользователя c переданным Id

Необходимо убедиться, что пользователя c rn = testRN, systemId = 00000000-0000-0001-0000-000000000001 и id = 00000000-0000-0001-0000-000000000001 нет в системе.
Запрос:
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\":\"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=json
curl -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
}

Создание пользователя без id

Запрос:
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 "{\"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"
}

Редактирование пользователя

  1. Редактирование пользователя.
    Запрос:
    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"
    }
    

Создание профиля с правилом валидации isEveryInArray

Тело запроса:
Запрос 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.
Возвращается идентификатор созданного профиля.

Проверка правильного заполнения поля Email (значение соответствует синтаксису email)

Содержание файла профиля справочника:
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=txt
ivan@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"
    }
  ]
}

Пример с выборкой сервера из поля email

Содержание файла профиля справочника:
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=json
ivan@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'

Необходимо выбрать минимальное значение среди имеющихся колонок и перезаписать его в колонку min, предварительно отметив поле как isCalculated.
Данные в файле:
firstsecondthirdmin
3
3124
  1. Создадим профиль с 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
    }
    
  2. Отправляем запрос с данными для начала парсинга.
    PartDescription
    file
    Файл для загрузки
    dictionaryCode
    Код справочника
    dictionaryName
    Название справочника
    profileId
    ID профиля
    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' \
    
  3. В ответ получаем ID задания.
    8212ba1a-e442-4985-b118-8188303e96d3
  4. Отправляем запрос для получения данных.
    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'
    
  5. Получаем ответ.
    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'

Необходимо посчитать сумму значений имеющихся колонок и записать его в колонку sum, предварительно отметив поле как isCalculated.
Данные в файле:
firstsecondthirdfourfive
312
-3124620
312
-3124630
  1. Создаем профиль с 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
    }
    
  2. Отправляем запрос с данными для начала парсинга.
    PartDescription
    file
    Файл для загрузки
    dictionaryCode
    Код справочника
    dictionaryName
    Название справочника
    profileId
    ID профиля
    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' \
    
  3. Получаем в ответ ID задания.
    e7de30b7-8fec-4693-beb4-a93da6f08cc4
  4. Отправляем запрос для получения данных.
    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'
    
  5. Получаем ответ.
    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 записалась сумма значений из всех имеющихся колонок в десятичном представлении.

Динамические поля 'div'

Необходимо поделить значение колонки first на значение колонки second и записать результат в колонку div, предварительно отметив поле как isCalculated.
Данные в файле:
firstsecond
225
15,2
  1. Создаем профиль с 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
    }
    
  2. Отправляем запрос с данными для начала парсинга.
    PartDescription
    file
    Файл для загрузки
    dictionaryCode
    Код справочника
    dictionaryName
    Название справочника
    profileId
    ID профиля
    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' \
    
  3. Получаем в ответ ID задания.
    fc373bc0-83b7-4e34-99d4-9379e1847da5
  4. Отправляем запрос для получения данных.
    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'
    
  5. Получаем ответ.
    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 в десятичном представлении.

Валидатор 'isMatchByRegexp' и динамическое поле 'getRegexp'

Использование regular expression для валидации: допустим, у нас есть колонка A (тип данных - число), и оттуда мы хотим взять первые три числа выражением "\d3", затем проверить, соответвует ли вычисленное поле, выражению "\w".
Регулярные выражения:
  • выражение "\d3" соответствует цифровому символу в количестве трех знаков;
  • выражение "\w" соответствует любому цифро-буквенному символу, включая нижнее подчеркивание, но в количестве равному 1.
  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
    }
    
  2. Отправляем запрос с данными для начала парсинга.
    PartDescription
    file
    Файл для загрузки
    dictionaryCode
    Код справочника
    dictionaryName
    Название справочника
    profileId
    ID профиля
    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' \
    
  3. Получаем в ответ ID задания.
    b3e347eb-dd95-4c3f-8b03-457bebf351af
  4. Отправляем запрос для получения данных.
    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'
    
  5. Получаем ответ.
    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
Получение данных из доступных справочников на примере трёх общедоступных классификаторов: ОКЕИ, ОКВЭД, ОКОПФ. Настройка отображаемых столбцов
Предыдущий раздел
Фоновые задачи
Следующий раздел
Часто задаваемые вопросы
Была ли страница полезной?