draft-ietf-core-interfaces-04.txt | draft-ietf-core-interfaces-05.txt | |||
---|---|---|---|---|
CoRE Z. Shelby | CoRE Z. Shelby | |||
Internet-Draft ARM | Internet-Draft ARM | |||
Intended status: Informational M. Vial | Intended status: Informational M. Vial | |||
Expires: April 21, 2016 Schneider-Electric | Expires: January 6, 2017 Schneider-Electric | |||
M. Koster | M. Koster | |||
ARM | SmartThings | |||
October 19, 2015 | C. Groves | |||
Huawei | ||||
July 5, 2016 | ||||
Reusable Interface Definitions for Constrained RESTful Environments | Reusable Interface Definitions for Constrained RESTful Environments | |||
draft-ietf-core-interfaces-04 | draft-ietf-core-interfaces-05 | |||
Abstract | Abstract | |||
This document defines a set of reusable REST resource design patterns | This document defines a set of reusable REST resource design patterns | |||
suitable for use in constrained environments, based on IETF CoRE | suitable for use in constrained environments, based on IETF CoRE | |||
standards for information representation and information exchange. | standards for information representation and information exchange. | |||
Interface types for Sensors, Actuators, Parameters, and resource | Interface types for Sensors, Actuators, Parameters, and resource | |||
Collections are defined using the "if" link attribute defined by CoRE | Collections are defined using the "if" link attribute defined by CoRE | |||
Link Format [RFC6690]. Clients may use the "if" attribute to | Link Format [RFC6690]. Clients may use the "if" attribute to | |||
determine how to consume resources. | determine how to consume resources. | |||
Dynamic linking of state updates between resources, either on an | Editor's note: This version removes the observe notify functionality. | |||
endpoint or between endpoints, is defined with the concept of Link | Further work is needed on this draft to | |||
Bindings. We also define conditional observation attributes that | ||||
work with Link Bindings or with simple CoAP Observe [RFC7641]. | 1 Focus the interfaces draft exclusively on interfaces and | |||
collections, and make it clear that this is not the IETF | ||||
officialy endorsed way to use REST. Build compatibility with OCF | ||||
collections to the most reasonable extent, otherwise, try to fnid | ||||
best practice guidance. | ||||
2 Tone down the formality of function set definition and remove the | ||||
perception that CoRE Interfaces defines REST function sets. | ||||
Instead, find some descriptive language that accomplishes the | ||||
same thing in RD, Pubsub, Interfaces, and other drafts that want | ||||
to define REST API profiles for mapping functions. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on April 21, 2016. | This Internet-Draft will expire on January 6, 2017. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Interface Types . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Interface Types . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. Collections . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. Collections . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4.1. Introduction to Collections . . . . . . . . . . . . . . . 5 | 4.1. Introduction to Collections . . . . . . . . . . . . . . . 5 | |||
4.2. Use Cases for Collections . . . . . . . . . . . . . . . . 6 | 4.2. Use Cases for Collections . . . . . . . . . . . . . . . . 6 | |||
4.3. Content-Formats for Collections . . . . . . . . . . . . . 7 | 4.3. Content-Formats for Collections . . . . . . . . . . . . . 6 | |||
4.4. Links and Items in Collections . . . . . . . . . . . . . 7 | 4.4. Links and Items in Collections . . . . . . . . . . . . . 7 | |||
4.5. Queries on Collections . . . . . . . . . . . . . . . . . 9 | 4.5. Queries on Collections . . . . . . . . . . . . . . . . . 8 | |||
4.6. Observing Collections . . . . . . . . . . . . . . . . . . 9 | 4.6. Observing Collections . . . . . . . . . . . . . . . . . . 8 | |||
4.7. Hypermedia Controls on Collections . . . . . . . . . . . 9 | 4.7. Collection Types . . . . . . . . . . . . . . . . . . . . 8 | |||
4.8. Collection Types . . . . . . . . . . . . . . . . . . . . 10 | 5. Interface Descriptions . . . . . . . . . . . . . . . . . . . 9 | |||
4.9. The collection+senml+json Content-Format . . . . . . . . 10 | 5.1. Link List . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
5. Link Bindings and Observe Attributes . . . . . . . . . . . . 11 | 5.2. Batch . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
5.1. Format . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.3. Linked Batch . . . . . . . . . . . . . . . . . . . . . . 11 | |||
5.2. Binding methods . . . . . . . . . . . . . . . . . . . . . 13 | 5.4. Sensor . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
5.3. Binding table . . . . . . . . . . . . . . . . . . . . . . 14 | 5.5. Parameter . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
5.4. Resource Observation Attributes . . . . . . . . . . . . . 14 | 5.6. Read-only Parameter . . . . . . . . . . . . . . . . . . . 13 | |||
6. Interface Descriptions . . . . . . . . . . . . . . . . . . . 15 | 5.7. Actuator . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
6.1. Link List . . . . . . . . . . . . . . . . . . . . . . . . 17 | 5.8. Future Interfaces . . . . . . . . . . . . . . . . . . . . 14 | |||
6.2. Batch . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 6. Function Sets and Profiles . . . . . . . . . . . . . . . . . 14 | |||
6.3. Linked Batch . . . . . . . . . . . . . . . . . . . . . . 18 | 6.1. Defining a Function Set . . . . . . . . . . . . . . . . . 15 | |||
6.4. Hypermedia Collection . . . . . . . . . . . . . . . . . . 19 | 6.1.1. Path template . . . . . . . . . . . . . . . . . . . . 15 | |||
6.5. Sensor . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 6.1.2. Resource Type . . . . . . . . . . . . . . . . . . . . 15 | |||
6.6. Parameter . . . . . . . . . . . . . . . . . . . . . . . . 21 | 6.1.3. Interface Description . . . . . . . . . . . . . . . . 16 | |||
6.7. Read-only Parameter . . . . . . . . . . . . . . . . . . . 21 | 6.1.4. Data type . . . . . . . . . . . . . . . . . . . . . . 16 | |||
6.8. Actuator . . . . . . . . . . . . . . . . . . . . . . . . 21 | 6.2. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
6.9. Binding . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 6.3. Versioning . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
6.10. Future Interfaces . . . . . . . . . . . . . . . . . . . . 23 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | |||
6.11. WADL Description . . . . . . . . . . . . . . . . . . . . 23 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
7. Function Sets and Profiles . . . . . . . . . . . . . . . . . 29 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
10. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 19 | ||||
7.1. Defining a Function Set . . . . . . . . . . . . . . . . . 29 | 11.2. Informative References . . . . . . . . . . . . . . . . . 20 | |||
7.1.1. Path template . . . . . . . . . . . . . . . . . . . . 30 | Appendix A. Profile example . . . . . . . . . . . . . . . . . . 20 | |||
7.1.2. Resource Type . . . . . . . . . . . . . . . . . . . . 30 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
7.1.3. Interface Description . . . . . . . . . . . . . . . . 30 | ||||
7.1.4. Data type . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
7.2. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
7.3. Versioning . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 31 | ||||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 | ||||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
11. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
12.1. Normative References . . . . . . . . . . . . . . . . . . 34 | ||||
12.2. Informative References . . . . . . . . . . . . . . . . . 34 | ||||
Appendix A. Profile example . . . . . . . . . . . . . . . . . . 35 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36 | ||||
1. Introduction | 1. Introduction | |||
IETF Standards for machine to machine communication in constrained | IETF Standards for machine to machine communication in constrained | |||
environments describe a REST protocol and a set of related | environments describe a REST protocol and a set of related | |||
information standards that may be used to represent machine data and | information standards that may be used to represent machine data and | |||
machine metadata in REST interfaces.. CoRE Link-format is a standard | machine metadata in REST interfaces. CoRE Link-format is a standard | |||
for doing Web Linking [RFC5988] in constrained environments. SenML | for doing Web Linking [RFC5988] in constrained environments. SenML | |||
is a simple data model and representation format for composite and | [I-D.ietf-core-senml] is a simple data model and representation | |||
complex structured resources. CoRE Link-Format and SenML can be used | format for composite and complex structured resources. CoRE Link- | |||
by CoAP [RFC7252] or HTTP servers. | Format and SenML can be used by CoAP [RFC7252] or HTTP servers. | |||
The discovery of resources offered by a constrained server is very | The discovery of resources offered by a constrained server is very | |||
important in machine-to-machine applications where there are no | important in machine-to-machine applications where there are no | |||
humans in the loop. Machine application clients must be able to | humans in the loop. Machine application clients must be able to | |||
adapt to different resource organizations without advance knowledge | adapt to different resource organizations without advance knowledge | |||
of the specific data structures hosted by each connected thing. The | of the specific data structures hosted by each connected thing. The | |||
use of Web Linking for the description and discovery of resources | use of Web Linking for the description and discovery of resources | |||
hosted by constrained web servers is specified by CoRE Link Format | hosted by constrained web servers is specified by CoRE Link Format | |||
[RFC6690]. CoRE Link Format additionally defines a link attribute | [RFC6690]. CoRE Link Format additionally defines a link attribute | |||
for Interface Type ("if") that can be used to describe the REST | for Interface Type ("if") that can be used to describe the REST | |||
skipping to change at page 4, line 4 ¶ | skipping to change at page 4, line 4 ¶ | |||
document. | document. | |||
This document defines a set of Link Format compatible Interface Types | This document defines a set of Link Format compatible Interface Types | |||
for some common design patterns that enable the server side | for some common design patterns that enable the server side | |||
composition and organization, and client side discovery and | composition and organization, and client side discovery and | |||
consumption, of machine resources using Web Linking. An Interface | consumption, of machine resources using Web Linking. An Interface | |||
Type may describe a resource in terms of it's associated content | Type may describe a resource in terms of it's associated content | |||
formats, data types, URI templates, REST methods, parameters, and | formats, data types, URI templates, REST methods, parameters, and | |||
responses. Basic interface types are defined for sensors, actuators, | responses. Basic interface types are defined for sensors, actuators, | |||
and properties. A set of collection types is defined for organizing | and properties. A set of collection types is defined for organizing | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
resources for discovery, and for various forms of bulk interaction | resources for discovery, and for various forms of bulk interaction | |||
with resource sets using typed embedding links. | with resource sets using typed embedding links. | |||
This document introduces the concept of a Link Binding, which defines | ||||
a new link relation type to create a dynamic link between resources | ||||
over which to exchange state updates. Specifically, a Link Binding | ||||
is a link for binding the state of 2 resources together such that | ||||
updates to one are sent over the link to the other. CoRE Link Format | ||||
representations are used to configure, inspect, and maintain Link | ||||
Bindings. This document additionally defines a set of conditional | ||||
Observe Attributes for use with Link Bindings and with the standalone | ||||
CoRE Observe [RFC7641] method. | ||||
Interface Types may be used in the composition of Function Sets and | Interface Types may be used in the composition of Function Sets and | |||
Profiles. Function Sets and Profiles are described and an example is | Profiles. Function Sets and Profiles are described and an example is | |||
given of a sensor and actuator device profile using Function Sets | given of a sensor and actuator device profile using Function Sets | |||
composed from the Interface Types described in this document. | composed from the Interface Types described in this document. | |||
This document describes a set of Interface Types which are referenced | This document describes a set of Interface Types which are referenced | |||
by the "if" link attribute and used to implement reusable design | by the "if" link attribute and used to implement reusable design | |||
patterns and functional abstractions. A client discovering the "if" | patterns and functional abstractions. A client discovering the "if" | |||
link attribute will be able to consume resources based on its | link attribute will be able to consume resources based on its | |||
knowledge of the expected interface types. In this sense the | knowledge of the expected interface types. In this sense the | |||
Interface Type acts in a similar way as a Content-Format, but as a | Interface Type acts in a similar way as a Content-Format, but as a | |||
selector for a high level functional abstraction. Interface types | selector for a high level functional abstraction. | |||
may also be provided with hypermedia controls and affordances to | ||||
drive client interaction using the principles of HATEOAS. In this | ||||
case, the Interface Types serve as constructor templates for resource | ||||
organization and hypermedia annotation. | ||||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
This specification requires readers to be familiar with all the terms | This specification requires readers to be familiar with all the terms | |||
and concepts that are discussed in [RFC5988] and [RFC6690]. This | and concepts that are discussed in [RFC5988] and [RFC6690]. This | |||
specification makes use of the following additional terminology: | specification makes use of the following additional terminology: | |||
Interface Type: A resource attribute which describes the interface | Interface Type: A resource attribute which describes the interface | |||
exposed by the resource in terms of content formats, REST methods, | exposed by the resource in terms of content formats, REST methods, | |||
parameters, and other related characteristics. | parameters, and other related characteristics. | |||
Collection: A resource which contains set of related resources, | Collection: A resource which contains set of related resources, | |||
referenced by a list of links and optionally consisting of | referenced by a list of links and optionally consisting of | |||
subresources. | subresources. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
Link Binding: A unidirectional logical link between a source | ||||
resource and a destination resource, over which state information | ||||
is synchronized. | ||||
Resource Discovery: The process allowing a web client to identify | Resource Discovery: The process allowing a web client to identify | |||
resources being hosted on a web server. | resources being hosted on a web server. | |||
Gradual Reveal: A REST design where resources are discovered | Gradual Reveal: A REST design where resources are discovered | |||
progressively using Web Linking. | progressively using Web Linking. | |||
Function Set: A group of well-known REST resources that provides a | Function Set: A group of well-known REST resources that provides a | |||
particular service. | particular service. | |||
Profile: A group of well-known Function Sets defined by a | Profile: A group of well-known Function Sets defined by a | |||
skipping to change at page 5, line 46 ¶ | skipping to change at page 5, line 25 ¶ | |||
4. Collections | 4. Collections | |||
4.1. Introduction to Collections | 4.1. Introduction to Collections | |||
A Collection is a resource which represents one or more related | A Collection is a resource which represents one or more related | |||
resources. Within this document, a collection refers to a collection | resources. Within this document, a collection refers to a collection | |||
with characteristics defined in this document. A Collection | with characteristics defined in this document. A Collection | |||
Interface Type consists of a set of links and a set of items pointed | Interface Type consists of a set of links and a set of items pointed | |||
to by the links which may be sub-resources of the collection | to by the links which may be sub-resources of the collection | |||
resource. The collection types described in this document are Link | resource. The collection types described in this document are Link | |||
List, Batch, Linked Batch, and Hypermedia Collection. | List, Batch and Linked Batch. | |||
The links in a collection are represented in CoRE Link-Format | The links in a collection are represented in CoRE Link-Format | |||
Content-Formats including JSON and CBOR variants, and the items in | Content-Formats including JSON and CBOR variants, and the items in | |||
the collection may be represented by senml, including JSON and CBOR | the collection may be represented by senml, including JSON and CBOR | |||
variants. In general, a collection may support items of any | variants. In general, a collection may support items of any | |||
available Content-Format. | available Content-Format. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
A particular resource item may be a member of more than one | A particular resource item may be a member of more than one | |||
collection at a time by being linked to, but may only be a | collection at a time by being linked to, but may only be a | |||
subresource of one collection. | subresource of one collection. | |||
Some collections may have pre-configured items and links, and some | Some collections may have pre-configured items and links, and some | |||
collections may support dynamic creation and removal of items and | collections may support dynamic creation and removal of items and | |||
links. Likewise, modification of items in some collections may be | links. Likewise, modification of items in some collections may be | |||
permitted, and not in others. | permitted, and not in others. | |||
Collections may support link embedding, which is analogous to an | Collections may support link embedding, which is analogous to an | |||
skipping to change at page 7, line 5 ¶ | skipping to change at page 6, line 32 ¶ | |||
state update or actuation. For example, the brightness control | state update or actuation. For example, the brightness control | |||
resources of a number of luminaries may be grouped by linking to them | resources of a number of luminaries may be grouped by linking to them | |||
in a collection. The collection type may support receiving a single | in a collection. The collection type may support receiving a single | |||
update form a client and sending that update to each resource item in | update form a client and sending that update to each resource item in | |||
the collection. | the collection. | |||
Items may be sub-resources of the collection resource. This enables | Items may be sub-resources of the collection resource. This enables | |||
updates to to multiple items in the collection to be processed | updates to to multiple items in the collection to be processed | |||
together within the context of the collection resource. | together within the context of the collection resource. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
Items may be dynamically created in a collection along with their | ||||
hyperlinks. This provides an "item factory" pattern which can serve | ||||
as a resource creation mechanism for dynamic resources. This pattern | ||||
is also useful for creating temporary resources for the | ||||
implementation of dynamic phenomena like commands, actions, and | ||||
events using REST design patterns. Item creation uses the collection | ||||
Content-Format which allows specification of links and item state in | ||||
a single representation. | ||||
4.3. Content-Formats for Collections | 4.3. Content-Formats for Collections | |||
The collection interfaces by default use CoRE Link-Format for the | The collection interfaces by default use CoRE Link-Format for the | |||
link representations and SenML or text/plain for representations of | link representations and SenML or text/plain for representations of | |||
items. The examples given are for collections that expose resources | items. The examples given are for collections that expose resources | |||
and links in these formats. In addition, a new "collection" Content- | and links in these formats. In addition, a new "collection" Content- | |||
Format is defined based on the SenML framework which represents both | Format is defined based on the SenML framework which represents both | |||
links and items in the collection. | links and items in the collection. | |||
The choice of whether to return a representation of the links or of | The choice of whether to return a representation of the links or of | |||
skipping to change at page 7, line 36 ¶ | skipping to change at page 7, line 4 ¶ | |||
the items or of the collection format is determined by the accepts | the items or of the collection format is determined by the accepts | |||
header option in the request. Likewise, the choice of updating link | header option in the request. Likewise, the choice of updating link | |||
metadata or item data or the collection resource itself is determined | metadata or item data or the collection resource itself is determined | |||
by the Content-Format option in the header of the update request | by the Content-Format option in the header of the update request | |||
operation. | operation. | |||
The default Content-Formats for collection types described in this | The default Content-Formats for collection types described in this | |||
document are: | document are: | |||
Links: application/link-format, application/link-format+json | Links: application/link-format, application/link-format+json | |||
Items: application/senml+json, text/plain | Items: application/senml+json, text/plain | |||
Collection: application/collection+senml+json | ||||
4.4. Links and Items in Collections | 4.4. Links and Items in Collections | |||
Links use CoRE Link-Format representation by default and may point to | Links use CoRE Link-Format representation by default and may point to | |||
any resource reachable from the context of the collection. This | any resource reachable from the context of the collection. This | |||
includes absolute links and links that point to other network | includes absolute links and links that point to other network | |||
locations if the context of the collection allows. Links to sub- | locations if the context of the collection allows. Links to sub- | |||
resources in the collection MUST have a path-element starting with | resources in the collection MUST have a path-element starting with | |||
the resource name, as per RFC3986 [RFC3986]. Links to resources in | the resource name, as per RFC3986 [RFC3986]. Links to resources in | |||
the global context MUST start with a root path identifier | the global context MUST start with a root path identifier [RFC5988]. | |||
[RFC5988].Links to other collections are formed per RFC3986. | Links to other collections are formed per RFC3986. | |||
Examples of links: | Examples of links: | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
</sen/>;if="core.lb" : Link to the /sen/ collection describing it as | </sen/>;if="core.lb" : Link to the /sen/ collection describing it as | |||
a core.lb type collection (Linked Batch) | a core.lb type collection (Linked Batch) | |||
</sen/>;rel="grp" : Link to the /sen/ collection indicating that | </sen/>;rel="grp" : Link to the /sen/ collection indicating that | |||
/sen/ is a member of a group in the collection in which the link | /sen/ is a member of a group in the collection in which the link | |||
appears. | appears. | |||
<"/sen/temp">;rt="temperature" : An absolute link to the resource at | <"/sen/temp">;rt="temperature" : An absolute link to the resource at | |||
the path /sen/temp | the path /sen/temp | |||
skipping to change at page 8, line 33 ¶ | skipping to change at page 7, line 45 ¶ | |||
identified in the collection by resource name. | identified in the collection by resource name. | |||
Links in the collection MAY be Read, Updated, Added, or Removed using | Links in the collection MAY be Read, Updated, Added, or Removed using | |||
the CoRE Link-Format or JSON Merge-Patch Content-Formats on the | the CoRE Link-Format or JSON Merge-Patch Content-Formats on the | |||
collection resource. Reading links uses the GET method and returns | collection resource. Reading links uses the GET method and returns | |||
an array or list containing the link-values of all selected links. | an array or list containing the link-values of all selected links. | |||
Links may be added to the collection using POST or PATCH methods. | Links may be added to the collection using POST or PATCH methods. | |||
Updates to links MUST use the PATCH method and MAY use query | Updates to links MUST use the PATCH method and MAY use query | |||
filtering to select links for updating. The PATCH method on links | filtering to select links for updating. The PATCH method on links | |||
MUST use the JSON Merge-Patch Content-Format (application/merge- | MUST use the JSON Merge-Patch Content-Format (application/merge- | |||
patch+json) specified in RFC7396 [RFC7396] . | patch+json) specified in RFC7396 [RFC7396]. | |||
Items in the collection SHOULD be represented using the SenML | Items in the collection SHOULD be represented using the SenML | |||
(application/senml+json) or plain text (text/plain) Content-Formats, | (application/senml+json) or plain text (text/plain) Content-Formats, | |||
depending on whether the representation is of a single data point or | depending on whether the representation is of a single data point or | |||
multiple data points. Items MAY be represented using any supported | multiple data points. Items MAY be represented using any supported | |||
Content-Format. | Content-Format. | |||
Link Embedding enables the bulk processing of items in the collection | Link Embedding enables the bulk processing of items in the collection | |||
using a single operation targeting the collection resource. A subset | using a single operation targeting the collection resource. A subset | |||
of resources in the collection may be selected for operation using | of resources in the collection may be selected for operation using | |||
Query Filtering. Bulk Read operations using GET return a SenML | Query Filtering. Bulk Read operations using GET return a SenML | |||
representation of all selected resources. Bulk item Update | representation of all selected resources. Bulk item Update | |||
operations using PUT or POST apply the payload document to all | operations using PUT or POST apply the payload document to all | |||
selected resource items in the collection, using a either a Batch or | selected resource items in the collection, using either a Batch or | |||
Group update policy. A Batch update is performed by applying the | Group update policy. A Batch update is performed by applying the | |||
resource values in the payload document to all resources in the | resource values in the payload document to all resources in the | |||
collection that match any resource name in the payload document. | collection that match any resource name in the payload document. | |||
Group updates are performed by applying the payload document to each | Group updates are performed by applying the payload document to each | |||
item in the collection. Group updates are indicated by the link | item in the collection. Group updates are indicated by the link | |||
relation type rel="grp" in the link. | relation type rel="grp" in the link. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
The collection resource SHOULD represented using the | ||||
collection+senml+json Content-Format. The Hypermedia Collection type | ||||
is the only collection type which supports this representation. | ||||
Reading a collection using this content-format returns a | ||||
representation of the links and the items in the collection. | ||||
Performing a POST operation using this Content-Format MAY create one | ||||
or more new item(s) and their corresponding links in the collection. | ||||
Performing a PUT operation on this resource replaces the entire set | ||||
of links and items with the payload. This Content-Format is | ||||
described in section Section 4.9. Implementations MAY provide an | ||||
alternate method using POST in a Content-Format used by the items in | ||||
the collection which creates a default link-value and system-assigned | ||||
resource name. Such implementations MAY create sub-resources of the | ||||
collection resource. | ||||
4.5. Queries on Collections | 4.5. Queries on Collections | |||
Collections MAY support query filtering as defined in CoRE Link- | Collections MAY support query filtering as defined in CoRE Link- | |||
Format [RFC6690]. Operations targeting either the links or the items | Format [RFC6690]. Operations targeting either the links or the items | |||
MAY select a subset of links and items in the collection by using | MAY select a subset of links and items in the collection by using | |||
query filtering. The Content-Format specified in the request header | query filtering. The Content-Format specified in the request header | |||
selects whether links or items are targeted by the operation. | selects whether links or items are targeted by the operation. | |||
4.6. Observing Collections | 4.6. Observing Collections | |||
Resource Observation using CoAP [RFC7252] MAY be supported on items | Resource Observation I-D.ietf-core-dynlink using CoAP [RFC7252] MAY | |||
in a collection. A subset of the conditional observe parameters MAY | be supported on items in a collection. A subset of the conditional | |||
be specified to apply. In most cases pmin and pmax are useful. | observe parameters MAY be specified to apply. In most cases pmin and | |||
Resource observation on a collection's items resource MAY report any | pmax are useful. Resource observation on a collection's items | |||
changes of resource state in any item in the collection. Observation | resource MAY report any changes of resource state in any item in the | |||
Responses, or notifications, SHOULD provide representations of the | collection. Observation Responses, or notifications, SHOULD provide | |||
resources that have changed in SenML Content-Format. Notifications | representations of the resources that have changed in SenML Content- | |||
MAY include multiple observations of a particular resource, with | Format. Notifications MAY include multiple observations of a | |||
SenML time stamps indicating the observation times. | particular resource, with SenML time stamps indicating the | |||
observation times. | ||||
4.7. Hypermedia Controls on Collections | ||||
Additional Hypermedia controls may be defined to enable clients to | ||||
automatically consume the collection resources. Typically, the | ||||
developer may map application level semantics onto collection | ||||
operations. For example, invoking an Action on an actuator may be | ||||
defined as creating an Action item resource in a collection of | ||||
Actions associated with the actuator, each item in the collection | ||||
representing a past, current, or future action to be processed by the | ||||
actuator. Removing the item could cancel any pending or curent long- | ||||
running action, and removing a completed action could free up | ||||
resources for new actions to be invoked. A Hypermedia control for | ||||
this pattern might provide a semantic name for the action, for | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
example "Change Brightness", and might direct the client to supply a | ||||
SenML representation of parameters for the action as well as provide | ||||
instructions on what method (POST) to use and how to construct the | ||||
URI (the collection URI in this case) if required. An example of | ||||
this hypermedia control is shown below. | ||||
4.8. Collection Types | 4.7. Collection Types | |||
There are four collection types defined in this document: | There are three collection types defined in this document: | |||
+---------------------+----------+----------------------------------+ | +-----------------+---------+--------------------+ | |||
| Collection Type | if= | Content-Formats | | | Collection Type | if= | Content-Formats | | |||
+---------------------+----------+----------------------------------+ | +-----------------+---------+--------------------+ | |||
| Link List | core.ll | link-format | | | Link List | core.ll | link-format | | |||
| Batch | core.b | link-format, senml | | | Batch | core.b | link-format, senml | | |||
| Linked Batch | core.lb | link-format, senml | | | Linked Batch | core.lb | link-format, senml | | |||
| Hypermedia | core.hc | link-format, senml, | | +-----------------+---------+--------------------+ | |||
| Collection | | collection+senml | | ||||
| Binding | core.bnd | link-format | | ||||
+---------------------+----------+----------------------------------+ | ||||
Each collection type MAY support a subset of the methods and | Each collection type MAY support a subset of the methods and | |||
functions described above. For the first three collection types, the | functions described above. For the first three collection types, the | |||
methods and functions are defined in the corresponding Interface | methods and functions are defined in the corresponding Interface | |||
Description. The Hypermedia Collection SHOULD expose hypermedia | Description. | |||
controls to applications to indicate which methods and functions are | ||||
supported. | ||||
4.9. The collection+senml+json Content-Format | ||||
The collection+senml+json Content-Format is used to represent all of | ||||
the attributes and resources of a collection in a single format. | ||||
This is accomplished by extending the SenmL format by adding a links | ||||
element "l". The links element is formatted as an array of links in | ||||
the application/link-format+json Content-Format with the tag "l" | ||||
which follows the structure of the "e" element. An example of this | ||||
format is given below. | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
{ | ||||
"bn":"/ep/sen/" | ||||
"e":[ | ||||
{ "n": "light", "v": 123, "u": "lx" }, | ||||
{ "n": "temp", "v": 27.2, "u": "degC" }, | ||||
{ "n": "humidity", "v": 80, "u": "%RH" }], | ||||
"l":[ | ||||
{ "href":"/ep/sen/", "rel":"self", "if": "core.hc", "rt": "ms" }, | ||||
{ "href":"light", "rt":"core.s" }, | ||||
{ "href":"temp", "rt":"core.s" }, | ||||
{ "href":"humidity", "rt":"core.s" }] | ||||
} | ||||
5. Link Bindings and Observe Attributes | ||||
In a M2M RESTful environment, endpoints may directly exchange the | ||||
content of their resources to operate the distributed system. For | ||||
example, a light switch may supply on-off control information that | ||||
may be sent directly to a light resource for on-off control. | ||||
Beforehand, a configuration phase is necessary to determine how the | ||||
resources of the different endpoints are related to each other. This | ||||
can be done either automatically using discovery mechanisms or by | ||||
means of human intervention and a so-called commissioning tool. In | ||||
this document the abstract relationship between two resources is | ||||
called a link Binding. The configuration phase necessitates the | ||||
exchange of binding information so a format recognized by all CoRE | ||||
endpoints is essential. This document defines a format based on the | ||||
CoRE Link-Format to represent binding information along with the | ||||
rules to define a binding method which is a specialized relationship | ||||
between two resources. The purpose of a binding is to synchronize | ||||
the content between a source resource and a destination resource. | ||||
The destination resource MAY be a group resource if the authority | ||||
component of the destination URI contains a group address (either a | ||||
multicast address or a name that resolves to a multicast address). | ||||
Since a binding is unidirectional, the binding entry defining a | ||||
relationship is present only on one endpoint. The binding entry may | ||||
be located either on the source or the destination endpoint depending | ||||
on the binding method. The following table gives a summary of the | ||||
binding methods described in more detail in Section 5.2. | ||||
+---------+------------+-------------+---------------+ | ||||
| Name | Identifier | Location | Method | | ||||
+---------+------------+-------------+---------------+ | ||||
| Polling | poll | Destination | GET | | ||||
| Observe | obs | Destination | GET + Observe | | ||||
| Push | push | Source | PUT | | ||||
+---------+------------+-------------+---------------+ | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
5.1. Format | ||||
Since Binding involves the creation of a link between two resources, | ||||
Web Linking and the CoRE Link-Format are a natural way to represent | ||||
binding information. This involves the creation of a new relation | ||||
type, purposely named "boundto". In a Web link with this relation | ||||
type, the target URI contains the location of the source resource and | ||||
the context URI points to the destination resource. The Web link | ||||
attributes allow a fine-grained control of the type of | ||||
synchronization exchange along with the conditions that trigger an | ||||
update. This specification defines the attributes below: | ||||
+--------------------+-----------+------------------+ | ||||
| Attribute | Parameter | Value | | ||||
+--------------------+-----------+------------------+ | ||||
| Binding method | bind | xsd:string | | ||||
| Minimum Period (s) | pmin | xsd:integer (>0) | | ||||
| Maximum Period (s) | pmax | xsd:integer (>0) | | ||||
| Change Step | st | xsd:decimal (>0) | | ||||
| Greater Than | gt | xsd:decimal | | ||||
| Less Than | lt | xsd:decimal | | ||||
+--------------------+-----------+------------------+ | ||||
Bind Method: This is the identifier of a binding method which | ||||
defines the rules to synchronize the destination resource. This | ||||
attribute is mandatory. | ||||
Minimum Period: When present, the minimum period indicates the | ||||
minimum time to wait (in seconds) before sending a new | ||||
synchronization message (even if it has changed). In the absence | ||||
of this parameter, the minimum period is up to the notifier. | ||||
Maximum Period: When present, the maximum period indicates the | ||||
maximum time in seconds between two consecutive state | ||||
synchronization messages (regardless if it has changed). In the | ||||
absence of this parameter, the maximum period is up to the | ||||
notifier. The maximum period MUST be greater than the minimum | ||||
period parameter (if present). | ||||
Change Step: When present, the change step indicates how much the | ||||
value of a resource SHOULD change before sending a new | ||||
notification (compared to the value of the last notification). | ||||
This parameter has lower priority than the period parameters, thus | ||||
even if the change step has been fulfilled, the time since the | ||||
last notification SHOULD be between pmin and pmax. | ||||
Greater Than: When present, Greater Than indicates the upper limit | ||||
value the resource value SHOULD cross before sending a new | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
notification. This parameter has lower priority than the period | ||||
parameters, thus even if the Greater Than limit has been crossed, | ||||
the time since the last notification SHOULD be between pmin and | ||||
pmax. | ||||
Less Than: When present, Less Than indicates the lower limit value | ||||
the resource value SHOULD cross before sending a new notification. | ||||
This parameter has lower priority than the period parameters, thus | ||||
even if the Less Than limit has been crossed, the time since the | ||||
last notification SHOULD be between pmin and pmax. | ||||
5.2. Binding methods | ||||
A binding method defines the rules to generate the web-transfer | ||||
exchanges that will effectively send content from the source resource | ||||
to the destination resource. The description of a binding method | ||||
must define the following aspects: | ||||
Identifier: This is value of the "bind" attribute used to identify | ||||
the method. | ||||
Location: This information indicates whether the binding entry is | ||||
stored on the source or on the destination endpoint. | ||||
REST Method: This is the REST method used in the Request/Response | ||||
exchanges. | ||||
Conditions: A binding method definition must state how the condition | ||||
attributes of the abstract binding definition are actually used in | ||||
this specialized binding. | ||||
This specification supports 3 binding methods described below. | ||||
Polling: The Polling method consists of sending periodic GET | ||||
requests from the destination endpoint to the source resource and | ||||
copying the content to the destination resource. The binding | ||||
entry for this method MUST be stored on the destination endpoint. | ||||
The destination endpoint MUST ensure that the polling frequency | ||||
does not exceed the limits defined by the pmin and pmax attributes | ||||
of the binding entry. The copying process MAY filter out content | ||||
from the GET requests using value-based conditions (e.g Change | ||||
Step, Less Than, Greater Than). | ||||
Observe: The Observe method creates an observation relationship | ||||
between the destination endpoint and the source resource. On each | ||||
notification the content from the source resource is copied to the | ||||
destination resource. The creation of the observation | ||||
relationship requires the CoAP Observation mechanism [RFC7641] | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
hence this method is only permitted when the resources are made | ||||
available over CoAP. The binding entry for this method MUST be | ||||
stored on the destination endpoint. The binding conditions are | ||||
mapped as query string parameters (see Section 5.4). | ||||
Push: When the Push method is assigned to a binding, the source | ||||
endpoint sends PUT requests to the destination resource when the | ||||
binding condition attributes are satisfied for the source | ||||
resource. The source endpoint MUST only send a notification | ||||
request if the binding conditions are met. The binding entry for | ||||
this method MUST be stored on the source endpoint. | ||||
5.3. Binding table | ||||
The binding table is a special resource that gives access to the | ||||
bindings on a endpoint. A binding table resource MUST support the | ||||
Binding interface defined in Section 6.9. A profile SHOULD allow | ||||
only one resource table per endpoint. | ||||
5.4. Resource Observation Attributes | ||||
When resource interfaces following this specification are made | ||||
available over CoAP, the CoAP Observation mechanism [RFC7641] MAY be | ||||
used to observe any changes in a resource, and receive asynchronous | ||||
notifications as a result. In addition, a set of query string | ||||
parameters are defined here to allow a client to control how often a | ||||
client is interested in receiving notifications and how much a | ||||
resource value should change for the new representation to be | ||||
interesting. These query parameters are described in the following | ||||
table. A resource using an interface description defined in this | ||||
specification and marked as Observable in its link description SHOULD | ||||
support these observation parameters. The Change Step parameter can | ||||
only be supported on resources with an atomic numeric value. | ||||
These query parameters MUST be treated as resources that are read | ||||
using GET and updated using PUT, and MUST NOT be included in the | ||||
Observe request. Multiple parameters MAY be updated at the same time | ||||
by including the values in the query string of a PUT. Before being | ||||
updated, these parameters have no default value. | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
+----------------+------------------+------------------+ | ||||
| Resource | Parameter | Data Format | | ||||
+----------------+------------------+------------------+ | ||||
| Minimum Period | /{resource}?pmin | xsd:integer (>0) | | ||||
| Maximum Period | /{resource}?pmax | xsd:integer (>0) | | ||||
| Change Step | /{resource}?st | xsd:decimal (>0) | | ||||
| Less Than | /{resource}?lt | xsd:decimal | | ||||
| Greater Than | /{resource}?gt | xsd:decimal | | ||||
+----------------+------------------+------------------+ | ||||
Minimum Period: When present, the minimum period indicates the | ||||
minimum time to wait (in seconds) before sending a new | ||||
synchronization message (even if it has changed). In the absence | ||||
of this parameter, the minimum period is up to the notifier. | ||||
Maximum Period: When present, the maximum period indicates the | ||||
maximum time in seconds between two consecutive state | ||||
synchronization messages (regardless if it has changed). In the | ||||
absence of this parameter, the maximum period is up to the | ||||
notifier. The maximum period MUST be greater than the minimum | ||||
period parameter (if present). | ||||
Change Step: When present, the change step indicates how much the | ||||
value of a resource SHOULD change before sending a new | ||||
notification (compared to the value of the last notification). | ||||
This parameter has lower priority than the period parameters, thus | ||||
even if the change step has been fulfilled, the time since the | ||||
last notification SHOULD be between pmin and pmax. | ||||
Greater Than: When present, Greater Than indicates the upper limit | ||||
value the resource value SHOULD cross before sending a new | ||||
notification. This parameter has lower priority than the period | ||||
parameters, thus even if the Greater Than limit has been crossed, | ||||
the time since the last notification SHOULD be between pmin and | ||||
pmax. | ||||
Less Than: When present, Less Than indicates the lower limit value | ||||
the resource value SHOULD cross before sending a new notification. | ||||
This parameter has lower priority than the period parameters, thus | ||||
even if the Less Than limit has been crossed, the time since the | ||||
last notification SHOULD be between pmin and pmax. | ||||
6. Interface Descriptions | 5. Interface Descriptions | |||
This section defines REST interfaces for Link List, Batch, Sensor, | This section defines REST interfaces for Link List, Batch, Sensor, | |||
Parameter, Actuator and Binding table resources. Variants such as | Parameter and Actuator resources. Variants such as Linked Batch or | |||
Linked Batch or Read-Only Parameter are also presented. Each type is | Read-Only Parameter are also presented. Each type is described along | |||
described along with its Interface Description attribute value and | with its Interface Description attribute value and valid methods. | |||
These are defined for each interface in the table below. These | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | interfaces can support plain text and/or SenML Media types. | |||
valid methods. These are defined for each interface in the table | ||||
below. These interfaces can support plain text and/or SenML Media | ||||
types. | ||||
The if= column defines the Interface Description (if=) attribute | The if= column defines the Interface Description (if=) attribute | |||
value to be used in the CoRE Link Format for a resource conforming to | value to be used in the CoRE Link Format for a resource conforming to | |||
that interface. When this value appears in the if= attribute of a | that interface. When this value appears in the if= attribute of a | |||
link, the resource MUST support the corresponding REST interface | link, the resource MUST support the corresponding REST interface | |||
described in this section. The resource MAY support additional | described in this section. The resource MAY support additional | |||
functionality, which is out of scope for this specification. | functionality, which is out of scope for this specification. | |||
Although these interface descriptions are intended to be used with | Although these interface descriptions are intended to be used with | |||
the CoRE Link Format, they are applicable for use in any REST | the CoRE Link Format, they are applicable for use in any REST | |||
interface definition. | interface definition. | |||
The Methods column defines the methods supported by that interface, | The Methods column defines the methods supported by that interface, | |||
which are described in more detail below. | which are described in more detail below. | |||
+-----------------+----------+-----------------+--------------------+ | +-----------------+---------+------------------+--------------------+ | |||
| Interface | if= | Methods | Content-Formats | | | Interface | if= | Methods | Content-Formats | | |||
+-----------------+----------+-----------------+--------------------+ | +-----------------+---------+------------------+--------------------+ | |||
| Link List | core.ll | GET | link-format | | | Link List | core.ll | GET | link-format | | |||
| Batch | core.b | GET, PUT, POST | link-format, senml | | | Batch | core.b | GET, PUT, POST | link-format, senml | | |||
| Linked Batch | core.lb | GET, PUT, POST, | link-format, senml | | | Linked Batch | core.lb | GET, PUT, POST, | link-format, senml | | |||
| | | DELETE | | | | | | DELETE | | | |||
| Sensor | core.s | GET | link-format, | | | Sensor | core.s | GET | link-format, | | |||
| | | | text/plain | | | | | | text/plain | | |||
| Parameter | core.p | GET, PUT | link-format, | | | Parameter | core.p | GET, PUT | link-format, | | |||
| | | | text/plain | | | | | | text/plain | | |||
| Read-only | core.rp | GET | link-format, | | | Read-only | core.rp | GET | link-format, | | |||
| Parameter | | | text/plain | | | Parameter | | | text/plain | | |||
| Actuator | core.a | GET, PUT, POST | link-format, | | | Actuator | core.a | GET, PUT, POST | link-format, | | |||
| | | | text/plain | | | | | | text/plain | | |||
| Binding | core.bnd | GET, POST, | link-format | | +-----------------+---------+------------------+--------------------+ | |||
| | | DELETE | | | ||||
+-----------------+----------+-----------------+--------------------+ | ||||
The following is an example of links in the CoRE Link Format using | The following is an example of links in the CoRE Link Format using | |||
these interface descriptions. The resource hierarchy is based on a | these interface descriptions. The resource hierarchy is based on a | |||
simple profile defined in Appendix A. These links are used in the | simple profile defined in Appendix A. These links are used in the | |||
subsequent examples below. | subsequent examples below. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
Req: GET /.well-known/core | Req: GET /.well-known/core | |||
Res: 2.05 Content (application/link-format) | Res: 2.05 Content (application/link-format) | |||
</s/>;rt="simple.sen";if="core.b", | </s/>;rt="simple.sen";if="core.b", | |||
</s/lt>;rt="simple.sen.lt";if="core.s", | </s/lt>;rt="simple.sen.lt";if="core.s", | |||
</s/tmp>;rt="simple.sen.tmp";if="core.s";obs, | </s/tmp>;rt="simple.sen.tmp";if="core.s";obs, | |||
</s/hum>;rt="simple.sen.hum";if="core.s", | </s/hum>;rt="simple.sen.hum";if="core.s", | |||
</a/>;rt="simple.act";if="core.b", | </a/>;rt="simple.act";if="core.b", | |||
</a/1/led>;rt="simple.act.led";if="core.a", | </a/1/led>;rt="simple.act.led";if="core.a", | |||
</a/2/led>;rt="simple.act.led";if="core.a", | </a/2/led>;rt="simple.act.led";if="core.a", | |||
</d/>;rt="simple.dev";if="core.ll", | </d/>;rt="simple.dev";if="core.ll", | |||
</l/>;if="core.lb", | </l/>;if="core.lb", | |||
6.1. Link List | 5.1. Link List | |||
The Link List interface is used to retrieve (GET) a list of resources | The Link List interface is used to retrieve (GET) a list of resources | |||
on a web server. The GET request SHOULD contain an Accept option | on a web server. The GET request SHOULD contain an Accept option | |||
with the application/link-format content format; however if the | with the application/link-format content format; however if the | |||
resource does not support any other form of GET methods the Accept | resource does not support any other form of GET methods the Accept | |||
option MAY be elided. The Accept option SHOULD only include the | option MAY be elided. The Accept option SHOULD only include the | |||
application/link-format content format. The request returns a list | application/link-format content format. The request returns a list | |||
of URI references with absolute paths to the resources as defined in | of URI references with absolute paths to the resources as defined in | |||
CoRE Link Format. This interface is typically used with a parent | CoRE Link Format. This interface is typically used with a parent | |||
resource to enumerate sub-resources but may be used to reference any | resource to enumerate sub-resources but may be used to reference any | |||
skipping to change at page 17, line 45 ¶ | skipping to change at page 10, line 43 ¶ | |||
interface. | interface. | |||
The following example interacts with a Link List /d containing | The following example interacts with a Link List /d containing | |||
Parameter sub-resources /d/name, /d/model. | Parameter sub-resources /d/name, /d/model. | |||
Req: GET /d/ (Accept:application/link-format) | Req: GET /d/ (Accept:application/link-format) | |||
Res: 2.05 Content (application/link-format) | Res: 2.05 Content (application/link-format) | |||
</d/name>;rt="simple.dev.n";if="core.p", | </d/name>;rt="simple.dev.n";if="core.p", | |||
</d/model>;rt="simple.dev.mdl";if="core.rp" | </d/model>;rt="simple.dev.mdl";if="core.rp" | |||
6.2. Batch | 5.2. Batch | |||
The Batch interface is used to manipulate a collection of sub- | The Batch interface is used to manipulate a collection of sub- | |||
resources at the same time. The Batch interface type supports the | resources at the same time. The Batch interface type supports the | |||
same methods as its sub-resources, and can be used to read (GET), | same methods as its sub-resources, and can be used to read (GET), | |||
update (PUT) or apply (POST) the values of those sub-resource with a | update (PUT) or apply (POST) the values of those sub-resource with a | |||
single resource representation. The sub-resources of a Batch MAY be | single resource representation. The sub-resources of a Batch MAY be | |||
heterogeneous, a method used on the Batch only applies to sub- | heterogeneous, a method used on the Batch only applies to sub- | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
resources that support it. For example Sensor interfaces do not | resources that support it. For example Sensor interfaces do not | |||
support PUT, and thus a PUT request to a Sensor member of that Batch | support PUT, and thus a PUT request to a Sensor member of that Batch | |||
would be ignored. A batch requires the use of SenML Media types in | would be ignored. A batch requires the use of SenML Media types in | |||
order to support multiple sub-resources. | order to support multiple sub-resources. | |||
In addition, The Batch interface is an extension of the Link List | In addition, The Batch interface is an extension of the Link List | |||
interface and in consequence MUST support the same methods. | interface and in consequence MUST support the same methods. | |||
The following example interacts with a Batch /s/ with Sensor sub- | The following example interacts with a Batch /s/ with Sensor sub- | |||
resources /s/light, /s/temp and /s/humidity. | resources /s/light, /s/temp and /s/humidity. | |||
Req: GET /s/ | Req: GET /s/ | |||
Res: 2.05 Content (application/senml+json) | Res: 2.05 Content (application/senml+json) | |||
{"e":[ | {"e":[ | |||
{ "n": "light", "v": 123, "u": "lx" }, | { "n": "light", "v": 123, "u": "lx" }, | |||
{ "n": "temp", "v": 27.2, "u": "degC" }, | { "n": "temp", "v": 27.2, "u": "degC" }, | |||
{ "n": "humidity", "v": 80, "u": "%RH" }], | { "n": "humidity", "v": 80, "u": "%RH" }], | |||
} | } | |||
6.3. Linked Batch | 5.3. Linked Batch | |||
The Linked Batch interface is an extension of the Batch interface. | The Linked Batch interface is an extension of the Batch interface. | |||
Contrary to the basic Batch which is a collection statically defined | Contrary to the basic Batch which is a collection statically defined | |||
by the web server, a Linked Batch is dynamically controlled by a web | by the web server, a Linked Batch is dynamically controlled by a web | |||
client. A Linked Batch resource has no sub-resources. Instead the | client. A Linked Batch resource has no sub-resources. Instead the | |||
resources forming the batch are referenced using Web Linking | resources forming the batch are referenced using Web Linking | |||
[RFC5988] and the CoRE Link Format [RFC6690]. A request with a POST | [RFC5988] and the CoRE Link Format [RFC6690]. A request with a POST | |||
method and a content format of application/link-format simply appends | method and a content format of application/link-format simply appends | |||
new resource links to the collection. The links in the payload MUST | new resource links to the collection. The links in the payload MUST | |||
reference a resource on the web server with an absolute path. A | reference a resource on the web server with an absolute path. A | |||
DELETE request removes the entire collection. All other requests | DELETE request removes the entire collection. All other requests | |||
available for a basic Batch are still valid for a Linked Batch. | available for a basic Batch are still valid for a Linked Batch. | |||
The following example interacts with a Linked Batch /l/ and creates a | The following example interacts with a Linked Batch /l/ and creates a | |||
collection containing /s/light, /s/temp and /s/humidity in 2 steps. | collection containing /s/light, /s/temp and /s/humidity in 2 steps. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
Req: POST /l/ (Content-Format: application/link-format) | Req: POST /l/ (Content-Format: application/link-format) | |||
</s/light>,</s/temp> | </s/light>,</s/temp> | |||
Res: 2.04 Changed | Res: 2.04 Changed | |||
Req: GET /l/ | Req: GET /l/ | |||
Res: 2.05 Content (application/senml+json) | Res: 2.05 Content (application/senml+json) | |||
{"e":[ | {"e":[ | |||
{ "n": "/s/light", "v": 123, "u": "lx" }, | { "n": "/s/light", "v": 123, "u": "lx" }, | |||
{ "n": "/s/temp", "v": 27.2, "u": "degC" }, | { "n": "/s/temp", "v": 27.2, "u": "degC" }, | |||
} | } | |||
skipping to change at page 19, line 37 ¶ | skipping to change at page 12, line 35 ¶ | |||
Res: 2.05 Content (application/senml+json) | Res: 2.05 Content (application/senml+json) | |||
{"e":[ | {"e":[ | |||
{ "n": "/s/light", "v": 123, "u": "lx" }, | { "n": "/s/light", "v": 123, "u": "lx" }, | |||
{ "n": "/s/temp", "v": 27.2, "u": "degC" }, | { "n": "/s/temp", "v": 27.2, "u": "degC" }, | |||
{ "n": "/s/humidity", "v": 80, "u": "%RH" }], | { "n": "/s/humidity", "v": 80, "u": "%RH" }], | |||
} | } | |||
Req: DELETE /l/ | Req: DELETE /l/ | |||
Res: 2.02 Deleted | Res: 2.02 Deleted | |||
6.4. Hypermedia Collection | 5.4. Sensor | |||
The Hypermedia Collection interface MAY provide a full set of the | ||||
methods and link relation types described in section Section 4 of | ||||
this document. | ||||
The following example interacts with a Hypermedia Collection at | ||||
/act1/actions/ by creating a new resource with Parameter sub- | ||||
resources newVal, tTime. The example depicts an actuation operation | ||||
with a new actuator value of 86.3% and a transition time of 10 | ||||
seconds. The returned location of the created resource is then read, | ||||
and a response is returned which includes the remaining time for the | ||||
operation to complete "rTime". Then, the operation is cancelled by | ||||
sending a DELETE operation to the location of the created resource | ||||
that represents the running action. | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
Req: POST /Act1/Actions/ | ||||
Content-Format: application/collection+senml_json | ||||
Pl: [{"n":newVal", "v":86.3}, {"n":tTime", "v":10}] | ||||
Res: 2.01 Created | ||||
Location: Action1234 | ||||
Req: GET /Act1/Actions/Action1234 | ||||
Accepts: application/senml+json | ||||
Res: 2.05 Content | ||||
Pl: [{"n":newVal", "v":86.3}, | ||||
{"n":tTime", "v":10}, | ||||
{"n":"rTime", "v":"8.87"}] | ||||
Req: DELETE /Act1/Actions/Action1234 | ||||
Res: 2.02 Deleted | ||||
Req: GET /Act1/Actions/Action1234 | ||||
Res: 4.04 Not Found | ||||
6.5. Sensor | ||||
The Sensor interface allows the value of a sensor resource to be read | The Sensor interface allows the value of a sensor resource to be read | |||
(GET). The Media type of the resource can be either plain text or | (GET). The Media type of the resource can be either plain text or | |||
SenML. Plain text MAY be used for a single measurement that does not | SenML. Plain text MAY be used for a single measurement that does not | |||
require meta-data. For a measurement with meta-data such as a unit | require meta-data. For a measurement with meta-data such as a unit | |||
or time stamp, SenML SHOULD be used. A resource with this interface | or time stamp, SenML SHOULD be used. A resource with this interface | |||
MAY use SenML to return multiple measurements in the same | MAY use SenML to return multiple measurements in the same | |||
representation, for example a list of recent measurements. | representation, for example a list of recent measurements. | |||
The following are examples of Sensor interface requests in both text/ | The following are examples of Sensor interface requests in both text/ | |||
skipping to change at page 21, line 5 ¶ | skipping to change at page 13, line 15 ¶ | |||
Req: GET /s/humidity (Accept: text/plain) | Req: GET /s/humidity (Accept: text/plain) | |||
Res: 2.05 Content (text/plain) | Res: 2.05 Content (text/plain) | |||
80 | 80 | |||
Req: GET /s/humidity (Accept: application/senml+json) | Req: GET /s/humidity (Accept: application/senml+json) | |||
Res: 2.05 Content (application/senml+json) | Res: 2.05 Content (application/senml+json) | |||
{"e":[ | {"e":[ | |||
{ "n": "humidity", "v": 80, "u": "%RH" }], | { "n": "humidity", "v": 80, "u": "%RH" }], | |||
} | } | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | 5.5. Parameter | |||
6.6. Parameter | ||||
The Parameter interface allows configurable parameters and other | The Parameter interface allows configurable parameters and other | |||
information to be modeled as a resource. The value of the parameter | information to be modeled as a resource. The value of the parameter | |||
can be read (GET) or update (PUT). Plain text or SenML Media types | can be read (GET) or update (PUT). Plain text or SenML Media types | |||
MAY be returned from this type of interface. | MAY be returned from this type of interface. | |||
The following example shows request for reading and updating a | The following example shows request for reading and updating a | |||
parameter. | parameter. | |||
Req: GET /d/name | Req: GET /d/name | |||
Res: 2.05 Content (text/plain) | Res: 2.05 Content (text/plain) | |||
node5 | node5 | |||
Req: PUT /d/name (text/plain) | Req: PUT /d/name (text/plain) | |||
outdoor | outdoor | |||
Res: 2.04 Changed | Res: 2.04 Changed | |||
6.7. Read-only Parameter | 5.6. Read-only Parameter | |||
The Read-only Parameter interface allows configuration parameters to | The Read-only Parameter interface allows configuration parameters to | |||
be read (GET) but not updated. Plain text or SenML Media types MAY | be read (GET) but not updated. Plain text or SenML Media types MAY | |||
be returned from this type of interface. | be returned from this type of interface. | |||
The following example shows request for reading such a parameter. | The following example shows request for reading such a parameter. | |||
Req: GET /d/model | Req: GET /d/model | |||
Res: 2.05 Content (text/plain) | Res: 2.05 Content (text/plain) | |||
SuperNode200 | SuperNode200 | |||
6.8. Actuator | 5.7. Actuator | |||
The Actuator interface is used by resources that model different | The Actuator interface is used by resources that model different | |||
kinds of actuators (changing its value has an effect on its | kinds of actuators (changing its value has an effect on its | |||
environment). Examples of actuators include for example LEDs, | environment). Examples of actuators include for example LEDs, | |||
relays, motor controllers and light dimmers. The current value of | relays, motor controllers and light dimmers. The current value of | |||
the actuator can be read (GET) or the actuator value can be updated | the actuator can be read (GET) or the actuator value can be updated | |||
(PUT). In addition, this interface allows the use of POST to change | (PUT). In addition, this interface allows the use of POST to change | |||
the state of an actuator, for example to toggle between its possible | the state of an actuator, for example to toggle between its possible | |||
values. Plain text or SenML Media types MAY be returned from this | values. Plain text or SenML Media types MAY be returned from this | |||
type of interface. A resource with this interface MAY use SenML to | type of interface. A resource with this interface MAY use SenML to | |||
include multiple measurements in the same representation, for example | include multiple measurements in the same representation, for example | |||
a list of recent actuator values or a list of values to updated. | a list of recent actuator values or a list of values to updated. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
The following example shows requests for reading, setting and | The following example shows requests for reading, setting and | |||
toggling an actuator (turning on a led). | toggling an actuator (turning on a led). | |||
Req: GET /a/1/led | Req: GET /a/1/led | |||
Res: 2.05 Content (text/plain) | Res: 2.05 Content (text/plain) | |||
0 | 0 | |||
Req: PUT /a/1/led (text/plain) | Req: PUT /a/1/led (text/plain) | |||
1 | 1 | |||
Res: 2.04 Changed | Res: 2.04 Changed | |||
Req: POST /a/1/led (text/plain) | Req: POST /a/1/led (text/plain) | |||
Res: 2.04 Changed | Res: 2.04 Changed | |||
Req: GET /a/1/led | Req: GET /a/1/led | |||
Res: 2.05 Content (text/plain) | Res: 2.05 Content (text/plain) | |||
0 | 0 | |||
6.9. Binding | 5.8. Future Interfaces | |||
The Binding interface is used to manipulate a binding table. A | ||||
request with a POST method and a content format of application/link- | ||||
format simply appends new bindings to the table. All links in the | ||||
payload MUST have a relation type "boundTo". A GET request simply | ||||
returns the current state of a binding table whereas a DELETE request | ||||
empties the table. | ||||
The following example shows requests for adding, retrieving and | ||||
deleting bindings in a binding table. | ||||
Req: POST /bnd/ (Content-Format: application/link-format) | ||||
<coap://sensor.example.com/s/light>; | ||||
rel="boundto";anchor="/a/light";bind="obs";pmin="10";pmax="60" | ||||
Res: 2.04 Changed | ||||
Req: GET /bnd/ | ||||
Res: 2.05 Content (application/link-format) | ||||
<coap://sensor.example.com/s/light>; | ||||
rel="boundto";anchor="/a/light";bind="obs";pmin="10";pmax="60" | ||||
Req: DELETE /bnd/ | ||||
Res: 2.04 Changed | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
6.10. Future Interfaces | ||||
It is expected that further interface descriptions will be defined in | It is expected that further interface descriptions will be defined in | |||
this and other specifications. | this and other specifications. | |||
6.11. WADL Description | 6. Function Sets and Profiles | |||
This section defines the formal Web Application Description Langauge | ||||
(WADL) definition of these CoRE interface descriptions. | ||||
<?xml version="1.0" standalone="yes"?> | ||||
<application xmlns="http://research.sun.com/wadl/2006/10" | ||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||||
xmlns:senml="urn:ietf:params:xml:ns:senml"> | ||||
<grammars> | ||||
<include href="http://tools.ietf.org/html/draft-jennings-senml"/> | ||||
</grammars> | ||||
<doc title="CoRE Interfaces"/> | ||||
<resource_type id="s"> | ||||
<doc title="Sensor interface type"/> | ||||
<method href="#read"/> | ||||
<method href="#observe"/> | ||||
<method href="#observe-cancel"/> | ||||
<method href="#getattr"/> | ||||
<method href="#setattr"/> | ||||
</resource_type> | ||||
<resource_type id="p"> | ||||
<doc title="Parameter interfacee type"/> | ||||
<method href="#read"/> | ||||
<method href="#observe"/> | ||||
<method href="#observe-cancel"/> | ||||
<method href="#getattr"/> | ||||
<method href="#setattr"/> | ||||
<method href="#update"/> | ||||
</resource_type> | ||||
<resource_type id="rp"> | ||||
<doc title="Read-only Parameter interface type"/> | ||||
<method href="#read"/> | ||||
<method href="#observe"/> | ||||
<method href="#observe-cancel"/> | ||||
<method href="#getattr"/> | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
<method href="#setattr"/> | ||||
</resource_type> | ||||
<resource_type id="a"> | ||||
<doc title="Actuator interface type"/> | ||||
<method href="#read"/> | ||||
<method href="#observe"/> | ||||
<method href="#observe-cancel"/> | ||||
<method href="#getattr"/> | ||||
<method href="#setattr"/> | ||||
<method href="#update"/> | ||||
<method href="#apply"/> | ||||
</resource_type> | ||||
<resource_type id="ll"> | ||||
<doc title="Link List interface type"/></doc> | ||||
<method href="#listLinks"/> | ||||
</resource_type> | ||||
<resource_type id="b"> | ||||
<doc title="Batch of sub-resources interface type">The methods read, | ||||
observe, update and apply are applied to each sub- | ||||
resource of the requested resource that supports it. Mixed | ||||
sub-resource types can be supported.</doc> | ||||
<method href="#read"/> | ||||
<method href="#observe"/> | ||||
<method href="#observe-cancel"/> | ||||
<method href="#getattr"/> | ||||
<method href="#setattr"/> | ||||
<method href="#update"/> | ||||
<method href="#apply"/> | ||||
<method href="#listLinks"/> | ||||
</resource_type> | ||||
<resource_type id="lb"> | ||||
<doc title="Linked Batch interface type">. The methods read, | ||||
obervableRead, update and apply are applied to each linked | ||||
resource of the requested resource that supports it. Mixed | ||||
linked resource types can be supported.</doc> | ||||
<method href="#read"/> | ||||
<method href="#observe"/> | ||||
<method href="#observe-cancel"/> | ||||
<method href="#getattr"/> | ||||
<method href="#setattr"/> | ||||
<method href="#update"/> | ||||
<method href="#apply"/> | ||||
<method href="#listLinks"/> | ||||
<method href="#appendLinks"/> | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
<method href="#clearLinks"/> | ||||
</resource_type> | ||||
<resource_type id="hc"> | ||||
<doc title="Hypermedia Collection interface type">.</doc> | ||||
<method href="#read"/> | ||||
<method href="#observe"/> | ||||
<method href="#observe-cancel"/> | ||||
<method href="#getattr"/> | ||||
<method href="#setattr"/> | ||||
<method href="#update"/> | ||||
<method href="#apply"/> | ||||
<method href="#listLinks"/> | ||||
<method href="#appendLinks"/> | ||||
<method href="#clearLinks"/> | ||||
<method href="#updateLinks"/> | ||||
<method href="#readCollection"/> | ||||
<method href="#addItem"/> | ||||
</resource_type> | ||||
<resource_type id="bnd"> | ||||
<doc title="Binding table resource type">A modifiable list of | ||||
links. Each link MUST have the relation type "boundTo".</doc> | ||||
<method href="#listLinks"/> | ||||
<method href="#appendLinks"/> | ||||
<method href="#clearLinks"/> | ||||
</resource_type> | ||||
<method id="read" name="GET"> | ||||
<doc>Retrieve the value of a sensor, an actuator or a parameter. | ||||
Both HTTP and CoAP support this method.</doc> | ||||
<request> | ||||
</request> | ||||
<response status="200"> | ||||
<representation mediaType="text/plain"/> | ||||
<representation mediaType="application/senml+exi"/> | ||||
<representation mediaType="application/senml+xml"/> | ||||
<representation mediaType="application/senml+json"/> | ||||
</response> | ||||
<response status="2.05"> | ||||
<representation mediaType="text/plain"/> | ||||
<representation mediaType="application/senml+exi"/> | ||||
<representation mediaType="application/senml+xml"/> | ||||
<representation mediaType="application/senml+json"/> | ||||
</response> | ||||
</method> | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
<method id="observe" name="GET"> | ||||
<doc>Observe the value of a sensor, an actuator or a parameter. | ||||
Only CoAP supports this method since it requires the CoRE | ||||
Observe mechanism.</doc> | ||||
<request> | ||||
<param name="observe" style="header" type="xsd:integer"> | ||||
<option value = 0/> | ||||
</param> | ||||
</request> | ||||
<response status="2.05"> | ||||
<representation mediaType="text/plain"/> | ||||
<representation mediaType="application/senml+exi"/> | ||||
<representation mediaType="application/senml+xml"/> | ||||
<representation mediaType="application/senml+json"/> | ||||
</response> | ||||
</method> | ||||
<method id="observe-cancel" name="GET"> | ||||
<doc>Cancel observation in progress. | ||||
Only CoAP supports this method since it requires the CoRE | ||||
Observe mechanism.</doc> | ||||
<request> | ||||
<param name="observe" style="header" type="xsd:integer"> | ||||
<option value = 1/> | ||||
</param> | ||||
</request> | ||||
<response status="2.05"> | ||||
<representation mediaType="text/plain"/> | ||||
<representation mediaType="application/senml+exi"/> | ||||
<representation mediaType="application/senml+xml"/> | ||||
<representation mediaType="application/senml+json"/> | ||||
</response> | ||||
</method> | ||||
<method id="update" name="PUT"> | ||||
<doc>Control the actuator or update a parameter with a new value | ||||
or command. Both HTTP and CoAP support this method.</doc> | ||||
<request> | ||||
<representation mediaType="text/plain"/> | ||||
<representation mediaType="application/senml+exi"/> | ||||
<representation mediaType="application/senml+xml"/> | ||||
<representation mediaType="application/senml+json"/> | ||||
</request> | ||||
<response status="200"/> | ||||
<response status="2.04"/> | ||||
</method> | ||||
<method id="getattr" name="GET"> | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
<doc>Retrieve the observe attributes associated with a resource. | ||||
Both HTTP and CoAP support this method.</doc> | ||||
<request> | ||||
<doc>This request MUST contain an Accept option with | ||||
application/link-format when the resource supports | ||||
other GET methods.</doc> | ||||
<representation mediaType="application/link-format"/> | ||||
</request> | ||||
<response status="200"> | ||||
<representation mediaType="application/link-format"/> | ||||
</response> | ||||
<response status="2.05"> | ||||
<representation mediaType="application/link-format"/> | ||||
</response> | ||||
</method> | ||||
<method id="setattr" name="PUT"> | ||||
<doc>Set the values of some or all of the observe attributes | ||||
associated with a resource. | ||||
Both HTTP and CoAP support this method.</doc> | ||||
<request> | ||||
<param name="pmin" style="query" type="xsd:integer"/> | ||||
<param name="pmax" style="query" type="xsd:integer"/> | ||||
<param name="lt" style="query" type="xsd:decimal"/> | ||||
<param name="gt" style="query" type="xsd:decimal"/> | ||||
<param name="st" style="query" type="xsd:decimal"/> | ||||
</request> | ||||
<response status="200"> | ||||
</response> | ||||
<response status="2.04"> | ||||
</response> | ||||
</method> | ||||
<method id="apply" name="POST"> | ||||
<doc>Apply the value, if supplied, to resources. Both HTTP and CoAP | ||||
support this method.</doc> | ||||
<request> | ||||
<doc>The apply function may contain a payload to be applied.</doc> | ||||
</request> | ||||
<response status="200"/> | ||||
<response status="2.04"/> | ||||
</method> | ||||
<method id="listLinks" name="GET"> | ||||
<doc>Retrieve the list of Web links associated to a resource. | ||||
Both HTTP and CoAP support this method.</doc> | ||||
<request> | ||||
<doc>This request MUST contain an Accept option with | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
application/link-format when the resource supports | ||||
other GET methods.</doc> | ||||
</request> | ||||
<response status="200"> | ||||
<representation mediaType="application/link-format"/> | ||||
</response> | ||||
<response status="2.05"> | ||||
<representation mediaType="application/link-format"/> | ||||
</response> | ||||
</method> | ||||
<method id="appendLinks" name="POST"> | ||||
<doc>Append new Web links to a resource which is a collection | ||||
of links. Both HTTP and CoAP support this method.</doc> | ||||
<request> | ||||
<representation mediaType="application/link-format"/> | ||||
</request> | ||||
<response status="200"/> | ||||
<response status="2.04"/> | ||||
</method> | ||||
<method id="clearLinks" name="DELETE"> | ||||
<doc>Clear all Web Links in a resource which is a collection | ||||
of links. Both HTTP and CoAP support this method.</doc> | ||||
<request> | ||||
</request> | ||||
<response status="200"/> | ||||
<response status="2.02"/> | ||||
</method> | ||||
<method id="updateLinks" name="PATCH"> | ||||
<doc>Update all Web Links in a resource which is a collection | ||||
of links. Both HTTP and CoAP support this method.</doc> | ||||
<doc>This request MUST contain a Content-Format option with | ||||
application/merge-patch+json.</doc> | ||||
<request> | ||||
</request> | ||||
<response status="200"/> | ||||
<response status="2.04"/> | ||||
</method> | ||||
<method id="addItem" name="POST"> | ||||
<doc>Add zero or more items to the collection with their links. Both HTTP and CoAP support this method.</doc> | ||||
<doc>This request MAY contain a Content-Format option with | ||||
application/collection+senml+json.</doc> | ||||
<doc>This request MAY contain a Content-Format option with | ||||
application/senml+json.</doc> | ||||
<request> | ||||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
</request> | ||||
<response status="200"/> | ||||
<response status="2.01"/> | ||||
</method> | ||||
<method id="readCollection" name="GET"> | ||||
<doc>REturn a representation of both links and items in the collection. Both HTTP and CoAP support this method.</doc> | ||||
<doc>This request MUST contain an Accepts option with | ||||
application/collection+senml+json.</doc> | ||||
<request> | ||||
</request> | ||||
<response status="200"/> | ||||
<response status="2.05"/> | ||||
</method> | ||||
</application> | ||||
7. Function Sets and Profiles | ||||
This section defines how a set of REST resources can be created | This section defines how a set of REST resources can be created | |||
called a function set. A Function Set is similar to a function block | called a function set. A Function Set is similar to a function block | |||
in the sense that it consists of input, output and parameter | in the sense that it consists of input, output and parameter | |||
resources and contains internal logic. A Function Set can have a | resources and contains internal logic. A Function Set can have a | |||
subset of mandatory inputs, outputs and parameters to provide minimum | subset of mandatory inputs, outputs and parameters to provide minimum | |||
interoperability. It can also be extended with manufacturer/user- | interoperability. It can also be extended with manufacturer/user- | |||
specific resources. A device is composed of one or more Function Set | specific resources. A device is composed of one or more Function Set | |||
instances. | instances. | |||
An example of function sets can be found from the CoRE Resource | An example of function sets can be found from the CoRE Resource | |||
Directory specification that defines REST interfaces for | Directory specification that defines REST interfaces for | |||
registration, group and lookup [I-D.ietf-core-resource-directory]. | registration, group and lookup [I-D.ietf-core-resource-directory]. | |||
The OMA Lightweight M2M standard [REF] also defines a function set | The OMA Lightweight M2M standard [REF] also defines a function set | |||
structure called an Objects that use integer path, instance and | structure called an Objects that use integer path, instance and | |||
resource URI segments. OMA Objects can be defined and then | resource URI segments. OMA Objects can be defined and then | |||
registered with an OMA maintained registry [REF]. This section is | registered with an OMA maintained registry [REF]. This section is | |||
simply meant as a guideline for the definition of other such REST | simply meant as a guideline for the definition of other such REST | |||
interfaces, either custom or part of other specifications. | interfaces, either custom or part of other specifications. | |||
7.1. Defining a Function Set | 6.1. Defining a Function Set | |||
In a Function Set, types of resources are defined. Each type | In a Function Set, types of resources are defined. Each type | |||
includes a human readable name, a path template, a Resource Type for | includes a human readable name, a path template, a Resource Type for | |||
discovery, the Interface Definition and the data type and allowed | discovery, the Interface Definition and the data type and allowed | |||
values. A Function Set definition may also include a field | values. A Function Set definition may also include a field | |||
indicating if a sub-resource is mandatory or optional. | indicating if a sub-resource is mandatory or optional. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | 6.1.1. Path template | |||
7.1.1. Path template | ||||
A Function Set is a container resource under which its sub-resources | A Function Set is a container resource under which its sub-resources | |||
are organized. The profile defines the path to each resource of a | are organized. The profile defines the path to each resource of a | |||
Function Set in a path template. The template can contain either | Function Set in a path template. The template can contain either | |||
relative paths or absolute paths depending on the profile needs. An | relative paths or absolute paths depending on the profile needs. An | |||
absolute Function Set should be located at its recommended root path | absolute Function Set should be located at its recommended root path | |||
on a web server, however it can be located under an alternative path | on a web server, however it can be located under an alternative path | |||
if necessary (for example multi-purpose devices, gateways etc.). A | if necessary (for example multi-purpose devices, gateways etc.). A | |||
relative Function Set can be instantiated as many times as needed on | relative Function Set can be instantiated as many times as needed on | |||
a web server with an arbitrary root path. However some Function Sets | a web server with an arbitrary root path. However some Function Sets | |||
(e.g. device description) only make sense as singletons. | (e.g. device description) only make sense as singletons. | |||
The path template includes a possible index {#} parameter, and | The path template includes a possible index {#} parameter, and | |||
possible fixed path segments. The index {#} allows for multiple | possible fixed path segments. The index {#} allows for multiple | |||
instances of this type of resource, and can be any string. The root | instances of this type of resource, and can be any string. The root | |||
path and the indexes are the only variable elements in a path | path and the indexes are the only variable elements in a path | |||
template. All other path segments should be fixed. | template. All other path segments should be fixed. | |||
7.1.2. Resource Type | 6.1.2. Resource Type | |||
Each root resource of a Function Set is assigned a Resource Type | Each root resource of a Function Set is assigned a Resource Type | |||
parameter, therefore making it possible to discover it. Each sub- | parameter, therefore making it possible to discover it. Each sub- | |||
resource of a Function Set is also assigned a Resource Type | resource of a Function Set is also assigned a Resource Type | |||
parameter. This Resource Type is used for resource discovery and is | parameter. This Resource Type is used for resource discovery and is | |||
usually necessary to discover optional resources supported on a | usually necessary to discover optional resources supported on a | |||
specific device. The Resource Type of a Function Set may also be | specific device. The Resource Type of a Function Set may also be | |||
used for service discovery and can be exported to DNS-SD [RFC6763] | used for service discovery and can be exported to DNS-SD [RFC6763] | |||
for example. | for example. | |||
The Resource Type parameter defines the value that should be included | The Resource Type parameter defines the value that should be included | |||
in the rt= field of the CoRE Link Format when describing a link to | in the rt= field of the CoRE Link Format when describing a link to | |||
this resource. The value SHOULD be in the form "namespace.type" for | this resource. The value SHOULD be in the form "namespace.type" for | |||
root resources and "namespace.type.subtype" for sub-resources. This | root resources and "namespace.type.subtype" for sub-resources. This | |||
naming convention facilitates resource type filtering with the | naming convention facilitates resource type filtering with the | |||
/.well-known/core resource. However a profile could allow mixing in | /.well-known/core resource. However a profile could allow mixing in | |||
foreign namespace references within a Function Set to import external | foreign namespace references within a Function Set to import external | |||
references from other object models (e.g. SenML and UCUM). | references from other object models (e.g. SenML and UCUM). | |||
7.1.3. Interface Description | 6.1.3. Interface Description | |||
The Interface Description parameter defines the REST interface for | The Interface Description parameter defines the REST interface for | |||
that type of resource. Several base interfaces are defined in | that type of resource. Several base interfaces are defined in | |||
Section 6 of this document. For a given profile, the Interface | Section 5 of this document. For a given profile, the Interface | |||
Description may be inferred from the Resource Type. In that case the | Description may be inferred from the Resource Type. In that case the | |||
Interface Description MAY be elided from link descriptions of | Interface Description MAY be elided from link descriptions of | |||
resource types defined in the profile, but should be included for | resource types defined in the profile, but should be included for | |||
custom extensions to the profile. | custom extensions to the profile. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
The root resource of a Function Set should provide a list of links to | The root resource of a Function Set should provide a list of links to | |||
its sub-resources in order to offer gradual reveal of resources. The | its sub-resources in order to offer gradual reveal of resources. The | |||
CoRE Link List interface defined in Section 6.1 offers this | CoRE Link List interface defined in Section 5.1 offers this | |||
functionality so a root resource should support this interface or a | functionality so a root resource should support this interface or a | |||
derived interface like CoRE Batch (See Section 6.2). | derived interface like CoRE Batch (See Section 5.2). | |||
7.1.4. Data type | 6.1.4. Data type | |||
The Data Type field defines the type of value (and possible range) | The Data Type field defines the type of value (and possible range) | |||
that is returned in response to a GET for that resource or accepted | that is returned in response to a GET for that resource or accepted | |||
with a PUT. The interfaces defined in Section 6 make use of plain | with a PUT. The interfaces defined in Section 5 make use of plain | |||
text and SenML Media types for the actual format of this data. A | text and SenML Media types for the actual format of this data. A | |||
profile may restrict the list of supported content formats for the | profile may restrict the list of supported content formats for the | |||
CoRE interfaces or define new interfaces with new content types. | CoRE interfaces or define new interfaces with new content types. | |||
7.2. Discovery | 6.2. Discovery | |||
A device conforming to a profile SHOULD make its resources | A device conforming to a profile SHOULD make its resources | |||
discoverable by providing links to the resources on the path /.well- | discoverable by providing links to the resources on the path /.well- | |||
known/core as defined in [RFC6690]. All resources hosted on a device | known/core as defined in [RFC6690]. All resources hosted on a device | |||
SHOULD be discoverable either with a direct link in /.well-known/core | SHOULD be discoverable either with a direct link in /.well-known/core | |||
or by following successive links starting from /.well-known/core. | or by following successive links starting from /.well-known/core. | |||
The root path of a Function Set instance SHOULD be directly | The root path of a Function Set instance SHOULD be directly | |||
referenced in /.well-known/core in order to offer discovery at the | referenced in /.well-known/core in order to offer discovery at the | |||
first discovery stage. A device with more than 10 individual | first discovery stage. A device with more than 10 individual | |||
resources SHOULD only expose Function Set instances in /.well-known/ | resources SHOULD only expose Function Set instances in /.well-known/ | |||
core to limit the size of this resource. | core to limit the size of this resource. | |||
In addition, a device MAY register its resources to a Resource | In addition, a device MAY register its resources to a Resource | |||
Directory using the registration interface defined in | Directory using the registration interface defined in | |||
[I-D.ietf-core-resource-directory] if such a directory is available. | [I-D.ietf-core-resource-directory] if such a directory is available. | |||
7.3. Versioning | 6.3. Versioning | |||
A profile should track Function Set changes to avoid incompatibility | A profile should track Function Set changes to avoid incompatibility | |||
issues. Evolutions in a Function Set SHOULD be backward compatible. | issues. Evolutions in a Function Set SHOULD be backward compatible. | |||
8. Security Considerations | 7. Security Considerations | |||
An implementation of a client needs to be prepared to deal with | An implementation of a client needs to be prepared to deal with | |||
responses to a request that differ from what is specified in this | responses to a request that differ from what is specified in this | |||
document. A server implementing what the client thinks is a resource | document. A server implementing what the client thinks is a resource | |||
with one of these interface descriptions could return malformed | with one of these interface descriptions could return malformed | |||
representations and response codes either by accident or maliciously. | representations and response codes either by accident or maliciously. | |||
A server sending maliciously malformed responses could attempt to | A server sending maliciously malformed responses could attempt to | |||
take advantage of a poorly implemented client for example to crash | take advantage of a poorly implemented client for example to crash | |||
the node or perform denial of service. | the node or perform denial of service. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | 8. IANA Considerations | |||
9. IANA Considerations | ||||
The interface description types defined require registration. | The interface description types defined require registration. | |||
The new link relations type "boundto" and "grp" require registration. | The new link relations type "grp" requires registration. | |||
10. Acknowledgments | 9. Acknowledgments | |||
Acknowledgement is given to colleagues from the SENSEI project who | Acknowledgement is given to colleagues from the SENSEI project who | |||
were critical in the initial development of the well-known REST | were critical in the initial development of the well-known REST | |||
interface concept, to members of the IPSO Alliance where further | interface concept, to members of the IPSO Alliance where further | |||
requirements for interface types have been discussed, and to Szymon | requirements for interface types have been discussed, and to Szymon | |||
Sasin, Cedric Chauvenet, Daniel Gavelle and Carsten Bormann who have | Sasin, Cedric Chauvenet, Daniel Gavelle and Carsten Bormann who have | |||
provided useful discussion and input to the concepts in this | provided useful discussion and input to the concepts in this | |||
document. | document. | |||
11. Changelog | 10. Changelog | |||
Changes from -04 to -05 | ||||
o Removed Link Bindings and Observe attributes. This functionality | ||||
is now contained in I-D.ietf-core-dynlink. | ||||
o Hypermedia collections have been removed. This is covered in a | ||||
new T2TRG draft. | ||||
o The WADL description has been removed. | ||||
o Fixed minor typos. | ||||
o Updated references. | ||||
Changes from -03 to -04 | Changes from -03 to -04 | |||
o Fixed tickets #385 and #386 | o Fixed tickets #385 and #386. | |||
o Changed abstract and into to better describe content | o Changed abstract and into to better describe content. | |||
o Focus on Interface and not function set/profiles in intro | o Focus on Interface and not function set/profiles in intro. | |||
o Changed references from draft-core-observe to RFC7641 | o Changed references from draft-core-observe to RFC7641. | |||
o Moved Function sets and Profiles to section after Interfaces | o Moved Function sets and Profiles to section after Interfaces. | |||
o Moved Observe Attributes to the Link Binding section | o Moved Observe Attributes to the Link Binding section. | |||
o Add a Collection section to describe the collection types | o Add a Collection section to describe the collection types. | |||
o Add the Hypermedia Collection Interface Description | o Add the Hypermedia Collection Interface Description. | |||
Changes from -02 to -03 | Changes from -02 to -03 | |||
o Added lt and gt to binding format section. | o Added lt and gt to binding format section. | |||
o Added pmin and pmax observe parameters to Observation Attributes | o Added pmin and pmax observe parameters to Observation Attributes. | |||
o Changed the definition of lt and gt to limit crossing. | o Changed the definition of lt and gt to limit crossing. | |||
o Added definitions for getattr and setattr to WADL. | o Added definitions for getattr and setattr to WADL. | |||
o Added getattr and setattr to observable interfaces. | o Added getattr and setattr to observable interfaces. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
o Removed query parameters from Observe definition. | o Removed query parameters from Observe definition. | |||
o Added observe-cancel definition to WADL and to observable | o Added observe-cancel definition to WADL and to observable | |||
interfaces. | interfaces. | |||
Changes from -01 to -02 | Changes from -01 to -02 | |||
o Updated the date and version, fixed references. | o Updated the date and version, fixed references. | |||
o Removed pmin and pmax observe parameters [Ticket #336] | o Removed pmin and pmax observe parameters [Ticket #336] | |||
skipping to change at page 34, line 5 ¶ | skipping to change at page 19, line 38 ¶ | |||
o Defined a Function Set and its guidelines. | o Defined a Function Set and its guidelines. | |||
o Added the Link List interface. | o Added the Link List interface. | |||
o Added the Linked Batch interface. | o Added the Linked Batch interface. | |||
o Improved the WADL interface definition. | o Improved the WADL interface definition. | |||
o Added a simple profile example. | o Added a simple profile example. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | 11. References | |||
12. References | ||||
12.1. Normative References | 11.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
[RFC5988] Nottingham, M., "Web Linking", RFC 5988, | [RFC5988] Nottingham, M., "Web Linking", RFC 5988, | |||
DOI 10.17487/RFC5988, October 2010, | DOI 10.17487/RFC5988, October 2010, | |||
<http://www.rfc-editor.org/info/rfc5988>. | <http://www.rfc-editor.org/info/rfc5988>. | |||
[RFC6690] Shelby, Z., "Constrained RESTful Environments (CoRE) Link | [RFC6690] Shelby, Z., "Constrained RESTful Environments (CoRE) Link | |||
Format", RFC 6690, DOI 10.17487/RFC6690, August 2012, | Format", RFC 6690, DOI 10.17487/RFC6690, August 2012, | |||
<http://www.rfc-editor.org/info/rfc6690>. | <http://www.rfc-editor.org/info/rfc6690>. | |||
12.2. Informative References | 11.2. Informative References | |||
[I-D.ietf-core-resource-directory] | [I-D.ietf-core-resource-directory] | |||
Shelby, Z., Koster, M., Bormann, C., and P. Stok, "CoRE | Shelby, Z., Koster, M., Bormann, C., and P. Stok, "CoRE | |||
Resource Directory", draft-ietf-core-resource-directory-04 | Resource Directory", draft-ietf-core-resource-directory-07 | |||
(work in progress), July 2015. | (work in progress), March 2016. | |||
[I-D.jennings-core-senml] | [I-D.ietf-core-senml] | |||
Jennings, C., Shelby, Z., Arkko, J., and A. Keranen, | Jennings, C., Shelby, Z., Arkko, J., and A. | |||
"Media Types for Sensor Markup Language (SENML)", draft- | KerĂ[currency units]nen, "Media Types for Sensor | |||
jennings-core-senml-01 (work in progress), July 2015. | Markup Language (SenML)", draft-ietf-core-senml-00 (work | |||
in progress), April 2016. | ||||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
<http://www.rfc-editor.org/info/rfc3986>. | <http://www.rfc-editor.org/info/rfc3986>. | |||
[RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | |||
Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | |||
<http://www.rfc-editor.org/info/rfc6763>. | <http://www.rfc-editor.org/info/rfc6763>. | |||
[RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
Application Protocol (CoAP)", RFC 7252, | Application Protocol (CoAP)", RFC 7252, | |||
DOI 10.17487/RFC7252, June 2014, | DOI 10.17487/RFC7252, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7252>. | <http://www.rfc-editor.org/info/rfc7252>. | |||
[RFC7396] Hoffman, P. and J. Snell, "JSON Merge Patch", RFC 7396, | [RFC7396] Hoffman, P. and J. Snell, "JSON Merge Patch", RFC 7396, | |||
DOI 10.17487/RFC7396, October 2014, | DOI 10.17487/RFC7396, October 2014, | |||
<http://www.rfc-editor.org/info/rfc7396>. | <http://www.rfc-editor.org/info/rfc7396>. | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
[RFC7641] Hartke, K., "Observing Resources in the Constrained | ||||
Application Protocol (CoAP)", RFC 7641, | ||||
DOI 10.17487/RFC7641, September 2015, | ||||
<http://www.rfc-editor.org/info/rfc7641>. | ||||
Appendix A. Profile example | Appendix A. Profile example | |||
The following is a short definition of simple profile. This | The following is a short definition of simple profile. This | |||
simplistic profile is for use in the examples of this document. | simplistic profile is for use in the examples of this document. | |||
+--------------------+-----------+------------+---------+ | +--------------------+-----------+------------+---------+ | |||
| Function Set | Root Path | RT | IF | | | Function Set | Root Path | RT | IF | | |||
+--------------------+-----------+------------+---------+ | +--------------------+-----------+------------+---------+ | |||
| Device Description | /d | simple.dev | core.ll | | | Device Description | /d | simple.dev | core.ll | | |||
| Sensors | /s | simple.sen | core.b | | | Sensors | /s | simple.sen | core.b | | |||
skipping to change at page 36, line 5 ¶ | skipping to change at page 21, line 37 ¶ | |||
| Light | /s/light | simple.sen.lt | core.s | xsd:decimal | | | Light | /s/light | simple.sen.lt | core.s | xsd:decimal | | |||
| | | | | (lux) | | | | | | | (lux) | | |||
| Humidity | /s/humidity | simple.sen.hum | core.s | xsd:decimal | | | Humidity | /s/humidity | simple.sen.hum | core.s | xsd:decimal | | |||
| | | | | (%RH) | | | | | | | (%RH) | | |||
| Temperature | /s/temp | simple.sen.tmp | core.s | xsd:decimal | | | Temperature | /s/temp | simple.sen.tmp | core.s | xsd:decimal | | |||
| | | | | (degC) | | | | | | | (degC) | | |||
+-------------+-------------+----------------+--------+-------------+ | +-------------+-------------+----------------+--------+-------------+ | |||
Sensors Function Set | Sensors Function Set | |||
Internet-DrafReusable Interface Definitions for Constrained October 2015 | ||||
+------+------------+----------------+--------+-------------+ | +------+------------+----------------+--------+-------------+ | |||
| Type | Path | RT | IF | Data Type | | | Type | Path | RT | IF | Data Type | | |||
+------+------------+----------------+--------+-------------+ | +------+------------+----------------+--------+-------------+ | |||
| LED | /a/{#}/led | simple.act.led | core.a | xsd:boolean | | | LED | /a/{#}/led | simple.act.led | core.a | xsd:boolean | | |||
+------+------------+----------------+--------+-------------+ | +------+------------+----------------+--------+-------------+ | |||
Actuators Function Set | Actuators Function Set | |||
Authors' Addresses | Authors' Addresses | |||
Zach Shelby | Zach Shelby | |||
ARM | ARM | |||
150 Rose Orchard | 150 Rose Orchard | |||
San Jose 95134 | San Jose 95134 | |||
FINLAND | FINLAND | |||
Phone: +1-408-203-9434 | Phone: +1-408-203-9434 | |||
Email: zach.shelby@arm.com | Email: zach.shelby@arm.com | |||
Matthieu Vial | Matthieu Vial | |||
skipping to change at page 36, line 35 ¶ | skipping to change at page 22, line 22 ¶ | |||
Matthieu Vial | Matthieu Vial | |||
Schneider-Electric | Schneider-Electric | |||
Grenoble | Grenoble | |||
FRANCE | FRANCE | |||
Phone: +33 (0)47657 6522 | Phone: +33 (0)47657 6522 | |||
Email: matthieu.vial@schneider-electric.com | Email: matthieu.vial@schneider-electric.com | |||
Michael Koster | Michael Koster | |||
ARM | SmartThings | |||
150 Rose Orchard | 665 Clyde Avenue | |||
San Jose 95134 | Mountain View 94043 | |||
USA | USA | |||
Email: michael.koster@arm.com | Email: michael.koster@smartthings.com | |||
Christian Groves | ||||
Huawei | ||||
Australia | ||||
Email: Christian.Groves@nteczone.com | ||||
End of changes. 82 change blocks. | ||||
902 lines changed or deleted | 165 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |