Отсутствует xml заголовок в файле, экспортированном через REST


file.xml (33,3 КБ)

Почему структура файла не такая, как при ручном экспорте через АРМ??
Это крайне неудобно.

При экспорте через соответствующий запрос REST API есть возможность экспортировать данные только в формате JSON, а не XML, как при экспорте в Рабочем месте оператора, и приложенный вами файл как раз в формате JSON.

Стоит ли рассматривать вашу тему как предложение добавить возможность экспорта через REST API в формате XML?

Мне кажется, в JSON файл получается компактнее. Хочу внести предложение, чтобы в АРМ оператора формировался файл экспорта в том же формате, что и в REST API, то есть в формате JSON.

Вы можете создать по этому поводу отдельное предложение по улучшению. Текущая тема все таки посвящена обсуждению REST API и тематически не подходит для этого.

Но мне пока никак не удается импортировать экспортированные данные. Получаю ошибку: 400 Error: Bad Request
Response body:
{
“type”: “RFC 9110 - HTTP Semantics”,
“title”: “One or more validation errors occurred.”,
“status”: 400,
“errors”: {
“importData”: [
“The importData field is required.”
]
},
“traceId”: “00-bb8926488b8beabf707fd19fc0ec8ee6-84d6ae159515cd94-00”
}

Данные для импорта выглядят вот так, тут нет ошибок?

<?xml version="1.0" encoding="UTF-8"?>

{
“version”: 3,
“measurePoint”: null,
“measurePointEx”: [
{
“customId”: “299”,
“currentConsumption”: null,
“monthConsumption”: null,
“dayConsumption”: [
{
“parameters”: [
{
“dataParameter”: 1,
“name”: “T_in”,
“value”: 56.01217269897461,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 2,
“name”: “T_out”,
“value”: 48.446659088134766,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 3,
“name”: “T_cw”,
“value”: 5,
“isCalculated”: true,
“isBad”: false
},
{
“dataParameter”: 4,
“name”: “T_outdoor”,
“value”: 5.099999904632568,
“isCalculated”: true,
“isBad”: false
},
{
“dataParameter”: 12,
“name”: “P_in”,
“value”: 7.60000467300415,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 13,
“name”: “P_out”,
“value”: 7.39999532699585,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 5,
“name”: “M_in”,
“value”: 206.322998046875,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 6,
“name”: “M_out”,
“value”: 195.91812133789062,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 50,
“name”: “M_delta”,
“value”: 10.404864311218262,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 7,
“name”: “V_in”,
“value”: 209.3400115966797,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 8,
“name”: “V_out”,
“value”: 198.0499725341797,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 49,
“name”: “V_delta”,
“value”: 11.29000186920166,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 9,
“name”: “Q_in”,
“value”: 10.54591178894043,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 10,
“name”: “Q_out”,
“value”: 8.532179832458496,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 11,
“name”: “Q_delta”,
“value”: 2.013731002807617,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 15,
“name”: “NormalOperationDuration”,
“value”: 24,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 41,
“name”: “FlowUnderrunDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 42,
“name”: “FlowOverrunDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 43,
“name”: “TempDiffLowDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 44,
“name”: “NoPowerDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 45,
“name”: “IncidentDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 92,
“name”: “M_balance”,
“value”: 5.04299782850885,
“isCalculated”: true,
“isBad”: false
}
],
“dateTime”: “2025-04-01T00:00:00”,
“attributes”: 0,
“calculatedValues”: null,
“badValues”: null
},
{
“parameters”: [
{
“dataParameter”: 1,
“name”: “T_in”,
“value”: 56.03102493286133,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 2,
“name”: “T_out”,
“value”: 48.44664001464844,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 3,
“name”: “T_cw”,
“value”: 5,
“isCalculated”: true,
“isBad”: false
},
{
“dataParameter”: 12,
“name”: “P_in”,
“value”: 7.60000467300415,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 13,
“name”: “P_out”,
“value”: 7.39999532699585,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 5,
“name”: “M_in”,
“value”: 207.88906860351562,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 6,
“name”: “M_out”,
“value”: 195.96641540527344,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 50,
“name”: “M_delta”,
“value”: 11.92265796661377,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 7,
“name”: “V_in”,
“value”: 210.9300079345703,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 8,
“name”: “V_out”,
“value”: 198.10000610351562,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 49,
“name”: “V_delta”,
“value”: 12.829998970031738,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 9,
“name”: “Q_in”,
“value”: 10.629706382751465,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 10,
“name”: “Q_out”,
“value”: 8.534538269042969,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 11,
“name”: “Q_delta”,
“value”: 2.0951671600341797,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 15,
“name”: “NormalOperationDuration”,
“value”: 24.100000381469727,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 41,
“name”: “FlowUnderrunDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 42,
“name”: “FlowOverrunDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 43,
“name”: “TempDiffLowDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 44,
“name”: “NoPowerDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 45,
“name”: “IncidentDuration”,
“value”: 0,
“isCalculated”: false,
“isBad”: false
},
{
“dataParameter”: 92,
“name”: “M_balance”,
“value”: 5.7351057690063385,
“isCalculated”: true,
“isBad”: false
}
],
“dateTime”: “2025-04-02T00:00:00”,
“attributes”: 0,
“calculatedValues”: null,
“badValues”: null
}
],
“hourConsumption”: null,
“deviceErrors”: null,
“totals”: null
}
],
“devices”: null
}

