<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.12 -->
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc iprnotified="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc sortrefs="yes"?>
<?rfc colonspace="yes"?>
<?rfc rfcedstyle="no"?>
<?rfc tocdepth="4"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-t2trg-rest-iot-09" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" tocDepth="4" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="RESTful Design for IoT Systems">Guidance on RESTful Design for Internet of Things Systems</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-t2trg-rest-iot-09"/>
    <author initials="A." surname="Keranen" fullname="Ari Keranen">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street/>
          <city>Jorvas</city>
          <code>02420</code>
          <country>Finland</country>
        </postal>
        <email>ari.keranen@ericsson.com</email>
      </address>
    </author>
    <author initials="M." surname="Kovatsch" fullname="Matthias Kovatsch">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Riesstr. 25</street>
          <city>Munich</city>
          <code>D-80992</code>
          <country>Germany</country>
        </postal>
        <email>matthias.kovatsch@huawei.com</email>
      </address>
    </author>
    <author initials="K." surname="Hartke" fullname="Klaus Hartke">
      <organization/>
      <address>
        <email>hartke@projectcool.de</email>
      </address>
    </author>
    <date year="2022" month="February" day="26"/>
    <area>T2TRG</area>
    <abstract>
      <t>This document gives guidance for designing Internet of Things (IoT) systems
that follow the principles of the Representational State Transfer (REST)
architectural style. This document is a product of the IRTF Thing-to-Thing
Research Group (T2TRG).</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>The Representational State Transfer (REST) architectural style <xref target="REST" format="default"/> is a set of guidelines and best practices for building distributed hypermedia systems.
At its core is a set of constraints, which when fulfilled enable desirable properties for distributed software systems such as scalability and modifiability.
When REST principles are applied to the design of a system, the result is often called RESTful and in particular an API following these principles is called a RESTful API.</t>
      <t>Different protocols can be used with RESTful systems, but at the time of writing the most common protocols are HTTP <xref target="RFC7230" format="default"/> and CoAP <xref target="RFC7252" format="default"/>.
Since RESTful APIs are often lightweight and enable loose coupling of system components, they are a good fit for various Internet of Things (IoT) applications, which in general aim at interconnecting the physical world with the virtual world.
The goal of this document is to give basic guidance for designing RESTful systems and APIs for IoT applications and give pointers for more information.</t>
      <t>Design of a good RESTful IoT system has naturally many commonalities with other Web systems.
Compared to other systems, the key characteristics of many RESTful IoT systems include:</t>
      <ul spacing="normal">
        <li>accommodating for constrained devices <xref target="RFC7228" format="default"/>, so with IoT, REST is not only used for scaling out (large number of clients on a Web server), but also for scaling down (efficient server on constrained node, e.g., in energy consumption or implementation complexity)</li>
        <li>facilitating efficient transfer over (often) constrained networks and lightweight processing in constrained nodes through compact and simple data formats</li>
        <li>minimizing or preferably avoiding the need for human interaction through machine-understandable data formats and interaction patterns</li>
        <li>enabling the system to evolve gradually in the field, as the usually large number of endpoints can not be updated simultaneously</li>
        <li>having endpoints that are both clients and servers</li>
      </ul>
    </section>
    <section anchor="sec-terms" numbered="true" toc="default">
      <name>Terminology</name>
      <t>This section explains selected terminology that is commonly used in the context of RESTful design for IoT systems.
For terminology of constrained nodes and networks, see <xref target="RFC7228" format="default"/>.
Terminology on modeling of Things and their affordances (Properties, Actions, and Events) was taken from <xref target="I-D.ietf-asdf-sdf" format="default"/>.</t>
      <dl>
        <dt>
Action:  </dt>
        <dd>
          <t>An affordance that can potentially be used to perform a named operation on a Thing.</t>
        </dd>
        <dt>
Action Result:  </dt>
        <dd>
          <t>A representation sent as a response by a server that does not represent resource state, but the result of the interaction with the originally addressed resource.</t>
        </dd>
        <dt>
Affordance:  </dt>
        <dd>
          <t>An element of an interface offered for interaction, defining its
possible uses or making clear how it can or should be used.  The
term is used here for the digital interfaces of a Thing only; it
might also have physical affordances such as buttons, dials, and
displays.</t>
        </dd>
        <dt>
Cache:  </dt>
        <dd>
          <t>A local store of response messages and the subsystem that controls storage, retrieval, and deletion of messages in it.</t>
        </dd>
        <dt>
Client:  </dt>
        <dd>
          <t>A node that sends requests to servers and receives responses; it therefore has the initiative to interact.
In RESTful IoT systems it is common for nodes to have more than one role (i.e., to be both server and client; see <xref target="sec-architecture" format="default"/>).</t>
        </dd>
        <dt>
Client State:  </dt>
        <dd>
          <t>The state kept by a client between requests.
This typically includes the currently processed representation, the set of active requests, the history of requests, bookmarks (URIs stored for later retrieval), and application-specific state (e.g., local variables).
(Note that this is called "Application State" in <xref target="REST" format="default"/>, which has some ambiguity in modern (IoT) systems where resources are highly dynamic and the overall state of the distributed application (i.e., application state) is reflected in the union of all Client States and Resource States of all clients and servers involved.)</t>
        </dd>
        <dt>
Content Type:  </dt>
        <dd>
          <t>A string that carries the media type plus potential parameters for the representation format such as "text/plain;charset=UTF-8".</t>
        </dd>
        <dt>
Content Negotiation:  </dt>
        <dd>
          <t>The practice of determining the "best" representation for a client when examining the current state of a resource.
The most common forms of content negotiation are Proactive Content Negotiation and Reactive Content Negotiation.</t>
        </dd>
        <dt>
Dereference:  </dt>
        <dd>
          <t>To use an access mechanism (e.g., HTTP or CoAP) to interact with the resource of a URI.</t>
        </dd>
        <dt>
Dereferenceable URI:  </dt>
        <dd>
          <t>A URI that can be dereferenced, i.e., interaction with the identified resource is possible.
Not all HTTP or CoAP URIs are dereferenceable, e.g., when the target resource does not exist.</t>
        </dd>
        <dt>
Event:  </dt>
        <dd>
          <t>An affordance that can potentially be used to (recurrently) obtain information about what happened to a Thing, e.g., through server push.</t>
        </dd>
        <dt>
Form:  </dt>
        <dd>
          <t>A hypermedia control that enables a client to construct more complex requests, e.g., to change the state of a resource or perform specific queries.</t>
        </dd>
        <dt>
Forward Proxy:  </dt>
        <dd>
          <t>An intermediary that is selected by a client, usually via local configuration rules, and that can be tasked to make requests on behalf of the client.
This may be useful, for example, when the client lacks the capability to make the request itself or to service the response from a cache in order to reduce response time, network bandwidth, and energy consumption.</t>
        </dd>
        <dt>
Gateway:  </dt>
        <dd>
          <t>A reverse proxy that provides an interface to a non-RESTful system such as legacy systems or alternative technologies such as Bluetooth Attribute Profile (ATT) or Generic Attribute Profile (GATT).
See also "Reverse Proxy".</t>
        </dd>
        <dt>
Hypermedia Control:  </dt>
        <dd>
          <t>Information provided by a server on how to use its RESTful API; usually a URI and instructions on how to dereference it for a specific interaction. Hypermedia Controls are the serialized/encoded affordances of hypermedia systems.</t>
        </dd>
        <dt>
Idempotent Method:  </dt>
        <dd>
          <t>A method where multiple identical requests with that method lead to the same visible resource state as a single such request.</t>
        </dd>
        <dt>
Link:  </dt>
        <dd>
          <t>A hypermedia control that enables a client to navigate between resources and thereby change the client state.</t>
        </dd>
        <dt>
Link Relation Type:  </dt>
        <dd>
          <t>An identifier that describes how the link target resource relates to the current resource (see <xref target="RFC8288" format="default"/>).</t>
        </dd>
        <dt>
Media Type:  </dt>
        <dd>
          <t>An IANA-registered string such as "text/html" or "application/json" that is used to label representations so that it is known how the representation should be interpreted and how it is encoded.</t>
        </dd>
        <dt>
Method:  </dt>
        <dd>
          <t>An operation associated with a resource. Common methods include GET, PUT, POST, and DELETE (see <xref target="sec-methods" format="default"/> for details).</t>
        </dd>
        <dt>
Origin Server:  </dt>
        <dd>
          <t>A server that is the definitive source for representations of its resources and the ultimate recipient of any request that intends to modify its resources.
In contrast, intermediaries (such as proxies caching a representation) can assume the role of a server, but are not the source for representations as these are acquired from the origin server.</t>
        </dd>
        <dt>
Proactive Content Negotiation:  </dt>
        <dd>
          <t>A content negotiation mechanism where the server selects a representation based on the expressed preference of the client.
For example, an IoT application could send a request that prefers to accept the media type "application/senml+json".</t>
        </dd>
        <dt>
Property:  </dt>
        <dd>
          <t>An affordance that can potentially be used to read, write, and/or observe state on a Thing.</t>
        </dd>
        <dt>
Reactive Content Negotiation:  </dt>
        <dd>
          <t>A content negotiation mechanism where the client selects a representation from a list of available representations.
The list may, for example, be included by a server in an initial response.
If the user agent is not satisfied by the initial response representation, it can request one or more of the alternative representations, selected based on metadata (e.g., available media types) included in the response.</t>
        </dd>
        <dt>
Representation:  </dt>
        <dd>
          <t>A serialization that represents the current or intended state of a resource and that can be transferred between client and server.
REST requires representations to be self-describing, meaning that there must be metadata that allows peers to understand which representation format is used.
Depending on the protocol needs and capabilities, there can be additional metadata that is transmitted along with the representation.</t>
        </dd>
        <dt>
Representation Format:  </dt>
        <dd>
          <t>A set of rules for serializing resource state.
On the Web, the most prevalent representation format is HTML.
Other common formats include plain text and formats based on JSON <xref target="RFC8259" format="default"/>, XML, or RDF. Within IoT systems, often compact formats based on JSON, CBOR <xref target="RFC8949" format="default"/>, and EXI <xref target="W3C.REC-exi-20110310" format="default"/> are used.</t>
        </dd>
        <dt>
Representational State Transfer (REST):  </dt>
        <dd>
          <t>An architectural style for Internet-scale distributed hypermedia systems.</t>
        </dd>
        <dt>
Resource:  </dt>
        <dd>
          <t>An item of interest identified by a URI.
Anything that can be named can be a resource.
A resource often encapsulates a piece of state in a system.
Typical resources in an IoT system can be, e.g., a sensor, the current value of a sensor, the location of a device, or the current state of an actuator.</t>
        </dd>
        <dt>
Resource State:  </dt>
        <dd>
          <t>A model of the possible states of a resource that is expressed in supported representation formats.
Resources can change state because of REST interactions with them, or they can change state for reasons outside of the REST model, e.g., business logic implemented on the server side such as sampling a sensor.</t>
        </dd>
        <dt>
