我正在实现一个客户端以连接到使用Cumulocity的物联网。在示例实现中,它们具有模板集合。但是文档很差。我为c8y_Restart找到了两个响应模板,但是没有必要这样做。
我已经从Cumulocity发送了重新启动请求,并通过我的实现对其进行了答复。可以使用模板530成功设置状态。 对于模板501,我请求所有挂起操作。但是所有答案都带有响应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_Restart
id
和description
中的字段。
JSONPath的文档说@
对应于当前对象。模板521何时有用或使用?
答案 0 :(得分:1)
通常,对于SmartREST 1.0,您通常需要2个响应模板来进行操作。第一个(您的511)用于直接查询PENDING操作。此请求始终返回一个数组,这就是为什么您需要一个以数组为基础的模板($ .operations)来遍历它的原因。
如果您订阅实时操作,则需要第二个模板。在这种情况下,您收到的操作始终是单个对象,这就是为什么必须在此模板中不要包含$ .operations才能使其正常工作的原因。这基本上是您的模板521,这也是为什么查询PENDING操作时对521没有任何响应的原因。
我建议避免使用@并始终使用$。使用$可以始终知道会发生什么,但是使用@取决于Cumulocity如何管理JsonPath,它可能会导致您没有意图的结果。
用于MQTT的SmartRest 2.0解决了每个操作需要2个响应模板的问题。