curl -X 'PUT' \
  'http://10.104.0.60:10010/api/v1/Data/Import?overwrite=true' \
  -H 'accept: text/plain' \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoieGxzbSIsIkFjY291bnRJZCI6IjE1MiIsIlRva2VuVmVyc2lvbiI6IjIiLCJBcHBsaWNhdGlvbiI6InN0cmluZyIsIlRva2VuSWQiOiI4MDczNCIsIlJlcXVpcmVFbGV2YXRpb24iOiIwIiwibmJmIjoxNzQ0Mjc1ODkyLCJleHAiOjE3NzY0MTY2OTIsImlzcyI6IkxFUlMgQU1SIFNlcnZlciIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6MTAwMDAifQ.85k5OCzhuA-9x-gRREb1WbzuhLFI8ffkP6eLfHnx6f4' \
  -H 'Content-Type: application/xml+lers' \
  -d '<?xml version="1.0" encoding="UTF-8"?>
<!-- XML example cannot be generated; root element name is undefined -->
{
  "version": 3,
  "measurePoint": null,
  "measurePointEx": [
    {
      "customId": "299",
      "currentConsumption": null,
      "monthConsumption": null,
      "dayConsumption": [
        {
          "parameters": [
            {
              "dataParameter": 1,
              "name": "T_in",
              "value": 56.01217269897461,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 2,
              "name": "T_out",
              "value": 48.446659088134766,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 3,
              "name": "T_cw",
              "value": 5,
              "isCalculated": true,
              "isBad": false
            },
            {
              "dataParameter": 4,
              "name": "T_outdoor",
              "value": 5.099999904632568,
              "isCalculated": true,
              "isBad": false
            },
            {
              "dataParameter": 12,
              "name": "P_in",
              "value": 7.60000467300415,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 13,
              "name": "P_out",
              "value": 7.39999532699585,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 5,
              "name": "M_in",
              "value": 206.322998046875,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 6,
              "name": "M_out",
              "value": 195.91812133789062,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 50,
              "name": "M_delta",
              "value": 10.404864311218262,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 7,
              "name": "V_in",
              "value": 209.3400115966797,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 8,
              "name": "V_out",
              "value": 198.0499725341797,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 49,
              "name": "V_delta",
              "value": 11.29000186920166,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 9,
              "name": "Q_in",
              "value": 10.54591178894043,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 10,
              "name": "Q_out",
              "value": 8.532179832458496,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 11,
              "name": "Q_delta",
              "value": 2.013731002807617,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 15,
              "name": "NormalOperationDuration",
              "value": 24,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 41,
              "name": "FlowUnderrunDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 42,
              "name": "FlowOverrunDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 43,
              "name": "TempDiffLowDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 44,
              "name": "NoPowerDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 45,
              "name": "IncidentDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 92,
              "name": "M_balance",
              "value": 5.04299782850885,
              "isCalculated": true,
              "isBad": false
            }
          ],
          "dateTime": "2025-04-01T00:00:00",
          "attributes": 0,
          "calculatedValues": null,
          "badValues": null
        },
        {
          "parameters": [
            {
              "dataParameter": 1,
              "name": "T_in",
              "value": 56.03102493286133,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 2,
              "name": "T_out",
              "value": 48.44664001464844,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 3,
              "name": "T_cw",
              "value": 5,
              "isCalculated": true,
              "isBad": false
            },
            {
              "dataParameter": 12,
              "name": "P_in",
              "value": 7.60000467300415,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 13,
              "name": "P_out",
              "value": 7.39999532699585,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 5,
              "name": "M_in",
              "value": 207.88906860351562,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 6,
              "name": "M_out",
              "value": 195.96641540527344,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 50,
              "name": "M_delta",
              "value": 11.92265796661377,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 7,
              "name": "V_in",
              "value": 210.9300079345703,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 8,
              "name": "V_out",
              "value": 198.10000610351562,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 49,
              "name": "V_delta",
              "value": 12.829998970031738,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 9,
              "name": "Q_in",
              "value": 10.629706382751465,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 10,
              "name": "Q_out",
              "value": 8.534538269042969,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 11,
              "name": "Q_delta",
              "value": 2.0951671600341797,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 15,
              "name": "NormalOperationDuration",
              "value": 24.100000381469727,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 41,
              "name": "FlowUnderrunDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 42,
              "name": "FlowOverrunDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 43,
              "name": "TempDiffLowDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 44,
              "name": "NoPowerDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 45,
              "name": "IncidentDuration",
              "value": 0,
              "isCalculated": false,
              "isBad": false
            },
            {
              "dataParameter": 92,
              "name": "M_balance",
              "value": 5.7351057690063385,
              "isCalculated": true,
              "isBad": false
            }
          ],
          "dateTime": "2025-04-02T00:00:00",
          "attributes": 0,
          "calculatedValues": null,
          "badValues": null
        }
      ],
      "hourConsumption": null,
      "deviceErrors": null,
      "totals": null
    }
  ],
  "devices": null
}'