Resource Type:  </dt>
        <dd>
          <t>An identifier that annotates the application-semantics of a resource (see <xref section="3.1" sectionFormat="of" target="RFC6690" format="default"/>).</t>
        </dd>
        <dt>
Reverse Proxy:  </dt>
        <dd>
          <t>An intermediary that appears as a server towards the client but satisfies the requests by forwarding them to the actual server (possibly via one or more other intermediaries).
A reverse proxy is often used to encapsulate legacy services, to improve server performance through caching, and to enable load balancing across multiple machines.</t>
        </dd>
        <dt>
Safe Method:  </dt>
        <dd>
          <t>A method that does not result in any state change on the origin server when applied to a resource.</t>
        </dd>
        <dt>
Server:  </dt>
        <dd>
          <t>A node that listens for requests, performs the requested operation, and sends responses back to the clients.
In RESTful IoT systems it is common for nodes to have more than one role (i.e., to be both server and client; see <xref target="sec-architecture" format="default"/>).</t>
        </dd>
        <dt>
Thing:  </dt>
        <dd>
          <t>A physical item that is made available in the Internet of Things, thereby enabling digital interaction with the physical world for humans, services, and/or other Things.</t>
        </dd>
        <dt>
Transfer protocols:  </dt>
        <dd>
          <t>In particular in the IoT domain, protocols above the transport layer that are used to transfer data objects and provide semantics for operations on the data.</t>
        </dd>
        <dt>
Transfer layer:  </dt>
        <dd>
          <t>Re-usable part of the application layer used to transfer the application specific data items using a standard set of methods that can fulfill application-specific operations.</t>
        </dd>
        <dt>
Uniform Resource Identifier (URI):  </dt>
        <dd>
          <t>A global identifier for resources.
See <xref target="sec-uris" format="default"/> for more details.</t>
        </dd>
      </dl>
    </section>
    <section anchor="basics" numbered="true" toc="default">
      <name>Basics</name>
      <section anchor="sec-architecture" numbered="true" toc="default">
        <name>Architecture</name>
        <t>The components of a RESTful system are assigned one or both of two roles: client or server.
Note that the terms "client" and "server" refer only to the roles that the nodes assume for a particular message exchange.
The same node might act as a client in some communications and a server in others.
Classic user agents (e.g., Web browsers) are always in the client role and have the initiative to issue requests.
Origin servers always have the server role and govern over the resources they host.
Simple IoT devices, such as sensors and actuators, are commonly acting as servers and exposing their physical world interaction capabilities (e.g., temperature measurement or door lock control capability) as resources.</t>
        <t>Which resources exist and how they can be used is expressed by the servers in so-called affordances, which is metadata that can be included in responses (e.g., the initial response from a well-known resource) or be made available out of band (e.g., through a W3C Thing Description document <xref target="W3C-TD" format="default"/> from a directory).
In RESTful systems, affordances are encoded as hypermedia controls of which exist two types: links that allow to navigate between resources and forms that enable clients to formulate more complex requests (e.g., to modify a resource or perform a query).</t>
        <t>A typical IoT system client can be a cloud service that retrieves data from the sensors and commands the actuators based on the sensor information.
Alternatively an IoT data storage system could work as a server where IoT sensor devices send their data in client role.</t>
        <figure anchor="basic-arch-x">
          <name>Client-Server Communication</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
 ________                       _________
|        |                     |         |
| User  (C)-------------------(S) Origin |
| Agent  |                     |  Server |
|________|                     |_________|
(Browser)                      (Web Server)
]]></artwork>
        </figure>
        <t>Intermediaries (such as forward proxies, reverse proxies, and gateways) implement both roles, but only forward requests to other intermediaries or origin servers.
They can also translate requests to different protocols, for instance, as CoAP-HTTP cross-proxies <xref target="RFC8075" format="default"/>.</t>
        <figure anchor="basic-arch-a">
          <name>Communication with Forward Proxy</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
 ________       __________                        _________
|        |     |          |                      |         |
| User  (C)---(S) Inter- (C)--------------------(S) Origin |
| Agent  |     |  mediary |                      |  Server |
|________|     |__________|                      |_________|
(Browser)     (Forward Proxy)                    (Web Server)
]]></artwork>
        </figure>
        <t>Reverse proxies are usually imposed by the origin server.
In addition to the features of a forward proxy, they can also provide an interface for non-RESTful services such as legacy systems or alternative technologies such as Bluetooth ATT/GATT.
In this case, reverse proxies are usually called gateways.
This property is enabled by the Layered System constraint of REST, which says that a client cannot see beyond the server it is connected to (i.e., it is left unaware of the protocol/paradigm change).</t>
        <figure anchor="basic-arch-b">
          <name>Communication with Reverse Proxy</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
 ________                        __________       _________
|        |                      |          |     |         |
| User  (C)--------------------(S) Inter- (x)---(x) Origin |
| Agent  |                      |  mediary |     |  Server |
|________|                      |__________|     |_________|
(Browser)                        (Gateway)     (Legacy System)
]]></artwork>
        </figure>
        <t>Nodes in IoT systems often implement both roles.
Unlike intermediaries, however, they can take the initiative as a client (e.g., to register with a directory, such as CoRE Resource Directory <xref target="I-D.ietf-core-resource-directory" format="default"/>, or to interact with another Thing) and act as origin server at the same time (e.g., to serve sensor values or provide an actuator interface).</t>
        <figure anchor="basic-arch-c">
          <name>Constrained RESTful environments</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
 ________                                         _________
|        |                                       |         |
| Thing (C)-------------------------------------(S) Origin |
|       (S)                                      |  Server |
|________| \                                     |_________|
 (Sensor)   \   ________                     (Resource Directory)
             \ |        |
              (C) Thing |
               |________|
              (Controller)
]]></artwork>
        </figure>
      </section>
      <section anchor="system-design" numbered="true" toc="default">
        <name>System design</name>
        <t>When designing a RESTful system, the primary effort goes into modeling the application as distributed state and assigning it to the different components (i.e., clients and servers).
The secondary effort is then selecting or designing the necessary representation formats to exchange information and enable interaction between the components through resources.</t>
        <t>How clients can navigate through the resource space and modify state to achieve their goals is encoded in hypermedia controls, that is, links and forms within the representations.
The concept behind hypermedia controls is to provide machine-understandable "affordances" <xref target="HCI" format="default"/>, which refer to the perceived and actual properties of a Thing and determine how it could possibly be used.
A physical door may have a door knob as affordance, indicating that the door can be opened by twisting the knob; a keyhole may indicate that it can be locked.
For Things in the IoT, these affordances may be serialized as two hypermedia forms, which include semantic identifiers from a controlled vocabulary (e.g., schema.org) and the instructions on how to formulate the requests for opening and locking, respectively.
Overall, this allows to realize a Uniform Interface (see <xref target="sec-uniform-interface" format="default"/>), which enables loose coupling between clients and servers.</t>
        <t>Hypermedia controls span a kind of state machine where the nodes are resources (or action results) and the transitions are links or forms.
Clients run this distributed state machine (i.e., the application) by retrieving representations, processing the data, and following the included links and/or submitting forms to modify remote state.
This is usually done by retrieving the current state, modifying the state on the client side, and transferring the new state to the server in the form of new representations -- rather than calling a service and modifying the state on the server side.</t>
        <t>Client state encompasses the current state of the described state machine and the possible next transitions derived from the hypermedia controls within the currently processed representation.
Furthermore, clients can have part of the state of the distributed application in local variables.</t>
        <t>Resource state includes the more persistent data of an application (i.e., independent of individual clients).
This can be static data such as device descriptions, persistent data such as system configurations, but also dynamic data such as the current value of a sensor on a Thing.</t>
        <t>In the design, it is important to distinguish between "client state" and "resource state", and keep them separate.
Following the Stateless constraint, the client state must be kept only on clients.
That is, there is no establishment of shared information about past and future interactions between client and server (usually called a session).
On the one hand, this makes requests a bit more verbose since every request must contain all the information necessary to process it.
On the other hand, this makes servers efficient and scalable, since they do not have to keep any state about their clients.
Requests can easily be distributed over multiple worker threads or server instances (cf. load balancing).
For IoT systems, this constraint lowers the memory requirements for server implementations, which is particularly important for constrained servers (e.g., sensor nodes) and servers serving large amount of clients (e.g., Resource Directory).</t>
      </section>
      <section anchor="sec-uris" numbered="true" toc="default">
        <name>Uniform Resource Identifiers (URIs)</name>
        <t>An important aspect of RESTful API design is to model the system as a set of resources, which potentially can be created and/or deleted dynamically and whose state can be retrieved and/or modified.</t>
        <t>Uniform Resource Identifiers (URIs) are used to indicate resources for interaction, to reference a resource from another resource, to advertise or bookmark a resource, or to index a resource by search engines.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
  foo://example.com:8042/over/there?name=ferret#nose
  \_/   \______________/\_________/ \_________/ \__/
   |           |            |            |        |
scheme     authority       path        query   fragment
]]></artwork>
        <t>A URI is a sequence of characters that matches the syntax defined in <xref target="RFC3986" format="default"/>.
It consists of a hierarchical sequence of five components: scheme, authority, path, query, and fragment (from most significant to least significant).
A scheme creates a namespace for resources and defines how the following components identify a resource within that namespace.
The authority identifies an entity that governs part of the namespace, such as the server "www.example.org" in the "https" scheme.
A hostname (e.g., a fully qualified domain name) or an IP address literal, potentially followed by a transport layer port number, are usually used for the authority component.
The path and query contain data to identify a resource within the scope of the scheme-dependent naming authority (i.e., "http://www.example.org/" is a different authority than "https://www.example.org").
The fragment allows referring to some portion of the resource, such as a Record in a SenML Pack (<xref section="9" sectionFormat="of" target="RFC8428" format="default"/>).
However, fragments are processed only at client side and not sent on the wire.
<xref target="RFC8820" format="default"/> provides more details on URI design and ownership with best current practices for establishing URI structures, conventions, and formats.</t>
        <t>For RESTful IoT applications, typical schemes include "https", "coaps", "http", and "coap".
These refer to HTTP and CoAP, with and without Transport Layer Security (TLS, <xref target="RFC5246" format="default"/> for TLS 1.2 and <xref target="RFC8446" format="default"/> for TLS 1.3).
(CoAP uses Datagram TLS (DTLS) <xref target="RFC6347" format="default"/>, the variant of TLS for UDP.)
These four schemes also provide means for locating the resource; using the protocols HTTP for "http" and "https" and CoAP for "coap" and "coaps".
If the scheme is different for two URIs (e.g., "coap" vs. "coaps"), it is important to note that even if the remainder of the URI is identical, these are two different resources, in two distinct namespaces.</t>
        <t>Some schemes are for URIs with main purpose as identifiers, and hence are not dereferenceable, e.g., the "urn" scheme can be used to construct unique names in registered namespaces.
