3.4.1. 编辑冲突预防

RESTCONF中为数据存储资源提供了两种编辑冲突检测和预防机制:时间戳(timestamp)和实体标签(entity-tag)。 对配置数据资源的任何更改都会更新数据存储资源的时间戳和实体标签。 另外,如果数据存储由外部源(例如,NETCONF服务器)锁定,那么RESTCONF服务器务必返回一个错误。

3.4.1.1. 时间戳

保持最后的更改时间,并在响应中返回“Last-Modified”标题字段([RFC7232]的第2.2节)。 如果在指定的时间戳之后资源被修改了,那么在编辑操作请求中可以使用“If-Unmodified-Since”头字段([RFC7232]的第3.4节)来使服务器拒绝请求。

服务器应该保留3.4节定义的数据存储资源的最后修改的时间戳。 此时间戳只受配置子数据资源的影响,不得更新以更改非配置子数据资源。 第3.5节讨论了最后修改的数据资源时间戳。

如果RESTCONF服务器与NETCONF服务器位于同一位置,则最后修改的时间戳必须为“running”的数据存储。 请注意,其他协议可能会导致上次修改的时间戳更新。 这种机制超出了这个文件的范围。

3.4.1.2. 实体标签

服务器必须为数据存储资源维护一个唯一的不透明的实体标记,并且必须在检索请求的响应中的“ETag”([RFC7232]的第2.3节)标题中返回它。客户端可以在编辑操作请求中使用“If-Match”头部,以便在资源实体标签与指定值不匹配的情况下使服务器拒绝该请求。

服务器必须维护顶级{+restconf}/数据资源的实体标签。这个实体标签只受配置数据资源的影响,不能更新非配置数据。数据资源的实体标签在3.5节中讨论。请注意,每个表示(例如XMLJSON)都需要不同的实体标记。

如果RESTCONF服务器与NETCONF服务器位于同一位置,那么这个实体标签必须用于“running”的数据存储。请注意,其他协议可能会导致实体标签被更新。这种机制超出了这个文件的范围。

3.4.1.3. 更新程序

配置数据资源的更改会影响该资源的时间戳和实体标签,任何祖先数据资源和数据存储资源。

例如,可以通过将叶子“/interfaces/interface/enabled”设置为“false”来完成禁用界面的编辑。 “enabled”数据节点及其祖先(一个“interface”列表实例和“interface”容器)被认为是改变。 当任何顶级配置数据节点改变时(例如,“interface”),数据存储被认为被改变。