Cumulocity:c8y_Restart 的两个响应模板,一个有 <BASE>,一个没有 <BASE>,为什么?
Cumulocity: Two response templates for c8y_Restart, one with and one without <BASE>, why?
我正在实现一个连接到使用 Cumulocity 的 Cloud of Things 的客户端。在他们的示例实现中,他们有一个模板集合。但是文档很差。我找到了 c8y_Restart 的两个响应模板,但没有必要这样做。
我已经从 Cumulocity 发送了重启请求,并用我的实现方式回复了它们。使用模板530可以成功设置状态。
使用模板 501,我请求所有 PENDING 操作。但是所有答案都带有响应 511 和 none on 521.
这些是模板 - 请忽略转义的 " 和新行 - 它们来自 C++ 代码
"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 的docu 说@
对应于当前对象。模板521什么时候有用或者用到?
一般来说,对于 SmartREST 1.0,您通常需要 2 个响应模板来进行操作。第一个(您的 511)用于直接查询 PENDING 操作。这个请求总是 returns 一个数组,这就是为什么你需要一个以数组为基础的模板 ($.operations) 以便遍历它。
如果您订阅实时操作,则需要第二个模板。在这种情况下,您收到的操作始终是单个对象,这就是为什么您不能在此模板中包含 $.operations 以使其工作。这基本上就是您的模板 521,这也是您在查询 PENDING 操作时不会收到任何 521 响应的原因。
我建议避免使用 @ 并始终使用 $。使用 $ 你总是知道会发生什么,但使用 @ 取决于 Cumulocity 如何管理 JsonPath,它可能会导致你不想要的结果。
SmartRest 2.0 for MQTT 解决了每次操作需要 2 个响应模板的问题。
我正在实现一个连接到使用 Cumulocity 的 Cloud of Things 的客户端。在他们的示例实现中,他们有一个模板集合。但是文档很差。我找到了 c8y_Restart 的两个响应模板,但没有必要这样做。
我已经从 Cumulocity 发送了重启请求,并用我的实现方式回复了它们。使用模板530可以成功设置状态。 使用模板 501,我请求所有 PENDING 操作。但是所有答案都带有响应 511 和 none on 521.
这些是模板 - 请忽略转义的 " 和新行 - 它们来自 C++ 代码
"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 的docu 说@
对应于当前对象。模板521什么时候有用或者用到?
一般来说,对于 SmartREST 1.0,您通常需要 2 个响应模板来进行操作。第一个(您的 511)用于直接查询 PENDING 操作。这个请求总是 returns 一个数组,这就是为什么你需要一个以数组为基础的模板 ($.operations) 以便遍历它。
如果您订阅实时操作,则需要第二个模板。在这种情况下,您收到的操作始终是单个对象,这就是为什么您不能在此模板中包含 $.operations 以使其工作。这基本上就是您的模板 521,这也是您在查询 PENDING 操作时不会收到任何 521 响应的原因。
我建议避免使用 @ 并始终使用 $。使用 $ 你总是知道会发生什么,但使用 @ 取决于 Cumulocity 如何管理 JsonPath,它可能会导致你不想要的结果。
SmartRest 2.0 for MQTT 解决了每次操作需要 2 个响应模板的问题。