给出以下杨定义,在模块test中
list machine {
key "name";
leaf "name" {
type string;
}
}在数据树中:
"machine" : [
{ "name": "a" },
{ "name": "b" },
{ "name": "c" }
]我想知道以下请求是否符合RESTCONF?
GET /restconf/data/test/machine预期此请求将返回所有list实例。
我有这个问题,因为我对RESTCONF的单词没有一个清晰的理解。在RESTCONF 3.5.3中,
如果路径表达式中的数据节点是杨列表节点,则必须根据以下规则对列表的键值(,如果有)进行编码:o表示杨列表的数据资源的键叶值必须使用一个路径段RFC3986进行编码。如果只有一个键叶值,则路径段的构造方法是使用列表名称,后面跟着"=“字符,然后是单键叶值。
(if any)是指以下两种含义中的哪一种?( key语句对于非配置list来说不是必需的。所以有keyed lists和non-keyed lists。
(if any)是关于“如果指定了键值”。如果它们指定了键值,则键值必须遵循有关键值的规则。如果它们没有指定,那么您就不必遵守有关键值的规则。以我的YANG定义为例,这两个请求都是正确的:
获取/restconf/data/test/machine // GET所有列表实例-- get /restconf/data/test/machine=a / GET键为"a“的列表实例(if any)是关于“如果列表是键还是不键的”。根据这一理解,将有:
获取/restconf/data/test/machine //错误请求,不能获得所有列表实例--获取/restconf/data/test/machine=a // ok,获取按"a“键的列表实例第二种理解来自于同一节中关于叶表的类似词:
如果路径表达式中的数据节点是杨叶列表节点,那么必须按照以下规则对叶列表值进行编码:o叶列表的标识符必须使用一个路径段RFC3986进行编码。O路径段的构造方法是使用叶列表名称,后面跟着"=“字符,然后是叶列表值(例如,/restconf/data/top传单列表=fred)。
叶列表的单词没有(if any),所以您不能使用像/restconf/data/top-leaflist这样的URL。您必须使用=fred来指定叶列表实例。那么,如果叶列表实例不能作为一个整体来检索,那么为什么列表实例可以作为一个整体来检索(在理解1中)?叶列表实例和列表实例都是数据资源,它们在概念上是等价的.
谢谢,
发布于 2019-05-15 07:19:40
正确的解释是1。“如果有的话”指的是关键值,而不是杨键语句。RESTCONF可以获取一个列表的多个实例,但只能在JSON编码中进行(格式良好的XML不允许多个根元素)。这也是检索无键非配置(状态)列表实例的唯一方法。
如果只允许通过GET获取单个列表条目,则其相应的RFC部分将明确声明这一点,必须这样做--如果您查看4.7,p3节中删除的措辞,则存在这样的文本,但GET没有等效的内容。
还可以检索多个叶列表实例。这可能是检索某些此类实例的唯一方法,因为(在YANG 1.1中)非配置叶列表允许重复值。缺少的“如果有的话”很可能是编辑上的遗漏。
请注意,3.5.3中的文本只解释了URI是如何形成的,并没有说明RESTCONF操作是如何利用这些URI的。
https://stackoverflow.com/questions/56124918
复制相似问题