这是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
是非法的。
我想确认其他方法,例如POST
,PUT
或PATCH
是否可以使用列表或叶列表作为请求中的URL目标资源。例如,下面的请求在RESTCONF中合法吗?
POST /restconf/data/test/machine
PUT /restconf/data/test/machine
PATCH /restconf/data/test/machine
目前,我认为POST
和PUT
请求是非法的,并且不确定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 resource
或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
?
谢谢