list - 在 RESTCONF 中获取所有列表实例是否合法?
问题描述
给定以下 YANG 定义,在模块中test
:
list machine {
key "name";
leaf "name" {
type string;
}
}
在数据树中:
"machine" : [
{ "name": "a" },
{ "name": "b" },
{ "name": "c" }
]
我想知道下面的请求是否符合RESTCONF?
GET /restconf/data/test/machine
此请求应返回所有列表实例。
我有这个问题是因为我对 RESTCONF 的话没有清楚的理解。在 RESTCONF 3.5.3中,
如果路径表达式中的数据节点是 YANG 列表节点,则列表的键值(如果有)必须根据以下规则进行编码:
o 表示 YANG 列表的数据资源的密钥叶值必须使用一个路径段 [RFC3986] 进行编码。
o 如果只有一个键叶值,则路径段由列表名称、后跟“=”字符、后跟单个键叶值来构造。
(if any)
意思是以下两种意思中的哪一种?(key
对于非配置,该语句不是必须的list
。所以有keyed lists
和non-keyed lists
。)
用户可以自由地为键控列表指定键值。这
(if any)
是关于“如果指定了键值”。如果他们指定,则键值必须遵循有关键值的规则。如果他们没有指定,那么您不必遵循有关键值的规则。以我的 YANG 定义为例,这两个请求都是正确的:GET /restconf/data/test/machine // get all list instances GET /restconf/data/test/machine=a // get the list instance keyed "a"
用户必须为键控列表指定键值。这
(if any)
是关于“列表是否被键入”。在这种理解中,将有:GET /restconf/data/test/machine // wrong request, can't get all list instanecs GET /restconf/data/test/machine=a // ok, get the list instance keyed "a"
第二种理解来自叶列表的同一部分中的相似词:
如果路径表达式中的数据节点是 YANG 叶列表节点,则叶列表值必须根据以下规则进行编码:
o 叶列表的标识符必须使用一个路径段 [RFC3986] 进行编码。
o 路径段由叶列表名称、“=”字符和叶列表值构成(例如,/restconf/data/top-leaflist=fred)。
叶子列表的词没有(if any)
,所以你不能使用像/restconf/data/top-leaflist
. 您必须使用=fred
指定叶列表实例。那么如果leaf-list实例不能作为一个整体检索,为什么list实例可以作为一个整体检索(在理解1中)?叶列表实例和列表实例都是数据资源,它们在概念上是等价的。
谢谢,
解决方案
正确的解释是 1. “如果有”是指键值,而不是 YANG 键语句。RESTCONF GET 可以获取多个列表实例,但只能采用 JSON 编码(格式良好的 XML 不允许多个根元素)。这也是检索无键非配置(状态)列表实例的唯一方法。
如果仅允许通过 GET 获取单个列表条目,则其相应的 RFC 部分将使用 MUST 明确说明这一点 - 如果您查看第4.7 节 p3中 DELETE 的措辞,则存在此类文本,但有GET 没有等价物。
检索多个叶子列表实例也是可以的。这可能是检索某些此类实例的唯一方法,因为(在 YANG 1.1 中)非配置叶列表允许重复值。缺少的“如果有的话”很可能是编辑遗漏。
请注意,3.5.3 中的文本只解释了 URI 是如何形成的,它没有说明 RESTCONF 操作如何利用这些 URI。
推荐阅读
- javascript - 如何在 Material-UI 中创建一个与 OutlinedInput 齐平的 InputAdornment IconButton?
- python - 从文件夹中获取图像,合并两个图像,然后将变体图像输出到具有唯一文件名的新文件夹中
- android - 从 Firebase 错误在地图上添加标记
- node.js - 退出NodeJS主进程是否会导致所有子进程也存在
- java - persistence.xml 中的休眠刷新模式始终不起作用
- c - 为什么以及如何从 /etc/rc.local 运行系统进程?
- powershell - 如何在参数块中接受“活动”对象或相同类型的反序列化对象?
- powershell - 如何在 -ContentMatchQuery 中使用 GUI 或 KQL 和特定的多个关键字创建电子数据展示内容搜索
- python - PyQt5 在以下场景中使用 Siganls 和 Slotes
- python-3.x - StatsModels 的 predict 函数如何与 scikit-learn 的 roc_auc_score 交互?