In particular the "urn:dev" URI <xref target="RFC9039" format="default"/> details multiple ways for generating and representing endpoint identifiers of IoT devices.</t>
        <t>The query parameters can be used to parameterize the resource.
For example, a GET request may use query parameters to request the server to send only certain kind data of the resource (i.e., filtering the response).
Query parameters in PUT and POST requests do not have such established semantics and are not used consistently.
Whether the order of the query parameters matters in URIs is unspecified; they can be re-ordered, for instance by proxies.
Therefore, applications should not rely on their order; see <xref section="3.3.4" sectionFormat="of" target="RFC6943" format="default"/> for more details.</t>
        <t>Due to the relatively complex processing rules and text representation format, URI handling can be difficult to implement correctly in constrained devices.
Constrained Resource Identifiers <xref target="I-D.ietf-core-href" format="default"/> provide a CBOR-based format of URIs that is better suited also for resource constrained IoT devices.</t>
      </section>
      <section anchor="representations" numbered="true" toc="default">
        <name>Representations</name>
        <t>Clients can retrieve the resource state from a server or manipulate resource state on the (origin) server by transferring resource representations.
Resource representations must have metadata that identifies the representation format used, so the representations can be interpreted correctly.
This is usually a simple string such as the IANA-registered Internet Media Types.
Typical media types for IoT systems include:</t>
        <ul spacing="normal">
          <li>"text/plain" for simple UTF-8 text</li>
          <li>"application/octet-stream" for arbitrary binary data</li>
          <li>"application/json" for the JSON format <xref target="RFC8259" format="default"/></li>
          <li>"application/cbor" for CBOR <xref target="RFC8949" format="default"/></li>
          <li>"application/exi" for EXI <xref target="W3C.REC-exi-20110310" format="default"/></li>
          <li>"application/link-format" for CoRE Link Format <xref target="RFC6690" format="default"/></li>
          <li>"application/senml+json" and "application/senml+cbor" for Sensor Measurement Lists (SenML) data <xref target="RFC8428" format="default"/></li>
        </ul>
        <t>A full list of registered Internet Media Types is available at the IANA registry <xref target="IANA-media-types" format="default"/> and numerical identifiers for media types, parameters, and content codings registered for use with CoAP are listed at CoAP Content-Formats IANA registry <xref target="IANA-CoAP-media" format="default"/>.</t>
        <t>The terms "media type", "content type" (media type plus potential parameters), and "content format" (short identifier of content type and content coding, abbreviated for historical reasons "ct") are often used when referring to representation formats used with CoAP.
The differences between these terms are discussed in more detail in <xref target="I-D.bormann-core-media-content-type-format" format="default"/>.</t>
      </section>
      <section anchor="sec-methods" numbered="true" toc="default">
        <name>HTTP/CoAP Methods</name>
        <t><xref section="4.3" sectionFormat="of" target="RFC7231" format="default"/> defines the set of methods in HTTP;
<xref section="5.8" sectionFormat="of" target="RFC7252" format="default"/> defines the set of methods in CoAP.
As part of the Uniform Interface constraint, each method can have certain properties that give guarantees to clients.</t>
        <t>Safe methods do not cause any state change on the origin server when applied to a resource.
For example, the GET method only returns a representation of the resource state but does not change the resource.
Thus, it is always safe for a client to retrieve a representation without affecting server-side state.</t>
        <t>Idempotent methods can be applied multiple times to the same resource while causing the same visible resource state as a single such request.
For example, the PUT method replaces the state of a resource with a new state; replacing the state multiple times with the same new state still results in the same state for the resource.
However, the response from the server can be different when the same idempotent method is used multiple times.
For example when DELETE is used twice on an existing resource, the first request would remove the association and return success acknowledgement whereas the second request would likely result in error response due to non-existing resource.</t>
        <t>The following lists the most relevant methods and gives a short explanation of their semantics.</t>
        <section anchor="get" numbered="true" toc="default">
          <name>GET</name>
          <t>The GET method requests a current representation for the target resource, while the origin server must ensure that there are no side effects on the resource state.
Only the origin server needs to know how each of its resource identifiers corresponds to an implementation and how each implementation manages to select and send a current representation of the target resource in a response to GET.</t>
          <t>A payload within a GET request message has no defined semantics.</t>
          <t>The GET method is safe and idempotent.</t>
        </section>
        <section anchor="post" numbered="true" toc="default">
          <name>POST</name>
          <t>The POST method requests that the target resource process the representation enclosed in the request according to the resource's own specific semantics.</t>
          <t>If one or more resources has been created on the origin server as a result of successfully processing a POST request, the origin server sends a 201 (Created) response containing a Location header field (with HTTP) or Location-Path and/or Location-Query Options (with CoAP) that provide an identifier for the resource created.
The server also includes a representation that describes the status of the request while referring to the new resource(s).</t>
          <t>The POST method is not safe nor idempotent.</t>
        </section>
        <section anchor="put" numbered="true" toc="default">
          <name>PUT</name>
          <t>The PUT method requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload.
A successful PUT of a given representation would suggest that a subsequent GET on that same target resource will result in an equivalent representation being sent.
A PUT request applied to the target resource can have side effects on other resources.</t>
          <t>The fundamental difference between the POST and PUT methods is highlighted by the different intent for the enclosed representation.
The target resource in a POST request is intended to handle the enclosed representation according to the resource's own semantics, whereas the enclosed representation in a PUT request is defined as replacing the state of the target resource.
Hence, the intent of PUT is idempotent and visible to intermediaries, even though the exact effect is only known by the origin server.</t>
          <t>The PUT method is not safe, but is idempotent.</t>
        </section>
        <section anchor="delete" numbered="true" toc="default">
          <name>DELETE</name>
          <t>The DELETE method requests that the origin server remove the association between the target resource and its current functionality.</t>
          <t>If the target resource has one or more current representations, they might or might not be destroyed by the origin server, and the associated storage might or might not be reclaimed, depending entirely on the nature of the resource and its implementation by the origin server.</t>
          <t>The DELETE method is not safe, but is idempotent.</t>
        </section>
        <section anchor="fetch" numbered="true" toc="default">
          <name>FETCH</name>
          <t>The CoAP-specific FETCH method <xref target="RFC8132" format="default"/> requests a representation of a resource parameterized by a representation enclosed in the request.</t>
          <t>The fundamental difference between the GET and FETCH methods is that the request parameters are included as the payload of a FETCH request, while in a GET request they're typically part of the query string of the request URI.</t>
          <t>The FETCH method is safe and idempotent.</t>
        </section>
        <section anchor="patch" numbered="true" toc="default">
          <name>PATCH</name>
          <t>The PATCH method <xref target="RFC5789" format="default"/> <xref target="RFC8132" format="default"/> requests that a set of changes described in the request entity be applied to the target resource.</t>
          <t>The PATCH method is not safe nor idempotent.</t>
          <t>The CoAP-specific iPATCH method is a variant of the PATCH method that is not safe, but is idempotent.</t>
        </section>
      </section>
      <section anchor="httpcoap-statusresponse-codes" numbered="true" toc="default">
        <name>HTTP/CoAP Status/Response Codes</name>
        <t><xref section="6" sectionFormat="of" target="RFC7231" format="default"/> defines a set of Status Codes in HTTP that are used by application to indicate whether a request was understood and satisfied, and how to interpret the answer.
Similarly, <xref section="5.9" sectionFormat="of" target="RFC7252" format="default"/> defines the set of Response Codes in CoAP.</t>
        <t>The status codes consist of three digits (e.g., "404" with HTTP or "4.04" with CoAP) where the first digit expresses the class of the code.
Implementations do not need to understand all status codes, but the class of the code must be understood.
Codes starting with 1 are informational; the request was received and being processed.
Codes starting with 2 indicate a successful request.
Codes starting with 3 indicate redirection; further action is needed to complete the request.
Codes stating with 4 and 5 indicate errors.
The codes starting with 4 mean client error (e.g., bad syntax in the request) whereas codes starting with 5 mean server error; there was no apparent problem with the request, but server was not able to fulfill the request.</t>
        <t>Responses may be stored in a cache to satisfy future, equivalent requests.
HTTP and CoAP use two different patterns to decide what responses are cacheable.
In HTTP, the cacheability of a response depends on the request method (e.g., responses returned in reply to a GET request are cacheable).
In CoAP, the cacheability of a response depends on the response code (e.g., responses with code 2.04 are cacheable).
This difference also leads to slightly different semantics for the codes starting with 2; for example, CoAP does not have a 2.00 response code whereas 200 ("OK") is commonly used with HTTP.</t>
      </section>
    </section>
    <section anchor="rest-constraints" numbered="true" toc="default">
      <name>REST Constraints</name>
      <t>The REST architectural style defines a set of constraints for the system design.
When all constraints are applied correctly, REST enables architectural properties of key interest <xref target="REST" format="default"/>:</t>
      <ul spacing="normal">
        <li>Performance</li>
        <li>Scalability</li>
        <li>Reliability</li>
        <li>Simplicity</li>
        <li>Modifiability</li>
        <li>Visibility</li>
        <li>Portability</li>
      </ul>
      <t>The following subsections briefly summarize the REST constraints and explain how they enable the listed properties.</t>
      <section anchor="client-server" numbered="true" toc="default">
        <name>Client-Server</name>
        <t>As explained in the Architecture section, RESTful system components have clear roles in every interaction.
Clients have the initiative to issue requests, intermediaries can only forward requests, and servers respond requests, while origin servers are the ultimate recipient of requests that intent to modify resource state.</t>
        <t>This improves simplicity and visibility (also for digital forensics), as it is clear which component started an interaction.
Furthermore, it improves modifiability through a clear separation of concerns.</t>
        <t>In IoT systems, endpoints often assume both roles of client and (origin) server simultaneously.
When an IoT device has initiative (because there is a user, e.g., pressing a button, or installed rules/policies), it acts as a client.
When a device offers a service, it is in server role.</t>
      </section>
      <section anchor="stateless" numbered="true" toc="default">
        <name>Stateless</name>
        <t>The Stateless constraint requires messages to be self-contained.
They must contain all the information to process it, independent from previous messages.
This allows to strictly separate the client state from the resource state.</t>
        <t>This improves scalability and reliability, since servers or worker threads can be replicated.
It also improves visibility because message traces contain all the information to understand the logged interactions.
Furthermore, the Stateless constraint enables caching.</t>
        <t>For IoT, the scaling properties of REST become particularly important.
Note that being self-contained does not necessarily mean that all information has to be inlined.
Constrained IoT devices may choose to externalize metadata and hypermedia controls using Web linking, so that only the dynamic content needs to be sent and the static content such as schemas or controls can be cached.</t>
      </section>
      <section anchor="cache" numbered="true" toc="default">
        <name>Cache</name>
        <t>This constraint requires responses to have implicit or explicit cache-control metadata.
This enables clients and intermediary to store responses and re-use them to locally answer future requests.
The cache-control metadata is necessary to decide whether the information in the cached response is still fresh or stale and needs to be discarded.</t>
        <t>Cache improves performance, as less data needs to be transferred and response times can be reduced significantly.
Needing fewer transfers also improves scalability, as origin servers can be protected from too many requests.
Local caches furthermore improve reliability, since requests can be answered even if the origin server is temporarily not available.</t>
        <t>Caching usually only makes sense when the data is used by multiple participants.
In IoT systems, however, it might make sense to cache also individual data to protect constrained devices and networks from frequent requests of data that does not change often.
Security often hinders the ability to cache responses.
For IoT systems, object security <xref target="RFC8613" format="default"/> may be preferable over transport layer security, as it enables intermediaries to cache responses while preserving security.</t>
      </section>
      <section anchor="sec-uniform-interface" numbered="true" toc="default">
        <name>Uniform Interface</name>
        <t>All RESTful APIs use the same, uniform interface independent of the application.
This simple interaction model is enabled by exchanging representations and modifying state locally, which simplifies the interface between clients and servers to a small set of methods to retrieve, update, and delete state -- which applies to all applications.</t>
        <t>In contrast, in a service-oriented RPC approach, all required ways to modify state need to be modeled explicitly in the interface resulting in a large set of methods -- which differs from application to application.
Moreover, it is also likely that different parties come up with different ways how to modify state, including the naming of the procedures, while the state within an application is a bit easier to agree on.</t>
        <t>A REST interface is fully defined by:</t>
        <ul spacing="normal">
          <li>URIs to identify resources</li>
          <li>representation formats to represent and manipulate resource state</li>
          <li>self-descriptive messages with a standard set of methods (e.g., GET, POST, PUT, DELETE with their guaranteed properties)</li>
          <li>hypermedia controls within representations</li>
        </ul>
        <t>The concept of hypermedia controls is also known as HATEOAS: Hypermedia As The Engine Of Application State.
The origin server embeds controls for the interface into its representations and thereby informs the client about possible next requests.
The most used control for RESTful systems today is Web Linking <xref target="RFC8288" format="default"/>.
Hypermedia forms are more powerful controls that describe how to construct more complex requests, including representations to modify resource state.</t>
        <t>While this is the most complex constraints (in particular the hypermedia controls), it improves many key properties.
It improves simplicity, as uniform interfaces are easier to understand.
The self-descriptive messages improve visibility.
The limitation to a known set of representation formats fosters portability.
Most of all, however, this constraint is the key to modifiability, as hypermedia-driven, uniform interfaces allow clients and servers to evolve independently, and hence enable a system to evolve.</t>
        <t>For a large number of IoT applications, the hypermedia controls are mainly used for the discovery of resources, as they often serve sensor data.
Such resources are "dead ends", as they usually do not link any further and only have one form of interaction: fetching the sensor value.
For IoT, the critical parts of the Uniform Interface constraint are the descriptions of messages and representation formats used.
Simply using, for instance, "application/json" does not help machine clients to understand the semantics of the representation.
Yet defining very precise media types limits the re-usability and interoperability.
Representation formats such as SenML <xref target="RFC8428" format="default"/> try to find a good trade-off between precision and re-usability.
Another approach is to combine a generic format such as JSON with syntactic as well as semantic annotations (see <xref target="I-D.handrews-json-schema-validation" format="default"/> and <xref target="W3C-TD" format="default"/>, resp.).</t>
      </section>
      <section anchor="layered-system" numbered="true" toc="default">
        <name>Layered System</name>
        <t>This constraint enforces that a client cannot see beyond the server with which it is interacting.</t>
        <t>A layered system is easier to modify, as topology changes become transparent.
Furthermore, this helps scalability, as intermediaries such as load balancers can be introduced without changing the client side.
The clean separation of concerns helps with simplicity.</t>
        <t>IoT systems greatly benefit from this constraint, as it allows to effectively shield constrained devices behind intermediaries and is also the basis for gateways, which are used to integrate other (IoT) ecosystems.</t>
      </section>
      <section anchor="code-on-demand" numbered="true" toc="default">
        <name>Code-on-Demand</name>
        <t>This principle enables origin servers to ship code to clients.</t>
        <t>Code-on-Demand improves modifiability, since new features can be deployed during runtime (e.g., support for a new representation format).
It also improves performance, as the server can provide code for local pre-processing before transferring the data.</t>
        <t>As of today, code-on-demand has not been explored much in IoT systems.
Aspects to consider are that either one or both nodes are constrained and might not have the resources to host or dynamically fetch and execute such code.
Moreover, the origin server often has no understanding of the actual application a mashup client realizes.
Still, code-on-demand can be useful for small polyfills, e.g., to decode payloads, and potentially other features in the future.</t>
      </section>
    </section>
    <section anchor="hypermedia-driven-applications" numbered="true" toc="default">
      <name>Hypermedia-driven Applications</name>
      <t>Hypermedia-driven applications take advantage of hypermedia controls, i.e., links and forms, which are embedded in representations or response message headers.
A hypermedia client is a client that is capable of processing these hypermedia controls.
Hypermedia links can be used to give additional information about a resource representation (e.g., the source URI of the representation) or pointing to other resources.
The forms can be used to describe the structure of the data that can be sent (e.g., with a POST or PUT method) to a server, or how a data retrieval (e.g., GET) request for a resource should be formed.
In a hypermedia-driven application the client interacts with the server using only the hypermedia controls, instead of selecting methods and/or constructing URIs based on out-of-band information, such as API documentation.
The Constrained RESTful Application Language (CoRAL) <xref target="I-D.ietf-core-coral" format="default"/> provides a hypermedia-format that is suitable for constrained IoT environments.</t>
      <section anchor="motivation" numbered="true" toc="default">
        <name>Motivation</name>
        <t>The advantage of this approach is increased evolvability and extensibility.
This is important in scenarios where servers exhibit a range of feature variations, where it's expensive to keep evolving client knowledge and server knowledge in sync all the time, or where there are many different client and server implementations.
Hypermedia controls serve as indicators in capability negotiation.
In particular, they describe available resources and possible operations on these resources using links and forms, respectively.</t>
        <t>There are multiple reasons why a server might introduce new links or forms:</t>
        <ul spacing="normal">
          <li>The server implements a newer version of the application.
Older clients ignore the new links and forms, while newer clients are able to take advantage of the new features by following the new links and submitting the new forms.</li>
          <li>The server offers links and forms depending on the current state.
The server can tell the client which operations are currently valid and thus help the client navigate the application state machine.
The client does not have to have knowledge which operations are allowed in the current state or make a request just to find out that the operation is not valid.</li>
          <li>The server offers links and forms depending on the client's access control rights.
If the client is unauthorized to perform a certain operation, then the server can simply omit the links and forms for that operation.</li>
        </ul>
      </section>
      <section anchor="knowledge" numbered="true" toc="default">
        <name>Knowledge</name>
        <t>A client needs to have knowledge of a couple of things for successful interaction with a server.
This includes what resources are available, what representations of resource states are available, what each representation describes, how to retrieve a representation, what state changing operations on a resource are possible, how to perform these operations, and so on.</t>
        <t>Some part of this knowledge, such as how to retrieve the representation of a resource state, is typically hard-coded in the client software.
For other parts, a choice can often be made between hard-coding the knowledge or acquiring it on-demand.
The key to success in either case is the use of in-band information for identifying the knowledge that is required.
This enables the client to verify that it has all the required knowledge or to acquire missing knowledge on-demand.</t>
        <t>A hypermedia-driven application typically uses the following identifiers:</t>
        <ul spacing="normal">
          <li>URI schemes that identify communication protocols,</li>
          <li>Internet Media Types that identify representation formats,</li>
          <li>link relation types or resource types that identify link semantics,</li>
          <li>form relation types that identify form semantics,</li>
          <li>variable names that identify the semantics of variables in templated links, and</li>
          <li>form field names that identify the semantics of form fields in forms.</li>
        </ul>
        <t>The knowledge about these identifiers as well as matching implementations have to be shared a priori in a RESTful system.</t>
      </section>
      <section anchor="interaction" numbered="true" toc="default">
        <name>Interaction</name>
        <t>A client begins interacting with an application through a GET request on an entry point URI.
The entry point URI is the only URI a client is expected to know before interacting with an application.
From there, the client is expected to make all requests by following links and submitting forms that are provided in previous responses.
The entry point URI can be obtained, for example, by manual configuration or some discovery process (e.g., DNS-SD <xref target="RFC6763" format="default"/> or Resource Directory <xref target="I-D.ietf-core-resource-directory" format="default"/>).
For Constrained RESTful environments "/.well-known/core" relative URI is defined as a default entry point for requesting the links hosted by servers with known or discovered addresses <xref target="RFC6690" format="default"/>.</t>
      </section>
      <section anchor="hypermedia-driven-design-guidance" numbered="true" toc="default">
        <name>Hypermedia-driven Design Guidance</name>
        <t>Assuming self-describing representation formats (i.e., human-readable with carefully chosen terms or processable by a formatting tool) and a client supporting the URI scheme used, a good rule of thumb for a good hypermedia-driven design is the following:
A developer should only need an entry point URI to drive the application.
All further information how to navigate through the application (links) and how to construct more complex requests (forms) are published by the server(s).
There must be no need for additional, out-of-band information (e.g., API specification).</t>
        <t>For machines, a well-chosen set of information needs to be shared a priori to agree on machine-understandable semantics.
Agreeing on the exact semantics of terms for relation types and data elements will of course also help the developer.
<xref target="I-D.hartke-core-apps" format="default"/> proposes a convention for specifying the set of information in a structured way.</t>
      </section>
    </section>
    <section anchor="design-patterns" numbered="true" toc="default">
      <name>Design Patterns</name>
      <t>Certain kinds of design problems are often recurring in variety of domains, and often re-usable design patterns can be applied to them.
Also, some interactions with a RESTful IoT system are straightforward to design;
a classic example of reading a temperature from a thermometer device is almost always implemented as a GET request to a resource that represents the current value of the thermometer.
However, certain interactions, for example data conversions or event handling, do not have as straightforward and well established ways to represent the logic with resources and REST methods.</t>
      <t>The following sections describe how common design problems such as different interactions can be modeled with REST and what are the benefits of different approaches.</t>
      <section anchor="collections" numbered="true" toc="default">
        <name>Collections</name>
        <t>A common pattern in RESTful systems across different domains is the collection.
A collection can be used to combine multiple resources together by providing resources that consist of set of (often partial) representations of resources, called items, and links to resources.
The collection resource also defines hypermedia controls for managing and searching the items in the collection.</t>
        <t>Examples of the collection pattern in RESTful IoT systems are the CoRE Resource Directory <xref target="I-D.ietf-core-resource-directory" format="default"/>, CoAP pub/sub broker <xref target="I-D.ietf-core-coap-pubsub" format="default"/>, and resource discovery via ".well-known/core".
