Cumulocity: Два шаблона ответов для c8y_Restart, один с ‹BASE›, другой без него, почему?

Я реализую клиент для подключения к Cloud of Things, который использует Cumulocity. В их примере реализации у них есть коллекция шаблонов. Но документация плохая. Я нашел два шаблона ответа для c8y_Restart, но не вижу необходимости в этом.

Я уже отправил Restart-запросы от Cumulocity и ответил на них своей реализацией. Статус можно успешно установить с помощью шаблона 530. С помощью шаблона 501 я запрашиваю все операции PENDING. Но все ответы приходят с ответом 511 и ни одного с ответом 521.

Это шаблоны - пожалуйста, игнорируйте экранированные " и новые строки - они из кода С++

"10,501,GET,/devicecontrol/operations?deviceId=%%&nocache=true&status=%%,,application/vnd.com.nsn.cumulocity.operationCollection+json,%%,UNSIGNED STRING,\n"
"11,511,$.operations,\"$.c8y_Restart\",\"$.id\",\"$.description\"\n"
"11,521,,\"@.c8y_Restart\",\"@.id\",\"@.description\"\n"
"10,530,PUT,/devicecontrol/operations/%%,application/vnd.com.nsn.cumulocity.operation+json,application/vnd.com.nsn.cumulocity.operation+json,%%,UNSIGNED STRING,\"{\"\"status\"\": \"\"%%\"\"}\"\n"

Что я получаю, так это то, что $.operations является селектором списка именованных операций родителя. Из поля c8y_Restart возвращается id и description.

Документ JSONPath говорит, что @ соответствует текущему объекту. Когда шаблон 521 полезен или используется?


person John Bart    schedule 21.12.2018    source источник


Ответы (1)


В целом для SmartREST 1.0 обычно требуется 2 шаблона ответов для операций. Первый (ваш 511) предназначен для прямого запроса ожидающих операций. Этот запрос всегда возвращает массив, поэтому вам нужен шаблон с базой массива ($.operations), чтобы перебирать его.

Второй шаблон требуется, если вы подписываетесь на операции в реальном времени. В этом случае операции, которые вы получаете, всегда являются отдельными объектами, поэтому у вас не должно быть $.operations в этом шаблоне, чтобы он работал. Это в основном ваш шаблон 521, и именно поэтому вы не получите никакого ответа для 521 при запросе операций PENDING.

Я бы рекомендовал избегать использования @ и всегда использовать $. Используя $, вы всегда знаете, что происходит, но использование @ зависит от того, как Cumulocity управляет JsonPath, и это может привести к результатам, которых вы не хотели.

SmartRest 2.0 для MQTT решает проблему необходимости использования 2 шаблонов ответов для каждой операции.

person TyrManuZ    schedule 29.12.2018