-->

它是合法的,得到RESTCONF所有的列表实例?(Is it legal to GET all li

2019-09-29 05:36发布

考虑下面的杨定义,模块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 ,

如果路径中表达一个数据节点是杨列表节点,则该列表( 如果有的话 )的键值必须根据下面的规则进行编码:

o对于表示杨列表必须使用一个路径段[RFC3986]被编码数据资源的关键叶值。

o如果只有一个键叶值,路径段被具有列表名,接着是“=”字符,接着是单个密钥叶子值构成。

(if any)是指以下两种含义是哪一个? (在key语句是不是非配置的必备list 。因此,有keyed listsnon-keyed lists 。)

  1. 用户可以自由地对密钥列表指定键值。 的(if any)是关于“如果指定键值。” 如果他们然后指定键值必须遵循有关键值的规则。 如果他们不然后指定你没有遵循有关键值的规则。 就拿我杨的定义,例如,这两个请求都是正确的:

     GET /restconf/data/test/machine // get all list instances GET /restconf/data/test/machine=a // get the list instance keyed "a" 
  2. 用户必须为密钥列表指定键值。 的(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" 

第二理解为在相同的部分,用于叶列出了类似的词:

如果路径中表达一个数据节点是叶杨列表节点,则叶列表值必须根据下面的规则进行编码:

○对于叶列表中的标识符必须使用一个路径段[RFC3986]来编码。

○路径段被具有leaflist名,接着是“=”字符,接着是leaflist值(例如,/ restconf /数据/顶leaflist = fred的)构成。

对于叶表中的单词没有(if any) ,所以你不能使用像一个URL /restconf/data/top-leaflist 。 你必须使用=fred指定叶列表实例。 所以,如果叶列表实例不能作为一个整体进行检索,为什么清单实例可以被作为一个整体(在认识1)检索到的? 叶列表实例和列表实例都是一个数据资源,它们在概念上等同。

谢谢,

Answer 1:

正确解读1,“如果有的话”是指关键值,而不是杨的关键语句。 用于RESTCONF GET获取的列表的一个以上的实例,但只有在JSON编码(良好的XML不允许多个根元素)它是好的。 这也是检索无钥匙非配置(状态)列表实例的唯一途径。

如果只有一个列表条目将被允许通过GET来获得,其对应的RFC部分将明确将其必须说明这一点-如果你看一看的措辞删除部分4.7,P3 ,这样的文本存在,但有没有类似GET。

它也还可以检索多个叶列表实例。 这可能是唯一的方法来检索一些这样的实例中,由于(在杨1.1)重复的值被允许用于非配置叶列表。 缺少“如果有的话”是最有可能的社论遗漏。

请注意,在3.5.3文本只说明如何形成的URI,它没有说关于RESTCONF操作如何利用这些URI的任何东西。



文章来源: Is it legal to GET all list instances in RESTCONF?