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-stmtYANG模块确定。

在下面的例子中,使用了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: }

或者,既然XMLJSON都不是对空格敏感的,上面的消息可以被编码到一行中。 例如:

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”查询参数,作为客户端指定重新启动事件流的首选方式。

results matching ""

    No results matching ""