XML и JSON форматы совершенно разные и не совместимы. У них разная структура. Вы зачем то склеиваете эти 2 формата в одном файле, но это не имеет никакого смысла. В этом и есть ошибка.

Это не я зачем-то склеиваю два формата в одном файле, а ваш /api/swagger/index.html подставляет в поле с данными эти строки:
<?xml version="1.0" encoding="UTF-8"?>


Я эти строки пробовал убирать, но все равно получаю ошибку 400

Но мне пока никак не удается импортировать экспортированные данные. Получаю ошибку: 400 Error: Bad Request
Я копирую содержимое поля Response body из Экспорта в поле Данные для импорта Импорта, но получаю ошибку

Вот Экспорт

Вот Импорт:

Вот Ошибка:

В запросе импорта есть возможность выбирать формат данных (параметр Request body). У вас сейчас стоит xml+lers. Выберите json и повторите попытку импорта.

Спасибо за помощь.

Еще один вопрос. Мне советовали передавать application/xml+lers в запросе Экспорта и Импорта. Теперь всё поменялось?

По какой то причине экспорт реализовали только для JSON. Ранее я писал:

Я так понимаю, все таки стоит?

Спасибо за сообщение. Действительно, поддержка типа application/xml+lers оказазалсь реализованной не до конца, поэтому сейчас возможен экспорт только в JSON. А JSON нельзя импортировать через АРМ оператора.

Мы поправили эту недоработку в 3.61.2. Попробуйте после обновления экспортировать данные командой

curl -f -X "GET" -H "accept: application/xml+lers" -H "Authorization: Bearer $LERS_IMPORT_TOKEN" -G --data "dt=Day" --data "from=30d" --data-urlencode "nodeGroup=Мои" "http://localhost:10000/api/v1/Data/Export/2025-01-02/2025-05-01" > c:\temp\file.xml

Как я понимаю, предложение по улучшению, для экспорта через REST API в формате XML, уже не требуется, так как Антон Чичков сообщил, что это будет добавлено в версию 3.61.2

у меня снова вопрос по экспорту и импорту: какие есть ограничения для экспорта и для импорта?
Может быть, есть ограничения по количеству точек учета, по количеству параметров, по размеру файлов, таймауты на обращения к БД?

У меня при экспорте пока проблем не возникает. А при импорте очень большого файла, curl выдал ошибку:


При импорте файла размером больше 100М curl почти сразу закрывается, не выдавая никаких сообщений об ошибках.
Импорт файлов с размером 76М заканчивается успешно.