4.5. PUT
RESTCONF
服务器必须支持PUT
方法。 PUT
方法由客户端发送以创建或替换目标数据资源。一个请求消息体必须存在,代表新的数据资源,否则服务器必须返回一个“400 Bad Request
”状态行。在这种情况下使用错误标签值“invalid-value
”。
POST
和PUT
方法都可以用来创建数据资源。不同的是,对于POST
,客户端不提供将被创建的资源的资源标识符。 POST
方法创建资源的目标资源是新资源的父资源。创建资源的PUT
方法的目标资源是新资源。
数据和数据存储资源必须支持PUT
方法。数据存储资源上的PUT
用于替换数据存储的全部内容。数据资源上的PUT
仅替换数据存储内的数据资源。
数据资源的PUT
方法必须支持“insert
”(见第4.8.5节)和“point
”(见第4.8.6节)查询参数。只有当列表或叶子列表是“ordered-by user
”时,才允许使用这些参数。
与[RFC7231]一致,如果PUT
请求创建新资源,则返回“201 Created
”状态行。如果现有资源被修改,则返回“204 No Content
”状态行。
如果用户无权创建或替换目标资源,则应返回包含“403 Forbidden
”状态行的错误响应。在这种情况下使用错误标签值“access-denied
”。
服务器可以返回“404 Not Found
”状态行,如[RFC7231]的第6.5.4节所述。在这种情况下使用错误标签值“invalid-value
”。所有其他错误响应按照第7节中定义的过程进行处理。
如果目标资源表示一个YANG
叶子列表,那么PUT
方法不能改变叶子列表实例的值。
如果目标资源表示一个YANG
列表实例,那么消息体表示中的关键叶子值必须与请求URI
中的关键叶子值相同。 PUT
方法不能用来改变数据资源实例的关键字叶值。
例:
在“example-jukebox
”YANG
模块中定义的“album
”子资源被替换,或者如果它尚不存在,则被创建。
要替换“album
”资源内容,客户端可能会发送以下内容:
PUT /restconf/data/example-jukebox:jukebox/\
library/artist=Foo%20Fighters/album=Wasting%20Light HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json
{
"example-jukebox:album" : [
{
"name" : "Wasting Light",
"genre" : "example-jukebox:alternative",
"year" : 2011
}
]
}
如果资源更新,服务器可能会作出如下响应:
HTTP/1.1 204 No Content
Date: Thu, 26 Jan 2017 20:56:30 GMT
Server: example-server
Last-Modified: Thu, 26 Jan 2017 20:56:30 GMT
ETag: "b27480aeda4c"
这里使用XML
编码显示了相同的请求:
PUT /restconf/data/example-jukebox:jukebox/\
library/artist=Foo%20Fighters/album=Wasting%20Light HTTP/1.1
Host: example.com
Content-Type: application/yang-data+xml
<album xmlns="http://example.com/ns/example-jukebox"
xmlns:jbox="http://example.com/ns/example-jukebox">
<name>Wasting Light</name>
<genre>jbox:alternative</genre>
<year>2011</year>
</album>
有关使用PUT
方法替换数据存储区资源内容的示例,请参阅附录B.2.4。