4.3. GET

RESTCONF服务器必须支持GET方法。 GET方法由客户端发送,以检索资源的数据和元数据。 除操作资源外,所有资源类型均受支持。 请求必须包含至少包含根资源的请求URI

服务器绝不能返回用户没有读权限的任何数据资源。 如果用户没有权限读取目标资源,则应返回包含“401 Unauthorized”状态行的错误响应。 在这种情况下返回错误标记值为“access-denied”。 服务器可以返回“404 Not Found”状态行,如[RFC7231]的第6.5.4节所述。 在这种情况下返回错误标签值为“invalid-value”。

如果用户有权读取一部分而不是全部的目标资源,则在响应消息体中省略未经授权的内容,并将授权内容返回给客户机。

如果有任何内容返回给客户端,那么服务器必须发送一个有效的响应消息体。 XML编码不能返回多个元素。如果多个元素在JSON消息体中发送,那么它们必须作为JSON数组发送。在这种情况下,响应中返回的任何时间戳或实体标签务必与返回的第一个元素相关联。

如果表示YANG叶子列表或列表对象的数据资源的检索请求标识了多个实例,并且在响应中使用了XML编码,那么包含“400 Bad Request”状态行的错误响应必须由服务器。在这种情况下使用错误标签值“invalid-value”。请注意,非配置列表不需要定义任何密钥。在这种情况下,单个列表实例的检索是不可能的。

如果数据资源的检索请求表示一个不存在的实例,则包含“404 Not Found”状态行的错误响应必须由服务器返回。在这种情况下使用错误标签值“invalid-value”。

如果检索请求的目标资源是针对操作资源的,那么服务器必须返回“405 Method Not Allowed”状态行。在这种情况下,使用错误标签值“operation-not-supported”。

请注意,访问控制应用于数据资源的方式可能与HTTP缓存不完全兼容。为数据资源维护的“Last-Modified”和“ETag”头字段不受该数据资源的访问控制规则更改的影响。通过“Last-Modified”或“ETag”值可以更改特定客户端可见的数据资源的表示,而无需检测。

示例:

客户端可能会请求响应头字段以获取特定“album”资源的XML表示形式:

  1. GET /restconf/data/example-jukebox:jukebox/library/artist=Foo%20Fighters/album=Wasting%20Light HTTP/1.1
  2. Host: example.com
  3. Accept: application/yang-data+xml

服务器可能会如下回应:

  1. HTTP/1.1 200 OK
  2. Date: Thu, 26 Jan 2017 20:56:30 GMT
  3. Server: example-server
  4. Content-Type: application/yang-data+xml
  5. Cache-Control: no-cache
  6. ETag: "a74eefc993a2b"
  7. Last-Modified: Thu, 26 Jan 2017 14:02:14 GMT
  8. <album xmlns="http://example.com/ns/example-jukebox"
  9. xmlns:jbox="http://example.com/ns/example-jukebox">
  10. <name>Wasting Light</name>
  11. <genre>jbox:alternative</genre>
  12. <year>2011</year>
  13. </album>

有关更多资源检索示例,请参阅附录B.1