Collection+JSON <xref target="CollectionJSON" format="default"/> is an example of a generic collection Media Type.</t>
      </section>
      <section anchor="calling-a-procedure" numbered="true" toc="default">
        <name>Calling a Procedure</name>
        <t>To modify resource state, clients usually use GET to retrieve a representation from the server, modify that locally, and transfer the resulting state back to the server with a PUT (see <xref target="sec-uniform-interface" format="default"/>).
Sometimes, however, the state can only be modified on the server side, for instance, because representations would be too large to transfer or part of the required information shall not be accessible to clients.
In this case, resource state is modified by calling a procedure (or "function").
This is usually modeled with a POST request, as this method leaves the behavior semantics completely to the server.
Procedure calls can be divided into two different classes based on how long they are expected to execute: "instantly" returning and long-running.</t>
        <section anchor="instantly-returning-procedures" numbered="true" toc="default">
          <name>Instantly Returning Procedures</name>
          <t>When the procedure can return within the expected response time of the system, the result can be directly returned in the response.
The result can either be actual content or just a confirmation that the call was successful.
In either case, the response does not contain a representation of the resource, but a so-called action result.
Action results can still have hypermedia controls to provide the possible transitions in the application state machine.</t>
        </section>
        <section anchor="long-running-procedures" numbered="true" toc="default">
          <name>Long-running Procedures</name>
          <t>When the procedure takes longer than the expected response time of the system, or even longer than the response timeout, it is a good pattern to create a new resource to track the "task" execution.
The server would respond instantly with a "Created" status (HTTP code 201 or CoAP 2.01) and indicate the location of the task resource in the corresponding header field (or CoAP option) or as a link in the action result.
The created resource can be used to monitor the progress, to potentially modify queued tasks or cancel tasks, and to eventually retrieve the result.</t>
          <t>Monitoring information would be modeled as state of the task resource, and hence be retrievable as representation.
The result -- when available -- can be embedded in the representation or given as a link to another sub-resource.
Modifying tasks can be modeled with forms that either update sub-resources via PUT or do a partial write using PATCH or POST.
Canceling a task would be modeled with a form that uses DELETE to remove the task resource.</t>
        </section>
        <section anchor="conversion" numbered="true" toc="default">
          <name>Conversion</name>
          <t>A conversion service is a good example where REST resources need to behave more like a procedure call.
The knowledge of converting from one representation to another is located only at the server to relieve clients from high processing or storing lots of data.
There are different approaches that all depend on the particular conversion problem.</t>
          <t>As mentioned in the previous sections, POST request are a good way to model functionality that does not necessarily affect resource state.
When the input data for the conversion is small and the conversion result is deterministic, however, it can be better to use a GET request with the input data in the URI query part.
The query is parameterizing the conversion resource, so that it acts like a look-up table.
The benefit is that results can be cached also for HTTP (where responses to POST are not cacheable).
In CoAP, cacheability depends on the response code, so that also a response to a POST request can be made cacheable through a 2.05 Content code.</t>
          <t>When the input data is large or has a binary encoding, it is better to use POST requests with a proper Media Type for the input representation.
A POST request is also more suitable, when the result is time-dependent and the latest result is expected (e.g., exchange rates).</t>
        </section>
        <section anchor="events-as-state" numbered="true" toc="default">
          <name>Events as State</name>
          <t>In event-centric paradigms such as pub/sub, events are usually represented by an incoming message that might even be identical for each occurrence.
Since the messages are queued, the receiver is aware of each occurrence of the event and can react accordingly.
For instance, in an event-centric system, ringing a doorbell would result in a message being sent that represents the event that it was rung.</t>
          <t>In resource-oriented paradigms such as REST, messages usually carry the current state of the remote resource, independent from the changes (i.e., events) that have lead to that state.
In a naive yet natural design, a doorbell could be modeled as a resource that can have the states unpressed and pressed.
There are, however, a few issues with this approach.
Polling (i.e., periodically retrieving) the doorbell resource state is not a good option, as the client is highly unlikely to be able to observe all the changes in the pressed state with any realistic polling interval.
When using CoAP Observe with Confirmable notifications, the server will usually send two notifications for the event that the doorbell was pressed:
notification for changing from unpressed to pressed and another one for changing back to unpressed.
If the time between the state changes is very short, the server might drop the first notification, as Observe only guarantees eventual consistency (see <xref section="1.3" sectionFormat="of" target="RFC7641" format="default"/>).</t>
          <t>The solution is to pick a state model that fits better to the application.
In the case of the doorbell -- and many other event-driven resources -- the solution could be a counter that counts how often the bell was pressed.
The corresponding action is taken each time the client observes a change in the received representation.
In the case of a network outage, this could lead to a ringing sound long after the bell was rung.
Also including a timestamp of the last counter increment in the state can help to suppress ringing a sound when the event has become obsolete. Another solution would be to change the client/server roles of the doorbell button and the ringer, as described in <xref target="sec-server-push" format="default"/>.</t>
        </section>
      </section>
      <section anchor="sec-server-push" numbered="true" toc="default">
        <name>Server Push</name>
        <t>Overall, a universal mechanism for server push, that is, change-of-state notifications and stand-alone event notifications, is still an open issue that is being discussed in the Thing-to-Thing Research Group.
It is connected to the state-event duality problem and custody transfer, that is, the transfer of the responsibility that a message (e.g., event) is delivered successfully.</t>
        <t>A proficient mechanism for change-of-state notifications is currently only available for CoAP: Observing resources <xref target="RFC7641" format="default"/>.
The CoAP Observe mechanism offers eventual consistency, which guarantees "that if the resource does not undergo a new change in state, eventually all registered observers will have a current representation of the latest resource state".
It intrinsically deals with the challenges of lossy networks, where notifications might be lost, and constrained networks, where there might not be enough bandwidth to propagate all changes.</t>
        <t>For stand-alone event notifications, that is, where every single notification contains an identifiable event that must not be lost, observing resources is not a good fit.
A better strategy is to model each event as a new resource, whose existence is notified through change-of-state notifications of an index resource (cf. Collection pattern).
Large numbers of events will cause the notification to grow large, as it needs to contain a large number of Web links.
Block-wise transfers <xref target="RFC7959" format="default"/> can help here.
When the links are ordered by freshness of the events, the first block can already contain all links to new events.
Then, observers do not need to retrieve the remaining blocks from the server, but only the representations of the new event resources.</t>
        <t>An alternative pattern is to exploit the dual roles of IoT devices, in particular when using CoAP: they are usually client and server at the same time.
An endpoint interested in observing the events would subscribe to them by registering a callback URI at the origin server, e.g., using a POST request with the URI or a hypermedia document in the payload, and receiving the location of a temporary "subscription resource" as handle in the response.
The origin server would then publish events by sending requests containing the event data to the observer's callback URI; here POST can be used to add events to a collection located at the callback URI or PUT can be used when the event data is a new state that shall replace the outdated state at the callback URI.
The cancellation can be modeled through deleting the subscription resource.
This pattern makes the origin server responsible for delivering the event notifications.
This goes beyond retransmissions of messages;
the origin server is usually supposed to queue all undelivered events and to retry until successful delivery or explicit cancellation.
In HTTP, this pattern is known as REST Hooks.</t>
        <t>Methods for configuring server push and notification conditions with CoAP are provided by the CoRE Dynamic Resource Linking specification <xref target="I-D.ietf-core-dynlink" format="default"/>.</t>
        <t>In HTTP, there exist a number of workarounds to enable server push, e.g., long polling and streaming <xref target="RFC6202" format="default"/> or server-sent events <xref target="W3C.REC-html5-20141028" format="default"/>.
In IoT systems, long polling can introduce a considerable overhead, as the request has to be repeated for each notification.
Streaming and server-sent events (the latter is actually an evolution of the former) are more efficient, as only one request is sent.
However, there is only one response header and subsequent notifications can only have content.
Individual status and metadata needs to be included in the content message.
This reduces HTTP again to a pure transport, as its status signaling and metadata capabilities cannot be used.</t>
      </section>
    </section>
    <section anchor="sec-sec" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This document does not define new functionality and therefore does not introduce new security concerns.
We assume that system designers apply classic Web security on top of the basic RESTful guidance given in this document.
Thus, security protocols and considerations from related specifications apply to RESTful IoT design.
These include:</t>
      <ul spacing="normal">
        <li>Transport Layer Security (TLS): <xref target="RFC8446" format="default"/>, <xref target="RFC5246" format="default"/>, and <xref target="RFC6347" format="default"/></li>
        <li>Internet X.509 Public Key Infrastructure: <xref target="RFC5280" format="default"/></li>
        <li>HTTP security: <xref section="9" sectionFormat="of" target="RFC7230" format="default"/>, <xref section="9" sectionFormat="of" target="RFC7231" format="default"/>, etc.</li>
        <li>CoAP security: <xref section="11" sectionFormat="of" target="RFC7252" format="default"/></li>
        <li>URI security: <xref section="7" sectionFormat="of" target="RFC3986" format="default"/></li>
      </ul>
      <t>IoT-specific security is active area of standardization at the time of writing.
