GET所有RESTCONF中的列表实例是否合法?
Is it legal to GET all list instances in RESTCONF?
给定以下 YANG 定义,在模块 test
中:
list machine {
key "name";
leaf "name" {
type string;
}
}
在数据树中:
"machine" : [
{ "name": "a" },
{ "name": "b" },
{ "name": "c" }
]
我想知道下面的请求是否符合RESTCONF?
GET /restconf/data/test/machine
此请求预计 return 所有列表实例。
我有这个问题是因为我对RESTCONF的这几个词没有很清楚的理解。在 RESTCONF 3.5.3,
If a data node in the path expression is a YANG list node, then the
key values for the list (if any) MUST be encoded according to the
following rules:
o The key leaf values for a data resource representing a YANG list
MUST be encoded using one path segment [RFC3986].
o If there is only one key leaf value, the path segment is
constructed by having the list name, followed by an "=" character,
followed by the single key leaf value.
(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"
第二个理解来自leaf-lists同节的相似词:
If a data node in the path expression is a YANG leaf-list node, then
the leaf-list value MUST be encoded according to the following rules:
o The identifier for the leaf-list MUST be encoded using one path
segment [RFC3986].
o The path segment is constructed by having the leaf-list name,
followed by an "=" character, followed by the leaf-list value
(e.g., /restconf/data/top-leaflist=fred).
叶子列表的单词没有 (if any)
,因此您不能使用 URL,如 /restconf/data/top-leaflist
。您必须使用 =fred
来指定叶列表实例。所以如果叶列表实例不能作为一个整体检索,为什么列表实例可以作为一个整体检索(在理解1中)? leaf-list实例和list实例都是数据资源,概念上是等价的。
谢谢,
正确的解释是1。“if any”是指键值,而不是YANG键语句。 RESTCONF GET 可以获取列表的多个实例,但只能以 JSON 编码(格式良好的 XML 不允许多个根元素)。这也是检索 key-less non-configuration(状态)列表实例的唯一方法。
如果只允许通过 GET 获取单个列表条目,则其相应的 RFC 部分将使用 MUST 明确说明这一点 - 如果您查看 4.7, p3 部分中的 DELETE 措辞,存在这样的文本,但没有 GET 的等效文本。
也可以检索多个 leaf-list 实例。这可能是检索某些此类实例的唯一方法,因为(在 YANG 1.1 中)non-configuration leaf-list 允许重复值。缺少的“如果有”很可能是编辑遗漏。
请注意,3.5.3 中的文本仅解释了 URI 的形成方式,并未说明 RESTCONF 操作如何利用这些 URI。
给定以下 YANG 定义,在模块 test
中:
list machine {
key "name";
leaf "name" {
type string;
}
}
在数据树中:
"machine" : [
{ "name": "a" },
{ "name": "b" },
{ "name": "c" }
]
我想知道下面的请求是否符合RESTCONF?
GET /restconf/data/test/machine
此请求预计 return 所有列表实例。
我有这个问题是因为我对RESTCONF的这几个词没有很清楚的理解。在 RESTCONF 3.5.3,
If a data node in the path expression is a YANG list node, then the key values for the list (if any) MUST be encoded according to the following rules:
o The key leaf values for a data resource representing a YANG list MUST be encoded using one path segment [RFC3986].
o If there is only one key leaf value, the path segment is constructed by having the list name, followed by an "=" character, followed by the single key leaf value.
(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"
第二个理解来自leaf-lists同节的相似词:
If a data node in the path expression is a YANG leaf-list node, then the leaf-list value MUST be encoded according to the following rules:
o The identifier for the leaf-list MUST be encoded using one path segment [RFC3986].
o The path segment is constructed by having the leaf-list name, followed by an "=" character, followed by the leaf-list value (e.g., /restconf/data/top-leaflist=fred).
叶子列表的单词没有 (if any)
,因此您不能使用 URL,如 /restconf/data/top-leaflist
。您必须使用 =fred
来指定叶列表实例。所以如果叶列表实例不能作为一个整体检索,为什么列表实例可以作为一个整体检索(在理解1中)? leaf-list实例和list实例都是数据资源,概念上是等价的。
谢谢,
正确的解释是1。“if any”是指键值,而不是YANG键语句。 RESTCONF GET 可以获取列表的多个实例,但只能以 JSON 编码(格式良好的 XML 不允许多个根元素)。这也是检索 key-less non-configuration(状态)列表实例的唯一方法。
如果只允许通过 GET 获取单个列表条目,则其相应的 RFC 部分将使用 MUST 明确说明这一点 - 如果您查看 4.7, p3 部分中的 DELETE 措辞,存在这样的文本,但没有 GET 的等效文本。
也可以检索多个 leaf-list 实例。这可能是检索某些此类实例的唯一方法,因为(在 YANG 1.1 中)non-configuration leaf-list 允许重复值。缺少的“如果有”很可能是编辑遗漏。
请注意,3.5.3 中的文本仅解释了 URI 的形成方式,并未说明 RESTCONF 操作如何利用这些 URI。