RESTCONF中的POST / PUT / PATCH列表和叶列表是否合法?

时间:2019-05-16 18:20:56

标签: rest ietf-netmod-yang ietf-restconf

这是this帖子的后续问题。根据@predi的回答,我知道GET是目标资源是列表或叶列表的URL,而DELETE不能使用这样的URL是合法的。也就是说,考虑到以下YANG定义:

list machine {
    key "name";
        leaf "name" {
        type string;
    }
} 

请求GET /restconf/data/test/machine是合法的。请求DELETE /restconf/data/test/machine是非法的。

我想确认其他方法,例如POSTPUTPATCH是否可以使用列表或叶列表作为请求中的URL目标资源。例如,下面的请求在RESTCONF中合法吗?

POST   /restconf/data/test/machine
PUT    /restconf/data/test/machine
PATCH  /restconf/data/test/machine

目前,我认为POSTPUT请求是非法的,并且不确定PATCH请求。

这是我的原因:

来自3.5

  

容器,叶子,叶子列表条目,列表条目,任何数据节点和   anyxml节点是数据资源

因此,叶列表或列表不是数据资源。只有叶列表条目或列表条目是数据资源。

来自4.4

  

客户端发送POST方法以创建数据资源,或者   调用操作资源。服务器使用目标资源类型来   确定如何处理请求。

  +-----------+------------------------------------------------+
  | Type      | Description                                    |
  +-----------+------------------------------------------------+
  | Datastore | Create a top-level configuration data resource |
  | Data      | Create a configuration data child resource     |
  | Operation | Invoke an RPC operation                        |
  +-----------+------------------------------------------------+

                 Resource Types That Support POST

因此,列出的目标资源类型是数据资源DATA

来自4.5

  

客户端发送PUT方法以创建或替换目标   数据资源

我在PATCH部分中没有找到类似的描述。 PATCH部分仅讨论target resource,而不是target data resourcedata resource

但是在PUT和PATCH部分中,这些词也是不明确的:

  

如果目标资源代表YANG叶列表,则PUT   方法绝不能更改叶子列表实例的值。

     

如果目标资源代表YANG叶列表,则PATCH   方法绝不能更改叶子列表实例的值。

目标资源似乎可以表示叶列表,但后来它说“不得更改叶列表实例的值”。如果使用叶列表作为目标资源,那么PUT或PATCH一定不能更改哪个叶列表实例?

为此:

leaf-list names {
    type string;
}

和JSON编码的实例:

names: ["a", "b", "c"]

有三个叶子列表实例:a,b和c。如果使用:

PUT .../names

那么您只能创建或替换整个叶子列表,怎么MUST NOT change the value of the leaf-list instance

谢谢

0 个答案:

没有答案