First finalized specifications include:</t>
      <ul spacing="normal">
        <li>(D)TLS Profiles for the Internet of Things: <xref target="RFC7925" format="default"/></li>
        <li>CBOR Object Signing and Encryption (COSE) <xref target="RFC8152" format="default"/></li>
        <li>CBOR Web Token <xref target="RFC8392" format="default"/></li>
        <li>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs) <xref target="RFC8747" format="default"/></li>
        <li>Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613" format="default"/></li>
        <li>Authentication and Authorization for Constrained Environments (ACE) using the OAuth 2.0 Framework <xref target="I-D.ietf-ace-oauth-authz" format="default"/></li>
        <li>ACE profiles for DTLS <xref target="I-D.ietf-ace-dtls-authorize" format="default"/> and OSCORE <xref target="I-D.ietf-ace-oscore-profile" format="default"/></li>
      </ul>
      <t>Further IoT security considerations are available in <xref target="RFC8576" format="default"/>.</t>
    </section>
    <section anchor="acknowledgement" numbered="true" toc="default">
      <name>Acknowledgement</name>
      <t>The authors would like to thank Mike Amundsen, Heidi-Maria Back, Carsten Bormann, Tero Kauppinen, Michael Koster, Mert Ocak, Robby Simpson, Ravi Subramaniam, Dave Thaler, Niklas Widell, and Erik Wilde for the reviews and feedback.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC7231" target="https://www.rfc-editor.org/info/rfc7231">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7231"/>
          <seriesInfo name="DOI" value="10.17487/RFC7231"/>
        </reference>
        <reference anchor="REST">
          <front>
            <title>Architectural Styles and the Design of Network-based Software Architectures</title>
            <author initials="R." surname="Fielding">
              <organization/>
            </author>
            <date year="2000"/>
          </front>
          <seriesInfo name="Ph.D. Dissertation, University of California, Irvine" value=""/>
        </reference>
        <reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6347">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu">
              <organization/>
            </author>
            <date month="January" year="2012"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <reference anchor="I-D.ietf-core-resource-directory" target="https://www.ietf.org/archive/id/draft-ietf-core-resource-directory-28.txt">
          <front>
            <title>CoRE Resource Directory</title>
            <author fullname="Christian Amsüss">
	 </author>
            <author fullname="Zach Shelby">
              <organization>ARM</organization>
            </author>
            <author fullname="Michael Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Carsten Bormann">
              <organization>Universitaet Bremen TZI</organization>
            </author>
            <author fullname="Peter van der Stok">
              <organization>consultant</organization>
            </author>
            <date day="7" month="March" year="2021"/>
            <abstract>
              <t>   In many IoT applications, direct discovery of resources is not
   practical due to sleeping nodes, or networks where multicast traffic
   is inefficient.  These problems can be solved by employing an entity
   called a Resource Directory (RD), which contains information about
   resources held on other servers, allowing lookups to be performed for
   those resources.  The input to an RD is composed of links and the
   output is composed of links constructed from the information stored
   in the RD.  This document specifies the web interfaces that an RD
   supports for web servers to discover the RD and to register,
   maintain, lookup and remove information on resources.  Furthermore,
   new target attributes useful in conjunction with an RD are defined.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-resource-directory-28"/>
        </reference>
        <reference anchor="RFC9039" target="https://www.rfc-editor.org/info/rfc9039">
          <front>
            <title>Uniform Resource Names for Device Identifiers</title>
            <author fullname="J. Arkko" initials="J." surname="Arkko">
              <organization/>
            </author>
            <author fullname="C. Jennings" initials="C." surname="Jennings">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <date month="June" year="2021"/>
            <abstract>
              <t>This document describes a new Uniform Resource Name (URN) namespace for hardware device identifiers. A general representation of device identity can be useful in many applications, such as in sensor data streams and storage or in equipment inventories. A URN-based representation can be passed along in applications that need the information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9039"/>
          <seriesInfo name="DOI" value="10.17487/RFC9039"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="W3C.REC-exi-20110310" target="https://www.w3.org/TR/2011/REC-exi-20110310">
          <front>
            <title>Efficient XML Interchange (EXI) Format 1.0</title>
            <author fullname="John Schneider" initials="J." surname="Schneider">
              <organization/>
            </author>
            <author fullname="Takuki Kamiya" initials="T." surname="Kamiya">
              <organization/>
            </author>
            <date day="10" month="March" year="2011"/>
          </front>
          <seriesInfo name="World Wide Web Consortium Recommendation" value="REC-exi-20110310"/>
        </reference>
        <reference anchor="RFC5246" target="https://www.rfc-editor.org/info/rfc5246">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
            <author fullname="T. Dierks" initials="T." surname="Dierks">
              <organization/>
            </author>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2008"/>
            <abstract>
              <t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5246"/>
          <seriesInfo name="DOI" value="10.17487/RFC5246"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper">
              <organization/>
            </author>
            <author fullname="S. Santesson" initials="S." surname="Santesson">
              <organization/>
            </author>
            <author fullname="S. Farrell" initials="S." surname="Farrell">
              <organization/>
            </author>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen">
              <organization/>
            </author>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <author fullname="W. Polk" initials="W." surname="Polk">
              <organization/>
            </author>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC8288" target="https://www.rfc-editor.org/info/rfc8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="RFC6690" target="https://www.rfc-editor.org/info/rfc6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links.  Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type.  "RESTful" refers to the Representational State Transfer (REST) architecture.  A well-known URI is defined as a default entry point for requesting the links hosted by a server.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC7959" target="https://www.rfc-editor.org/info/rfc7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby">
              <organization/>
            </author>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks.  Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates.  In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS).  These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs.  In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers.  Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations.  Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="RFC6202" target="https://www.rfc-editor.org/info/rfc6202">
          <front>
            <title>Known Issues and Best Practices for the Use of Long Polling and Streaming in Bidirectional HTTP</title>
            <author fullname="S. Loreto" initials="S." surname="Loreto">
              <organization/>
            </author>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <author fullname="S. Salsano" initials="S." surname="Salsano">
              <organization/>
            </author>
            <author fullname="G. Wilkins" initials="G." surname="Wilkins">
              <organization/>
            </author>
            <date month="April" year="2011"/>
            <abstract>
              <t>On today's Internet, the Hypertext Transfer Protocol (HTTP) is often used (some would say abused) to enable asynchronous, "server- initiated" communication from a server to a client as well as communication from a client to a server.  This document describes known issues and best practices related to such "bidirectional HTTP" applications, focusing on the two most common mechanisms: HTTP long polling and HTTP streaming.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6202"/>
          <seriesInfo name="DOI" value="10.17487/RFC6202"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8613" target="https://www.rfc-editor.org/info/rfc8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE).  OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration.  Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="W3C.REC-html5-20141028" target="https://www.w3.org/TR/2014/REC-html5-20141028">
          <front>
            <title>HTML5</title>
            <author fullname="Ian Hickson" initials="I." surname="Hickson">
              <organization/>
            </author>
            <author fullname="Robin Berjon" initials="R." surname="Berjon">
              <organization/>
            </author>
            <author fullname="Steve Faulkner" initials="S." surname="Faulkner">
              <organization/>
            </author>
            <author fullname="Travis Leithead" initials="T." surname="Leithead">
              <organization/>
            </author>
            <author fullname="Erika Doyle Navara" initials="E." surname="Navara">
              <organization/>
            </author>
            <author fullname="Theresa O&amp;#039;Connor" initials="T." surname="O&amp;#039;Connor">
              <organization/>
            </author>
            <author fullname="Silvia Pfeiffer" initials="S." surname="Pfeiffer">
              <organization/>
            </author>
            <date day="28" month="October" year="2014"/>
          </front>
          <seriesInfo name="World Wide Web Consortium Recommendation" value="REC-html5-20141028"/>
        </reference>
        <reference anchor="I-D.ietf-core-href" target="https://www.ietf.org/archive/id/draft-ietf-core-href-09.txt">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="15" month="January" year="2022"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that serializes the URI components
   in Concise Binary Object Representation (CBOR) instead of a sequence
   of characters.  This simplifies parsing, comparison and reference
   resolution in environments with severe limitations on processing
   power, code size, and memory size.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-09"/>
        </reference>
        <reference anchor="I-D.ietf-core-coral" target="https://www.ietf.org/archive/id/draft-ietf-core-coral-04.txt">
          <front>
            <title>The Constrained RESTful Application Language (CoRAL)</title>
            <author fullname="Christian Amsüss">
	 </author>
            <author fullname="Thomas Fossati">
              <organization>ARM</organization>
            </author>
            <date day="25" month="October" year="2021"/>
            <abstract>
              <t>   The Constrained RESTful Application Language (CoRAL) defines a data
   model and interaction model as well as a compact serialization
   formats for the description of typed connections between resources on
   the Web ("links"), possible operations on such resources ("forms"),
   and simple resource metadata.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coral-04"/>
        </reference>
        <reference anchor="I-D.ietf-core-dynlink" target="https://www.ietf.org/archive/id/draft-ietf-core-dynlink-14.txt">
          <front>
            <title>Dynamic Resource Linking for Constrained RESTful Environments</title>
            <author fullname="Michael Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Bilhanan Silverajan">
              <organization>Tampere University</organization>
            </author>
            <date day="12" month="July" year="2021"/>
            <abstract>
              <t>   This specification defines Link Bindings, which provide dynamic
   linking of state updates between resources, either on an endpoint or
   between endpoints, for systems using CoAP (RFC7252).

