Networked Media Open Specifications

Events API

←Transport - Websocket · Index↑ · Measurement units guidelines→

This document describes the use of the Events API.

Other sections can be accessed from the Overview.

1. Introduction

The Events API is meant as a protocol-agnostic means by which a consumer (receiver) can get in sync with the last known state of an event emitter. The API has to be used only together with other event-based transports to minimize the load on the device allowing for better scalability. The main purpose of the API is resolving the problem of late joiners but it can be also used for low-frequency sanity checks of the states for signals that change states very rarely. The API also allows for a consumer to find the type definition associated with a source event type.

2. NMOS Resource

The Events API should be advertised as a ‘control’ endpoint under an IS-04 NMOS device in the controls array using the urn:x-nmos:control:events type. For consistency the href URL offered should always end with a trailing slash.

Example:

{
    "senders": [
        "a65c15a4-a52e-4960-8cd2-e05c31196e5f",
        "68f519a3-5523-4b2c-b72d-ec23cc80207d"
    ],
    "receivers": [
        "8a7bb1c1-4a82-4fd9-a4fb-96f68f560831",
        "ab450c07-ce54-44da-9ea9-c3e62e7b06d0"
    ],
    "controls": [
        {
            "type": "urn:x-nmos:control:sr-ctrl/v1.0",
            "href": "http://hostname/x-nmos/connection/v1.0/"
        },
        {
            "type": "urn:x-nmos:control:events/v1.0",
            "href": "http://hostname/x-nmos/events/v1.0/"
        }
    ],
    "tags": {},
    "type": "urn:x-nmos:device:generic",
    "label": "Events Device",
    "version": "1529676926:000000000",
    "node_id": "d1713110-7343-4d9e-b3f4-456c8f6ce765",
    "id": "58f6b536-ca4c-43fd-880a-9df2501fc125",
    "description": "Events Engine Device"
}

3. Usage

The API base will return the following upon a successful GET request:

[
    "sources/"
]

The API sources/{sourceId} resource will return the following upon a successful GET request

[
    "state/",
    "type/"
]

The state resource allows for consumers to retrieve the latest state of the source whereas the type resource allows for the retrieval of the type definition object associated with the event type of the source.

Example of retrieving the state of a source:

GET http://hostname/x-nmos/events/v1.0/sources/a65c15a4-a52e-4960-8cd2-e05c31196e5f/state

Example response:

{
  "identity": {
    "source_id": "a65c15a4-a52e-4960-8cd2-e05c31196e5f",
    "flow_id": "ff455cf3-fb17-448b-8f4c-e6c0e294f5ed"
  },
  "timing": {
    "creation_timestamp": "1529323551:016020406",
    "action_timestamp": "1529323551:100000000"
  },
  "event_type": "boolean",
  "payload": {
    "value": true
  }
}

Example of retrieving the type definition for a source:

GET http://hostname/x-nmos/events/v1.0/sources/a65c15a4-a52e-4960-8cd2-e05c31196e5f/type

Example response:

{
  "type": "boolean"
}

4. Type definition changes

The type definitions are deemed as static in version 1.0 of this specification. This means the type definition must not change throughout the event life cycle.

5. Cases to avoid

This API is only meant for consumer late joiners to synchronise with emitters and shall not be used for regular high intensity polling of states.

6. Cross-Origin Resource Sharing (CORS)

In order to permit web-based control interfaces to be hosted remotely, all NMOS APIs MUST implement valid CORS HTTP headers in responses to all requests.

In addition to this, where highlighted in the API specifications servers MUST respond to HTTP pre-flight OPTIONS requests. Servers MAY additionally support HTTP OPTIONS requests made to any other API resource.

In order to simplify development, the following headers may be returned in order to remove these restrictions as far as possible. Note that these are very relaxed and may not be suitable for a production deployment.

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, PUT, POST, PATCH, HEAD, OPTIONS, DELETE
Access-Control-Allow-Headers: Content-Type, Accept
Access-Control-Max-Age: 3600

To ensure compatibility, the response ‘Access-Control-Allow-Headers’ could be set from the request’s ‘Access-Control-Request-Headers’.

7. Trailing slashes

For consistency and in order to adhere to how these APIs are specified in RAML, the ‘primary’ path for every resource has the trailing slash omitted.

For example, an ext_is_07_rest_api_url set to http://hostname/x-nmos/events/v1.0/ will have the following resource paths which DO NOT have a trailing slash:

Clients performing GET requests using these primary paths MUST use URLs with no trailing slash present.

←Transport - Websocket · Index↑ · Measurement units guidelines→