1

这是这篇文章的后续问题。从@predi 的回答中,我知道GET目标资源是列表或叶列表且DELETE不能使用此类 URL 的 URL 是合法的。也就是说,给定以下 YANG 定义:

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

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

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

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

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

以下是我的理由:

3.5开始:

容器、叶子、叶子列表条目、列表条目、anydata 节点和 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 resourceor data 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

谢谢,

4

0 回答 0