这是这篇文章的后续问题。从@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 中是否合法?PUT
PATCH
POST /restconf/data/test/machine
PUT /restconf/data/test/machine
PATCH /restconf/data/test/machine
目前我认为POST
andPUT
请求是非法的,并且不确定该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 resource
or 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
?
谢谢,