6.4. 接收事件通知
RESTCONF
通知根据事件流的定义进行编码。
事件数据的结构基于[RFC5277]的第4节中的<notification>
元素定义。它必须符合[RFC5277]的第4节中的<notification>
元素的模式,使用XSD
中定义的XML
名称空间,如下所示:
urn:ietf:params:xml:ns:netconf:notification:1.0
对于JSON
编码目的,“notification
”元素的模块名称是“ietf-restconf
”。
预计“notification
”容器中有两个子节点,代表事件时间和事件有效负载。 “eventTime
”节点在与<notification>
元素相同的XML
名称空间内定义。它被定义在用于JSON
编码目的的“ietf-restconf
”模块名称空间内。
有效载荷元素的名称和名称空间由包含表示通知消息的notification-stmt
的YANG
模块确定。
在下面的例子中,使用了YANG
模块“example-mod
”:
module example-mod {
namespace "http://example.com/event/1.0";
prefix ex;
organization "Example, Inc.";
contact "support at example.com";
description "Example Notification Data Model Module.";
revision "2016-07-07" {
description "Initial version.";
reference "example.com document 2-9976.";
}
notification event {
description "Example notification event.";
leaf event-class {
type string;
description "Event class identifier.";
}
container reporting-entity {
description "Event specific information.";
leaf card {
type string;
description "Line card identifier.";
}
}
leaf severity {
type string;
description "Event severity description.";
}
}
}
使用XML
编码的示例SSE
事件通知:
data: <notification
data: xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
data: <eventTime>2013-12-21T00:01:00Z</eventTime>
data: <event xmlns="http://example.com/event/1.0">
data: <event-class>fault</event-class>
data: <reporting-entity>
data: <card>Ethernet0</card>
data: </reporting-entity>
data: <severity>major</severity>
data: </event>
data: </notification>
使用JSON
编码的示例SSE
事件通知:
data: {
data: "ietf-restconf:notification" : {
data: "eventTime" : "2013-12-21T00:01:00Z",
data: "example-mod:event" : {
data: "event-class" : "fault",
data: "reporting-entity" : { "card" : "Ethernet0" },
data: "severity" : "major"
data: }
data: }
data: }
或者,既然XML
和JSON
都不是对空格敏感的,上面的消息可以被编码到一行中。 例如:
XML
:
data: <notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"><eventTime>2013-12-21T00:01:00Z</eventTime><event xmlns="http://example.com/event/1.0"><event-class>fault</event-class><reportingEntity><card>Ethernet0</card></reporting-entity><severity>major</severity></event></notification>
JSON
:
data: {"ietf-restconf:notification":{"eventTime":"2013-12-21T00:01:00Z","example-mod:event":{"event-class": "fault","reportingEntity":{"card":"Ethernet0"},"severity":"major"}}}
SSE
规范支持以下附加字段:“event
”,“id
”和“retry
”。 RESTCONF
服务器可以发送“retry
”字段,如果是的话,RESTCONF
客户端应该使用它。 RESTCONF
服务器不应该发送“event
”或“id
”字段,因为没有可用于它们的有意义的值,这对通知本身的内容不会是多余的。 不发送“id
”字段的RESTCONF
服务器也不需要支持HTTP
头字段“Last-Event-ID
”[W3C.REC-eventsource-20150203]。 发送“id
”字段的RESTCONF
服务器应该支持“start-time
”查询参数,作为客户端指定重新启动事件流的首选方式。