Editor note

   The git repository for the draft is found at https://github.com/core-
   wg/dynlink

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-dynlink-14"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC5789" target="https://www.rfc-editor.org/info/rfc5789">
          <front>
            <title>PATCH Method for HTTP</title>
            <author fullname="L. Dusseault" initials="L." surname="Dusseault">
              <organization/>
            </author>
            <author fullname="J. Snell" initials="J." surname="Snell">
              <organization/>
            </author>
            <date month="March" year="2010"/>
            <abstract>
              <t>Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification.  The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5789"/>
          <seriesInfo name="DOI" value="10.17487/RFC5789"/>
        </reference>
        <reference anchor="RFC8132" target="https://www.rfc-editor.org/info/rfc8132">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal">
              <organization/>
            </author>
            <date month="April" year="2017"/>
            <abstract>
              <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource.  In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable.  Several applications using CoAP need to access parts of the resources.</t>
              <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </reference>
        <reference anchor="RFC6763" target="https://www.rfc-editor.org/info/rfc6763">
          <front>
            <title>DNS-Based Service Discovery</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire">
              <organization/>
            </author>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal">
              <organization/>
            </author>
            <date month="February" year="2013"/>
            <abstract>
              <t>This document specifies how DNS resource records are named and structured to facilitate service discovery.  Given a type of service that a client is looking for, and a domain in which the client is looking for that service, this mechanism allows clients to discover a list of named instances of that desired service, using standard DNS queries. This mechanism is referred to as DNS-based Service Discovery, or DNS-SD.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6763"/>
          <seriesInfo name="DOI" value="10.17487/RFC6763"/>
        </reference>
        <reference anchor="RFC7228" target="https://www.rfc-editor.org/info/rfc7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="M. Ersue" initials="M." surname="Ersue">
              <organization/>
            </author>
            <author fullname="A. Keranen" initials="A." surname="Keranen">
              <organization/>
            </author>
            <date month="May" year="2014"/>
            <abstract>
              <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks.  This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7228"/>
          <seriesInfo name="DOI" value="10.17487/RFC7228"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7925" target="https://www.rfc-editor.org/info/rfc7925">
          <front>
            <title>Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things</title>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="T. Fossati" initials="T." surname="Fossati">
              <organization/>
            </author>
            <date month="July" year="2016"/>
            <abstract>
              <t>A common design pattern in Internet of Things (IoT) deployments is the use of a constrained device that collects data via sensors or controls actuators for use in home automation, industrial control systems, smart cities, and other IoT deployments.</t>
              <t>This document defines a Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 1.2 profile that offers communications security for this data exchange thereby preventing eavesdropping, tampering, and message forgery.  The lack of communication security is a common vulnerability in IoT products that can easily be solved by using these well-researched and widely deployed Internet security protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7925"/>
          <seriesInfo name="DOI" value="10.17487/RFC7925"/>
        </reference>
        <reference anchor="RFC8428" target="https://www.rfc-editor.org/info/rfc8428">
          <front>
            <title>Sensor Measurement Lists (SenML)</title>
            <author fullname="C. Jennings" initials="C." surname="Jennings">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="J. Arkko" initials="J." surname="Arkko">
              <organization/>
            </author>
            <author fullname="A. Keranen" initials="A." surname="Keranen">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This specification defines a format for representing simple sensor measurements and device parameters in Sensor Measurement Lists (SenML).  Representations are defined in JavaScript Object Notation (JSON), Concise Binary Object Representation (CBOR), Extensible Markup Language (XML), and Efficient XML Interchange (EXI), which share the common SenML data model.  A simple sensor, such as a temperature sensor, could use one of these media types in protocols such as HTTP or the Constrained Application Protocol (CoAP) to transport the measurements of the sensor or to be configured.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8428"/>
          <seriesInfo name="DOI" value="10.17487/RFC8428"/>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="I-D.bormann-core-media-content-type-format" target="https://www.ietf.org/archive/id/draft-bormann-core-media-content-type-format-04.txt">
          <front>
            <title>On Media-Types, Content-Types, and related terminology</title>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="22" month="February" year="2021"/>
            <abstract>
              <t>   There is a lot of confusion about media-types, content-types, and
   related terminology.

   This memo is an attempt at clearing it up, so we can use consistent
   terminology in CoRE and related specifications.  It also defines some
   ABNF that can be used in these specifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-core-media-content-type-format-04"/>
        </reference>
        <reference anchor="I-D.handrews-json-schema-validation" target="https://www.ietf.org/archive/id/draft-handrews-json-schema-validation-02.txt">
          <front>
            <title>JSON Schema Validation: A Vocabulary for Structural Validation of JSON</title>
            <author fullname="Austin Wright">
	 </author>
            <author fullname="Henry Andrews">
	 </author>
            <author fullname="Ben Hutton">
              <organization>Wellcome Sanger Institute</organization>
            </author>
            <date day="17" month="September" year="2019"/>
            <abstract>
              <t>   JSON Schema (application/schema+json) has several purposes, one of
   which is JSON instance validation.  This document specifies a
   vocabulary for JSON Schema to describe the meaning of JSON documents,
   provide hints for user interfaces working with JSON data, and to make
   assertions about what a valid document must look like.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-handrews-json-schema-validation-02"/>
        </reference>
        <reference anchor="I-D.hartke-core-apps" target="https://www.ietf.org/archive/id/draft-hartke-core-apps-08.txt">
          <front>
            <title>CoRE Applications</title>
            <author fullname="Klaus Hartke">
              <organization>Ericsson</organization>
            </author>
            <date day="22" month="October" year="2018"/>
            <abstract>
              <t>   The application programmable interfaces of RESTful, hypermedia-driven
   Web applications consist of a number of reusable components such as
   Internet media types and link relation types.  This document proposes
   "CoRE Applications", a convention for application designers to build
   the interfaces of their applications in a structured way, so that
   implementers can easily build interoperable clients and servers, and
   other designers can reuse the components in their own applications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hartke-core-apps-08"/>
        </reference>
        <reference anchor="W3C-TD" target="https://www.w3.org/TR/wot-thing-description/">
          <front>
            <title>Web of Things (WoT) Thing Description</title>
            <author initials="S." surname="Kaebisch">
              <organization/>
            </author>
            <author initials="T." surname="Kamiya">
              <organization/>
            </author>
            <author initials="M." surname="McCool">
              <organization/>
            </author>
            <author initials="V." surname="Charpenay">
              <organization/>
            </author>
            <author initials="M." surname="Kovatsch">
              <organization/>
            </author>
            <date year="2020" month="April"/>
          </front>
        </reference>
        <reference anchor="IANA-media-types" target="http://www.iana.org/assignments/media-types/media-types.xhtml">
          <front>
            <title>Media Types</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-CoAP-media" target="http://www.iana.org/assignments/core-parameters/core-parameters.xhtml#content-formats">
          <front>
            <title>CoAP Content-Formats</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CollectionJSON" target="http://amundsen.com/media-types/collection/format/">
          <front>
            <title>Collection+JSON - Document Format</title>
            <author initials="M." surname="Amundsen">
              <organization/>
            </author>
            <date year="2013" month="February"/>
          </front>
        </reference>
        <reference anchor="HCI" target="https://www.interaction-design.org/literature/book/the-encyclopedia-of-human-computer-interaction-2nd-ed">
          <front>
            <title>The Encyclopedia of Human-Computer Interaction</title>
            <author>
              <organization>Interaction Design Foundation</organization>
            </author>
            <date year="2013"/>
          </front>
          <refcontent>2nd Ed.</refcontent>
        </reference>
        <reference anchor="I-D.ietf-asdf-sdf" target="https://www.ietf.org/archive/id/draft-ietf-asdf-sdf-10.txt">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="Michael Koster">
              <organization>PassiveLogic</organization>
            </author>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="16" month="January" year="2022"/>
            <abstract>
              <t>   The Semantic Definition Format (SDF) is a format for domain experts
   to use in the creation and maintenance of data and interaction models
   in the Internet of Things.  It was created as a common language for
   use in the development of the One Data Model liaison organization
   (OneDM) definitions.  Tools convert this format to database formats
   and other serializations as needed.

   An SDF specification describes definitions of SDF Objects and their
   associated interactions (Events, Actions, Properties), as well as the
   Data types for the information exchanged in those interactions.


   // A JSON format representation of SDF 1.0 was defined in version
   // (-00) of this document; version (-05) was designated as an
   // _implementation draft_, labeled SDF 1.1, at the IETF110 meeting of
   // the ASDF WG (2021-03-11).  The present version (-10) collects a
   // few smaller changes as input to the 2022-01-17 ASDF WG interim.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-10"/>
        </reference>
        <reference anchor="RFC8075" target="https://www.rfc-editor.org/info/rfc8075">
          <front>
            <title>Guidelines for Mapping Implementations: HTTP to the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Castellani" initials="A." surname="Castellani">
              <organization/>
            </author>
            <author fullname="S. Loreto" initials="S." surname="Loreto">
              <organization/>
            </author>
            <author fullname="A. Rahman" initials="A." surname="Rahman">
              <organization/>
            </author>
            <author fullname="T. Fossati" initials="T." surname="Fossati">
              <organization/>
            </author>
            <author fullname="E. Dijk" initials="E." surname="Dijk">
              <organization/>
            </author>
            <date month="February" year="2017"/>
            <abstract>
              <t>This document provides reference information for implementing a cross-protocol network proxy that performs translation from the HTTP protocol to the Constrained Application Protocol (CoAP).  This will enable an HTTP client to access resources on a CoAP server through the proxy.  This document describes how an HTTP request is mapped to a CoAP request and how a CoAP response is mapped back to an HTTP response.  This includes guidelines for status code, URI, and media type mappings, as well as additional interworking advice.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8075"/>
          <seriesInfo name="DOI" value="10.17487/RFC8075"/>
        </reference>
        <reference anchor="RFC8820" target="https://www.rfc-editor.org/info/rfc8820">
          <front>
            <title>URI Design and Ownership</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="June" year="2020"/>
            <abstract>
              <t>Section 1.1.1 of RFC 3986 defines URI syntax as "a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme."  In other words, the structure of a URI is defined by its scheme. While it is common for schemes to further delegate their substructure to the URI's owner, publishing independent standards that mandate particular forms of substructure in URIs is often problematic.</t>
              <t>This document provides guidance on the specification of URI substructure in standards.</t>
              <t>This document obsoletes RFC 7320 and updates RFC 3986.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="190"/>
          <seriesInfo name="RFC" value="8820"/>
          <seriesInfo name="DOI" value="10.17487/RFC8820"/>
        </reference>
        <reference anchor="RFC6943" target="https://www.rfc-editor.org/info/rfc6943">
          <front>
            <title>Issues in Identifier Comparison for Security Purposes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler">
              <organization/>
            </author>
            <date month="May" year="2013"/>
            <abstract>
              <t>Identifiers such as hostnames, URIs, IP addresses, and email addresses are often used in security contexts to identify security principals and resources.  In such contexts, an identifier presented via some protocol is often compared using some policy to make security decisions such as whether the security principal may access the resource, what level of authentication or encryption is required, etc.  If the parties involved in a security decision use different algorithms to compare identifiers, then failure scenarios ranging from denial of service to elevation of privilege can result.  This document provides a discussion of these issues that designers should consider when defining identifiers and protocols, and when constructing architectures that use multiple protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6943"/>
          <seriesInfo name="DOI" value="10.17487/RFC6943"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub" target="https://www.ietf.org/archive/id/draft-ietf-core-coap-pubsub-09.txt">
          <front>
            <title>Publish-Subscribe Broker for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Michael Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Ari Keranen">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jaime Jimenez">
              <organization>Ericsson</organization>
            </author>
            <date day="30" month="September" year="2019"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP), and related extensions
   are intended to support machine-to-machine communication in systems
   where one or more nodes are resource constrained, in particular for
   low power wireless sensor networks.  This document defines a publish-
   subscribe Broker for CoAP that extends the capabilities of CoAP for
   supporting nodes with long breaks in connectivity and/or up-time.

   There is work in progress to resolve some of the transfer layer
   issues by using a more RESTful approach.

   Please see https://github.com/core-wg/pubsub/blob/master/proposal.txt

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-09"/>
        </reference>
        <reference anchor="RFC8152" target="https://www.rfc-editor.org/info/rfc8152">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad">
              <organization/>
            </author>
            <date month="July" year="2017"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size.  There is a need for the ability to have basic security services defined for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol.  This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization.  This specification additionally describes how to represent cryptographic keys using CBOR.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8152"/>
          <seriesInfo name="DOI" value="10.17487/RFC8152"/>
        </reference>
        <reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties.  The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection.  A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value.  CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC8747" target="https://www.rfc-editor.org/info/rfc8747">
          <front>
            <title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="March" year="2020"/>
            <abstract>
              <t>This specification describes how to declare in a CBOR Web Token (CWT) (which is defined by RFC 8392) that the presenter of the CWT possesses a particular proof-of-possession key. Being able to prove possession of a key is also sometimes described as being the holder-of-key. This specification provides equivalent functionality to "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)" (RFC 7800) but using Concise Binary Object Representation (CBOR) and CWTs rather than JavaScript Object Notation (JSON) and JSON Web Tokens (JWTs).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8747"/>
          <seriesInfo name="DOI" value="10.17487/RFC8747"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oauth-authz" target="https://www.ietf.org/archive/id/draft-ietf-ace-oauth-authz-46.txt">
          <front>
            <title>Authentication and Authorization for Constrained Environments (ACE) using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Goeran Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Erik Wahlstroem">
	 </author>
            <author fullname="Samuel Erdtman">
              <organization>Spotify AB</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Ltd.</organization>
            </author>
            <date day="8" month="November" year="2021"/>
            <abstract>
              <t>   This specification defines a framework for authentication and
   authorization in Internet of Things (IoT) environments called ACE-
   OAuth.  The framework is based on a set of building blocks including
   OAuth 2.0 and the Constrained Application Protocol (CoAP), thus
   transforming a well-known and widely used authorization solution into
   a form suitable for IoT devices.  Existing specifications are used
   where possible, but extensions are added and profiles are defined to
   better serve the IoT use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oauth-authz-46"/>
        </reference>
        <reference anchor="I-D.ietf-ace-dtls-authorize" target="https://www.ietf.org/archive/id/draft-ietf-ace-dtls-authorize-18.txt">
          <front>
            <title>Datagram Transport Layer Security (DTLS) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Stefanie Gerdes">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Olaf Bergmann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <date day="4" month="June" year="2021"/>
            <abstract>
              <t>   This specification defines a profile of the ACE framework that allows
   constrained servers to delegate client authentication and
   authorization.  The protocol relies on DTLS version 1.2 for
   communication security between entities in a constrained network
   using either raw public keys or pre-shared keys.  A resource-
   constrained server can use this protocol to delegate management of
   authorization information to a trusted host with less severe
   limitations regarding processing power and memory.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-dtls-authorize-18"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-profile" target="https://www.ietf.org/archive/id/draft-ietf-ace-oscore-profile-19.txt">
          <front>
            <title>OSCORE Profile of the Authentication and Authorization for Constrained Environments Framework</title>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Martin Gunnarsson">
              <organization>RISE</organization>
            </author>
            <date day="6" month="May" year="2021"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes Object Security for Constrained RESTful Environments
   (OSCORE) to provide communication security and proof-of-possession
   for a key owned by the client and bound to an OAuth 2.0 access token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-profile-19"/>
        </reference>
        <reference anchor="RFC8576" target="https://www.rfc-editor.org/info/rfc8576">
          <front>
            <title>Internet of Things (IoT) Security: State of the Art and Challenges</title>
            <author fullname="O. Garcia-Morchon" initials="O." surname="Garcia-Morchon">
              <organization/>
            </author>
            <author fullname="S. Kumar" initials="S." surname="Kumar">
              <organization/>
            </author>
            <author fullname="M. Sethi" initials="M." surname="Sethi">
              <organization/>
            </author>
            <date month="April" year="2019"/>
            <abstract>
              <t>The Internet of Things (IoT) concept refers to the usage of standard Internet protocols to allow for human-to-thing and thing-to-thing communication.  The security needs for IoT systems are well recognized, and many standardization steps to provide security have been taken -- for example, the specification of the Constrained Application Protocol (CoAP) secured with Datagram Transport Layer Security (DTLS).  However, security challenges still exist, not only because there are some use cases that lack a suitable solution, but also because many IoT devices and systems have been designed and deployed with very limited security capabilities.  In this document, we first discuss the various stages in the lifecycle of a thing. Next, we document the security threats to a thing and the challenges that one might face to protect against these threats.  Lastly, we discuss the next steps needed to facilitate the deployment of secure IoT systems.  This document can be used by implementers and authors of IoT specifications as a reference for details about security considerations while documenting their specific security challenges, threat models, and mitigations.</t>
              <t>This document is a product of the IRTF Thing-to-Thing Research Group (T2TRG).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8576"/>
          <seriesInfo name="DOI" value="10.17487/RFC8576"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIALGPGmIAA819W3MbR5LuO35FH/rBxC4AStTFusTEDIeSLa0lS0ek13si
