【问题标题】:Cumulocity: Two response templates for c8y_Restart, one with and one without <BASE>, why?Cumulocity:c8y_Restart 的两个响应模板,一个有 <BASE>,一个没有 <BASE>,为什么?
【发布时间】:2018-12-29 16:51:39
【问题描述】:

我正在实现一个客户端来连接到使用 Cumulocity 的物联网。在他们的示例实现中,他们有一个模板集合。但是文档很差。我找到了两个 c8y_Restart 的响应模板,但没有这个必要性。

我已经从 Cumulocity 发送了重新启动请求,并用我的实现来回答它们。使用模板 530 可以成功设置状态。 使用模板 501,我请求所有 PENDING 操作。但是所有答案都带有响应 511 而没有响应 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_Restartiddescription 被返回。

JSONPath 的文档说@ 对应于当前对象。模板 521 何时有用或使用?

【问题讨论】:

    标签: cumulocity


    【解决方案1】:

    通常对于 SmartREST 1.0,您通常需要 2 个响应模板进行操作。第一个(您的 511)用于直接查询 PENDING 操作。这个请求总是返回一个数组,这就是为什么你需要一个带有数组基数的模板($.operations)来循环遍历它。

    如果您订阅实时操作,则需要第二个模板。在这种情况下,您收到的操作始终是单个对象,这就是为什么您不能在此模板中使用 $.operations 才能使其工作。这基本上是您的模板 521,这也是您在查询 PENDING 操作时不会收到任何 521 响应的原因。

    我建议避免使用 @ 并始终使用 $。使用 $ 你总是知道会发生什么,但使用 @ 取决于 Cumulocity 如何管理 JsonPath,它可能会导致你不想要的结果。

    SmartRest 2.0 for MQTT 解决了每次操作需要 2 个响应模板的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多