JmKiATTIHjW6sd0NUhiPz28/mV9mVmU1QEme2Yfj2NWQILq6Lll5zy+n0+mo
6/N6+de8auriWda322JUblr81PWn9+49vXc6WjaLOl/Tn5dtvuqnZduvpv1p
315N26Kj35t+eu/paJH3z7KyXjWjTflslGV9s3iWfbsrum/pl263botVFz+g
l9RNX67KYum+1bfloo+/L5r1JvcfdE3bp+MsGpp5R98q4mftalEsu35X8Wd1
861MZlls+mv64OG3o77s+W8/bMtlXi+KrKmzDy8vLlfbKntRdOVVna2aNntd
90VbF33WrLLL67K+6rKLXdcX626Uz+dtcfPs4FPNZfxaW+TPssvTyw8/jPJt
f920z0ajKW0SLeBslv1YtHld1DQ92d6ztnSfNe3Vs+wlbUjXNbVsTlHwXmDZ
Zb97lv1H097kHXZhyWu9d/rw9J7syrbuW/rG92Vd0fnSR8U6L6tnWd6Ws4/y
jj8VOviM9jnM6y3Nq7nJ+25xHSb2Nu/76zLv/F8wvVfb/LYos8ticV3TQVyV
Redn+oF+p19m2emjOOm327rECDLpF9Mn954+PfWT/qFo13m9i5Ne6/tnH/X9
f7rGi5OJ/zjLXuVt/7EI0/6xyrdd/FAHu8bvf9q0zd+KRb9ommq2LEajuqGX
9uVNwbT74fvzB0+fPNYfvzt9cC/+eB8/0sHz/xJlCS2dtYvrsqcBt21eZRdM
fF1GO5/114WRB9HRT0V/27Qfp/O8K5bZRbPqb4lI/NPYwSwzcuGfdYEfZnSc
RbUkSsTHy7ynF9MdvYdfOzpOeg9dwGfZ++vZi1n2ouzow55W1dST7OeaFtd2
dAY8kfO8Kolc6zKfZK/bm7IuZIGPHzz8jt/6evpiVhZ00RdNW/A9b7btopgu
y5Zm2dApydef3nvwVH988vQhfvzlwfnsw8vzafGpnJ7eu3//3oP7tnuPTh8+
Dj8+sU/tlTzG6ZMn9unjp2HTHz+8bz8+fWTve3x679QeexjGffL4/gM/i+t+
XT3ieTy8f++Uxub9SQ/60XdPwhLuP7AhH3/3+EE489Mn4cdHp2Emp4/C68MX
npzK/Hj75vyiupYdXBfLMqcfiafU/bTfbYqpTMS+fU3E0ha33fRvdCOnRONE
rtMbOqUlzi9+jalXxsw3m07XOr18kZDjL8Xcsa3jX5rLsfzCtLhoyw2PeReh
XRALyIt5KRc9fHzJH6/LXe4/JHbxdnFOl8h/+J+z7JwmuinqfDf4suMgRsFP
s7NNW1ZEyadCyX3eXjH/uO57WuDJye3t7ez2wYw4zsnlh5NbEjc9L2W6jEs5
4e05++lM95n3t0s25C1/nl3y53vv0FeUeZ3jJXnH13VNB9WduPH8z7NPTFj2
0vPm7L28OXknf0z/yJF/j9P+fS/HKW/ylrgZiaK932US3xhRrcIbzpuqomtK
+/IfF+9+GszJ/vTv/Dc6mRfNYsuvy2SGdxEFnd3Zelsvu6J2Z/c90RldrgeH
lpXr15lLJ/u4CHM4kTmfjL4h6iyyeVE1t8SgiXNmxN7bZVbl9NkEjLTkT+cl
xHFe06RYO6hoIzLSCIq2IEE+o2m8On/97MAaIK4g0XO82Xjy9yR05Ib5XeLJ
vKwXu0XVbEA49M5XW7rNdNTrzZZG8WPhyZa0nVOa5svlLOHOB/bGaLqMQzAt
03RAAVXJH7MoOJk3zccTkiDTwk1m2qym15jMQicz9SPRJKbFcjS6KeoteJyI
PShsf2LdjV9CH1+1zXbzTLjCtG+m+IE/L/vr7VwfOEn1PBK202mWz0mo09tG
I3qmy5ZGQFfEVLvsyrQq1oZkWcx3DmhTx6+ZLXWqLPXXeU/PVEwCLDSJJ9SL
csNylB7hTz4UG5oIvQnnBTFLm5xdkjbTEQVkxyyVx6R1eVEMPXCWpTMFLZEG
sNwuehv99YfL74e78YFex8NlP/BmZcdQ5cYz2YZ1uVxWpDl8w2uTsZgYRpdf
PdXswFSzX3/lv/32m0yykx3jTS0qktKiVMzpPGj+fOIL+oh3er4toRpky5LV
6DnRxTK7pvvW4urZNs9GZ7T8vsuYlySvIDbCx0qk1E2y22vS0ejfgpTabbUq
6cIuM2Lnc5ogn2mLn2gHafy+1Cn4N3em2uh7s25LA9LN7hY5XeqyYj2El7Ju
lmQF6Cez0S/8St4Af/48Dgm7iowF0uRxWsugUtnSJvicdn1b4YBpAjQUvY2n
boo6GEmdEQ+lndtWecus5Oz9ayU83j8apUuoj8bSUfIwDj1CVPCiXIHz8Fk0
ZGI0FX+1puPJtqzf3dJVCo/oRkzopPqMSJ1n25frgtdw25a9vps2hM6Wbvaa
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
JnGHYsfott0lPsdEO9H29pGL7MGe4FGtdNAAjRy8Ik5DAjKOlpiBechYQgZn
nXNAY1f0AkDKhe/aANzt2eKADjV0oAbo4WDicx6OwP2J/1J/dkLNseicMQ8E
/ijkiLoURjJaG7GmdYl0mctmqQF/VdPoz2Px2tvE9w10oA+IGBONNyTfx2Ap
sI13NHurIUbMwhLRmrmmBFqCl+59lKNYcSz/zQR1Ia8gljgzvBIllXjWTV6p
DBSFC6r4O32DwimK/YgAftOHCIwWvQW/DM3GSAqY9mzAJ9+PcMyRkJPNYpLW
2T8b+UclIdVSd0B08WRhE8ZDNr1IK9riY+ZMCk+GvC2YbR7R1TdAgXMEnjq0
RkgWLUxqSZxdInsAmvQTx9nabkI9cx1ZzKCILewWO3NqGa7m/diT5vHD+/Bq
iWnXVFvLbuMNKBcfpRi6L0K3bNpeuLajcNoLG742rJIuJnrbaZD5oNXZVhcg
LE6DmlHXpS/2fkrhsiK7rO6L1pzRWwCPNbca+xG/UXrw5k329mJEmmRDvBa2
jUNz10ZvBYJgIseCsaNwmUMJO1h8bkgaHIvMr4pQqop+HMq+8sDRafXqRSLN
slcHZliNcOazCJivNgt7I3uyG2y3q7zrwy4hRXot0YyBo1LigQ2C07xRTrDI
RIIiYHGdUHVGG9OwG26WWaFfOCnns/SddWRHTxziVrdHHQL5FbQLng646ADV
V9yz2kxns+2uLTlAkO+y9/SR4nD4L41G72646XLFfHlbs+Du0CeOZ1l2awlu
yhD8wETFIocssA6OJStARMKCEGTgkO40r5hDyG4N2FqA6smRp1krKF5sPcgb
n3Sq4i245LjFtG+m+IFjC9Jc/QfSOjdS1I3M0Tp4KcMRT2UaDPvCarDBjUID
2ZJdtoxNA91KwbqCfzn43lgpLgPcHIofTcEwTY/fNhZ7pSolj8O3t5BOIm2z
YuQ29Inx2/75DS47l1QsBmlwSKzU1fNMWWIasEL+iHA5q35woijOQZN2D3FP
KxFyTPZItmsAah4MRMT4rxp1rkXGocEP5/ORfKXQNE7ZTavhe4Xx/HwXl6iC
O53gSEiD1UaGIJSabZLVrlBlwXGBArKIRqqartsF1B8rbUhPQQTTnL1zcNvX
aX3l8OFeUjQ8ZHxRw1bifIzbcskTget1kyONBAigIh41D+OLlyqQrbxSkCm1
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

-->

</rfc>
