<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.0.40 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?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 ipr="trust200902" docName="draft-keranen-t2trg-rest-iot-05" category="info">

  <front>
    <title abbrev="RESTful Design for IoT Systems">RESTful Design for Internet of Things Systems</title>

    <author initials="A." surname="Keranen" fullname="Ari Keranen">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street></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>ETH Zurich</organization>
      <address>
        <postal>
          <street>Universitaetstrasse 6</street>
          <city>Zurich</city>
          <code>CH-8092</code>
          <country>Switzerland</country>
        </postal>
        <email>kovatsch@inf.ethz.ch</email>
      </address>
    </author>
    <author initials="K." surname="Hartke" fullname="Klaus Hartke">
      <organization>Universitaet Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <email>hartke@tzi.org</email>
      </address>
    </author>

    <date year="2017" month="September" day="14"/>

    <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.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>The Representational State Transfer (REST) architectural style <xref target="REST"/> 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"/> and CoAP <xref target="RFC7252"/>.
Since RESTful APIs are often simple and lightweight, they are a good fit for various IoT applications.
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. 
Design of a good RESTful IoT system has naturally many commonalities with other Web systems.
Compared to other systems, the key characteristics of many IoT systems include:</t>

<t><list style="symbols">
  <t>data formats, interaction patterns, and other mechanisms that minimize, or preferably avoid, the need for human interaction</t>
  <t>preference for compact and simple data formats to facilitate efficient transfer over (often) constrained networks and lightweight processing in constrained nodes</t>
</list></t>

</section>
<section anchor="sec-terms" title="Terminology">

<t>This section explains some of the common terminology that is used in the context of RESTful design for IoT systems. For terminology of constrained nodes and networks, see <xref target="RFC7228"/>.</t>

<t><list style="hanging">
  <t hangText='Cache:'>
  A local store of response messages and the subsystem that controls storage, retrieval, and deletion of messages in it.</t>
  <t hangText='Client:'>
  A node that sends requests to servers and receives responses.
In RESTful IoT systems it’s common for nodes to have more than one role (e.g., both server and client; see <xref target="sec-architecture"/>).</t>
  <t hangText='Client State:'>
  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"/>, which has some ambiguity in modern (IoT) systems where 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>
  <t hangText='Content Negotiation:'>
  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>
  <t hangText='Form:'>
  A hypermedia control that enables a client to change the state of a resource or to construct a query locally.</t>
  <t hangText='Forward Proxy:'>
  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>
  <t hangText='Gateway:'>
  A reverse proxy that provides an interface to a non-RESTful system such as legacy systems or alternative technologies such as Bluetooth ATT/GATT. 
See also “Reverse Proxy”.</t>
  <t hangText='Hypermedia Control:'>
  A component, such as a link or a form, embedded in a representation that identifies a resource for future hypermedia interactions. 
If the client engages in an interaction with the identified resource, the result may be a change to resource state and/or client state.</t>
  <t hangText='Idempotent Method:'>
  A method where multiple identical requests with that method lead to the same visible resource state as a single such request.</t>
  <t hangText='Link:'>
  A hypermedia control that enables a client to navigate between resources and thereby change the client state.</t>
  <t hangText='Link Relation Type:'>
  An identifier that describes how the link target resource relates to the current resource (see <xref target="RFC5988"/>).</t>
  <t hangText='Media Type:'>
  A 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>
  <t hangText='Method:'>
  An operation associated with a resource. Common methods include GET, PUT, POST, and DELETE (see <xref target="sec-methods"/> for details).</t>
  <t hangText='Origin Server:'>
  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>
  <t hangText='Proactive Content Negotiation:'>
  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 to a sensor with preferred media type “application/senml+json”.</t>
  <t hangText='Reactive Content Negotiation:'>
  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>
  <t hangText='Representation:'>
  A serialization that represents the current or intended state of a resource and that can be transferred between clients and servers. 
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>
  <t hangText='Representation Format:'>
  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="RFC7159"/>, XML, or RDF. Within IoT systems, often compact formats based on JSON, CBOR <xref target="RFC7049"/>, and EXI <xref target="W3C.REC-exi-20110310"/> are used.</t>
  <t hangText='Representational State Transfer (REST):'>
  An architectural style for Internet-scale distributed hypermedia systems.</t>
  <t hangText='Resource:'>
  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>
  <t hangText='Resource State:'>
  A model of a resource’s possible states that is represented in a supported representation type, typically a media type. 
Resources can change state because of REST interactions with them, or they can change state for reasons outside of the REST model.</t>
  <t hangText='Resource Type:'>
  An identifier that annotates the application-semantics of a resource (see Section 3.1 of <xref target="RFC6690"/>).</t>
  <t hangText='Reverse Proxy:'>
  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>
  <t hangText='Safe Method:'>
  A method that does not result in any state change on the origin server when applied to a resource.</t>
  <t hangText='Server:'>
  A node that listens for requests, performs the requested operation and sends responses back to the clients.</t>
  <t hangText='Uniform Resource Identifier (URI):'>
  A global identifier for resources. 
See <xref target="sec-uris"/> for more details.</t>
</list></t>

</section>
<section anchor="basics" title="Basics">

<section anchor="sec-architecture" title="Architecture">

<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.</t>

<figure title="Client-Server Communication" anchor="basic-arch-x"><artwork align="center"><![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.</t>

<figure title="Communication with Forward Proxy" anchor="basic-arch-a"><artwork align="center"><![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 title="Communication with Reverse Proxy" anchor="basic-arch-b"><artwork align="center"><![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"/>, 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 title="Constrained RESTful environments" anchor="basic-arch-c"><artwork align="center"><![CDATA[
 ________                                         _________
|        |                                       |         |
| Thing (C)-------------------------------------(S) Origin |
|       (S)                                      |  Server |
|________| \                                     |_________|
 (Sensor)   \   ________                     (Resource Directory)
             \ |        |
              (C) Thing |
               |________|
              (Controller)
]]></artwork></figure>

</section>
<section anchor="system-design" title="System design">

<t>When designing a RESTful system, the primary effort goes into modeling the state of the distributed application and assigning it to the different components (i.e., clients and servers).
How clients can navigate through the resources and modify state to achieve their goals is defined through hypermedia controls, that is, links and forms.
Hypermedia controls span a kind of a state machine where the nodes are resources and the transitions are links or forms.
Clients run this state machine (i.e., the application) by retrieving representations, processing the data, and following the included hypermedia controls.
In REST, remote state is changed by submitting forms.
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 (see <xref target="sec-terms"/>).
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>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.
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" title="Uniform Resource Identifiers (URIs)">

<t>An important part of RESTful API design is to model the system as a set of resources whose state can be retrieved and/or modified and where resources can be potentially also created and/or deleted.</t>

<t>Uniform Resource Identifiers (URIs) are used to indicate a resource for interaction, to reference a resource from another resource, to advertise or bookmark a resource, or to index a resource by search engines.</t>

<figure><artwork><![CDATA[
  foo://example.com:8042/over/there?name=ferret#nose
  \_/   \______________/\_________/ \_________/ \__/
   |           |            |            |        |
scheme     authority       path        query   fragment
]]></artwork></figure>

<t>A URI is a sequence of characters that matches the syntax defined in <xref target="RFC3986"/>. 
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 “http” scheme. 
A host name (e.g., a fully qualified domain name) or an IP address, potentially followed by a transport layer port number, are usually used in the authority component for the “http” and “coap” schemes. 
The path and query contain data to identify a resource within the scope of the URI’s scheme and naming authority. 
The fragment allows to refer to some portion of the resource, such as a Record in a SenML Pack. 
However, fragments are processed only at client side and not sent on the wire. 
<xref target="RFC7320"/> 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"/>. 
(CoAP uses Datagram TLS (DTLS) <xref target="RFC6347"/>, the variant of TLS for UDP.) 
These four schemes also provide means for locating the resource; using the HTTP protocol for “http” and “https”, and with the CoAP protocol 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 rest of the URI is identical, these are two different resources, in two distinct namespaces.</t>

<t>The query parameters can be used to parametrize 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 commonly used.
Whether the order of the query parameters matters in URIs is unspecified and they can be re-ordered e.g., by proxies. 
Therefore applications should not rely on their order; see Section 3.3 of <xref target="RFC6943"/> for more details.</t>

</section>
<section anchor="representations" title="Representations">

<t>Clients can retrieve the resource state from an origin server or manipulate resource state on the origin server by transferring resource representations.
Resource representations have a media type that tells how the representation should be interpreted by identifying the representation format used.</t>

<t>Typical media types for IoT systems include:</t>

<t><list style="symbols">
  <t>“text/plain” for simple UTF-8 text</t>
  <t>“application/octet-stream” for arbitrary binary data</t>
  <t>“application/json” for the JSON format <xref target="RFC7159"/></t>
  <t>“application/senml+json” <xref target="I-D.ietf-core-senml"/> for Sensor Markup Language (SenML) formatted data</t>
  <t>“application/cbor” for CBOR <xref target="RFC7049"/></t>
  <t>“application/exi” for EXI <xref target="W3C.REC-exi-20110310"/></t>
</list></t>

<t>A full list of registered Internet Media Types is available at the IANA registry <xref target="IANA-media-types"/> and numerical media types registered for use with CoAP are listed at CoAP Content-Formats IANA registry <xref target="IANA-CoAP-media"/>.</t>

</section>
<section anchor="sec-methods" title="HTTP/CoAP Methods">

<t>Section 4.3 of <xref target="RFC7231"/> defines the set of methods in HTTP; 
Section 5.8 of <xref target="RFC7252"/> 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" title="GET">

<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" title="POST">

<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" title="PUT">

<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.</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" title="DELETE">

<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>
<section anchor="httpcoap-statusresponse-codes" title="HTTP/CoAP Status/Response Codes">

<t>Section 6 of <xref target="RFC7231"/> 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, Section 5.9 of <xref target="RFC7252"/> 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" title="REST Constraints">

<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"/>:</t>

<t><list style="symbols">
  <t>Performance</t>
  <t>Scalability</t>
  <t>Reliability</t>
  <t>Simplicity</t>
  <t>Modifiability</t>
  <t>Visibility</t>
  <t>Portability</t>
</list></t>

<t>The following sub-sections briefly summarize the REST constraints and explain how they enable the listed properties.</t>

<section anchor="client-server" title="Client-Server">

<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, as it is clear which component started an interaction.
Furthermore, it improves modifiability through a clear separation of concerns.</t>

</section>
<section anchor="stateless" title="Stateless">

<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.</t>

<t>Furthermore, the Stateless constraint enables caching.</t>

</section>
<section anchor="cache" title="Cache">

<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.
Less 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>

</section>
<section anchor="sec-uniform-interface" title="Uniform Interface">

<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>

<t><list style="symbols">
  <t>URIs to identify resources</t>
  <t>representation formats to represent (and retrieve and manipulate) resource state</t>
  <t>self-descriptive messages with a standard set of methods (e.g., GET, POST, PUT, DELETE with their guaranteed properties)</t>
  <t>hypermedia controls within representations</t>
</list></t>

<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 mostly used control for RESTful systems is Web Linking <xref target="RFC5590"/>.
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 different 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>

</section>
<section anchor="layered-system" title="Layered System">

<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>

</section>
<section anchor="code-on-demand" title="Code-on-Demand">

<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>

</section>
</section>
<section anchor="hypermedia-driven-applications" title="Hypermedia-driven Applications">

<t>Hypermedia-driven applications take advantage of hypermedia controls, i.e., links and forms, embedded in the resource representations. 
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.</t>

<section anchor="motivation" title="Motivation">

<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>

<t><list style="symbols">
  <t>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.</t>
  <t>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.</t>
  <t>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.</t>
</list></t>

</section>
<section anchor="knowledge" title="Knowledge">

<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 in-band information for identifying the knowledge that is required.
This enables the client to verify that is has all required knowledge and to acquire missing knowledge on-demand.</t>

<t>A hypermedia-driven application typically uses the following identifiers:</t>

<t><list style="symbols">
  <t>URI schemes that identify communication protocols,</t>
  <t>Internet Media Types that identify representation formats,</t>
  <t>link relation types or resource types that identify link semantics,</t>
  <t>form relation types that identify form semantics,</t>
  <t>variable names that identify the semantics of variables in templated links, and</t>
  <t>form field names that identify the semantics of form fields in forms.</t>
</list></t>

<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" title="Interaction">

<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"/> or Resource Directory <xref target="I-D.ietf-core-resource-directory"/>).
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"/>.</t>

</section>
</section>
<section anchor="design-patterns" title="Design Patterns">

<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" title="Collections">

<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"/>, CoAP pub/sub broker <xref target="I-D.ietf-core-coap-pubsub"/>, and resource discovery via “.well-known/core”. 
Collection+JSON <xref target="CollectionJSON"/> is an example of a generic collection Media Type.</t>

</section>
<section anchor="calling-a-procedure" title="Calling a Procedure">

<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"/>).
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" title="Instantly Returning Procedures">

<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" title="Long-running Procedures">

<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" title="Conversion">

<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" title="Events as State">

<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 door bell 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 door bell could be modeled as a resource that can have the states unpressed and pressed.
There are, however, a few issues with this approach.
Polling is not an option, as it is highly unlikely to be able to observe 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 door bell 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 only eventual consistency (see Section 1.3 of <xref target="RFC7641"/>).</t>

<t>The solution is to pick a state model that fits better to the application.
In the case of the door bell – 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.</t>

<t>In the case of a network outage, this could lead to a ringing sound 10 minutes 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.</t>

</section>
</section>
<section anchor="server-push" title="Server Push">

<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"/>.
It offers enventual 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.
Blockwise transfers <xref target="RFC7959"/> 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.
A client observer would subscribe to events by registering a callback URI at the origin server, e.g., using a POST request and receiving the location of a temporary subscription resource as handle.
The origin server would then publish events by sending POST requests containing the event to the observer.
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>In HTTP, there exist a number of workarounds to enable server push, e.g., long polling and streaming <xref target="RFC6202"/> or server-sent events <xref target="W3C.REC-html5-20141028"/>.
Long polling as an extension that both server and client need to be aware of.
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 (in fact an evolved version of streaming) are more efficient, as only one request is sent.
However, there is only one response header and subsequent notifications can only have content.
There are no means for individual status and metadata, and hence no means for proficient error handling (e.g., when the resource is deleted).</t>

</section>
</section>
<section anchor="sec-sec" title="Security Considerations">

<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>

<t><list style="symbols">
  <t>Transport Layer Security (TLS): <xref target="RFC5246"/> and <xref target="RFC6347"/></t>
  <t>Internet X.509 Public Key Infrastructure: <xref target="RFC5280"/></t>
  <t>HTTP security: Section 9 of <xref target="RFC7230"/>, Section 9 of <xref target="RFC7231"/>, etc.</t>
  <t>CoAP security: Section 11 of <xref target="RFC7252"/></t>
  <t>URI security: Section 7 of <xref target="RFC3986"/></t>
</list></t>

<t>IoT-specific security is mainly work in progress at the time of writing.
First specifications include:</t>

<t><list style="symbols">
  <t>(D)TLS Profiles for the Internet of Things: <xref target="RFC7925"/></t>
</list></t>

<t>Further IoT security considerations are available in <xref target="I-D.irtf-t2trg-iot-seccons"/>.</t>

</section>
<section anchor="acknowledgement" title="Acknowledgement">

<t>The authors would like to thank Mert Ocak, Heidi-Maria Back, Tero Kauppinen, Michael Koster, Robby Simpson, Ravi Subramaniam, Dave Thaler, Erik Wilde, and Niklas Widell for the reviews and feedback.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor='RFC3986' target='https://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials='T.' surname='Berners-Lee' fullname='T. Berners-Lee'><organization /></author>
<author initials='R.' surname='Fielding' fullname='R. Fielding'><organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'><organization /></author>
<date year='2005' month='January' />
<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 initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<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 &quot;http&quot; and &quot;https&quot; 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 initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<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></organization>
    </author>
    <date year="2000"/>
  </front>
  <seriesInfo name="Ph.D. Dissertation, University of California, Irvine" value=""/>
</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 initials='T.' surname='Dierks' fullname='T. Dierks'><organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2008' month='August' />
<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='RFC6347' target='https://www.rfc-editor.org/info/rfc6347'>
<front>
<title>Datagram Transport Layer Security Version 1.2</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<author initials='N.' surname='Modadugu' fullname='N. Modadugu'><organization /></author>
<date year='2012' month='January' />
<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'>
<front>
<title>CoRE Resource Directory</title>

<author initials='Z' surname='Shelby' fullname='Zach Shelby'>
    <organization />
</author>

<author initials='M' surname='Koster' fullname='Michael Koster'>
    <organization />
</author>

<author initials='C' surname='Bormann' fullname='Carsten Bormann'>
    <organization />
</author>

<author initials='P' surname='Stok' fullname='Peter Van der Stok'>
    <organization />
</author>

<author initials='C' surname='Amsuess' fullname='Christian Amsuess'>
    <organization />
</author>

<date month='July' day='3' year='2017' />

<abstract><t>In many M2M applications, direct discovery of resources is not practical due to sleeping nodes, disperse networks, or networks where multicast traffic is inefficient.  These problems can be solved by employing an entity called a Resource Directory (RD), which hosts descriptions of resources held on other servers, allowing lookups to be performed for those resources.  This document specifies the web interfaces that a Resource Directory supports in order for web servers to discover the RD and to register, maintain, lookup and remove resource descriptions.  Furthermore, new link attributes useful in conjunction with an RD are defined.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-core-resource-directory-11' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-core-resource-directory-11.txt' />
</reference>



<reference  anchor='RFC7049' target='https://www.rfc-editor.org/info/rfc7049'>
<front>
<title>Concise Binary Object Representation (CBOR)</title>
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'><organization /></author>
<date year='2013' month='October' />
<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></abstract>
</front>
<seriesInfo name='RFC' value='7049'/>
<seriesInfo name='DOI' value='10.17487/RFC7049'/>
</reference>



<reference anchor='W3C.REC-exi-20110310'
           target='http://www.w3.org/TR/2011/REC-exi-20110310'>
<front>
<title>Efficient XML Interchange (EXI) Format 1.0</title>

<author initials='J.' surname='Schneider' fullname='John Schneider'>
    <organization />
</author>

<author initials='T.' surname='Kamiya' fullname='Takuki Kamiya'>
    <organization />
</author>

<date month='March' day='10' year='2011' />
</front>

<seriesInfo name='World Wide Web Consortium Recommendation' value='REC-exi-20110310' />
<format type='HTML' target='http://www.w3.org/TR/2011/REC-exi-20110310' />
</reference>



<reference  anchor='RFC5590' target='https://www.rfc-editor.org/info/rfc5590'>
<front>
<title>Transport Subsystem for the Simple Network Management Protocol (SNMP)</title>
<author initials='D.' surname='Harrington' fullname='D. Harrington'><organization /></author>
<author initials='J.' surname='Schoenwaelder' fullname='J. Schoenwaelder'><organization /></author>
<date year='2009' month='June' />
<abstract><t>This document defines a Transport Subsystem, extending the Simple Network Management Protocol (SNMP) architecture defined in RFC 3411. This document defines a subsystem to contain Transport Models that is comparable to other subsystems in the RFC 3411 architecture.  As work is being done to expand the transports to include secure transports, such as the Secure Shell (SSH) Protocol and Transport Layer Security (TLS), using a subsystem will enable consistent design and modularity of such Transport Models.  This document identifies and describes some key aspects that need to be considered for any Transport Model for SNMP.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='78'/>
<seriesInfo name='RFC' value='5590'/>
<seriesInfo name='DOI' value='10.17487/RFC5590'/>
</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 initials='D.' surname='Cooper' fullname='D. Cooper'><organization /></author>
<author initials='S.' surname='Santesson' fullname='S. Santesson'><organization /></author>
<author initials='S.' surname='Farrell' fullname='S. Farrell'><organization /></author>
<author initials='S.' surname='Boeyen' fullname='S. Boeyen'><organization /></author>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<author initials='W.' surname='Polk' fullname='W. Polk'><organization /></author>
<date year='2008' month='May' />
<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='RFC5988' target='https://www.rfc-editor.org/info/rfc5988'>
<front>
<title>Web Linking</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<date year='2010' month='October' />
<abstract><t>This document specifies relation types for Web links, and defines a registry for them.  It also defines the use of such links in HTTP headers with the Link header field.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5988'/>
<seriesInfo name='DOI' value='10.17487/RFC5988'/>
</reference>



<reference  anchor='RFC6690' target='https://www.rfc-editor.org/info/rfc6690'>
<front>
<title>Constrained RESTful Environments (CoRE) Link Format</title>
<author initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></author>
<date year='2012' month='August' />
<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.  &quot;RESTful&quot; 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 initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></author>
<date year='2015' month='September' />
<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 &quot;observe&quot; 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 initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<author initials='Z.' surname='Shelby' fullname='Z. Shelby' role='editor'><organization /></author>
<date year='2016' month='August' />
<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 &quot;Block&quot; 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 initials='S.' surname='Loreto' fullname='S. Loreto'><organization /></author>
<author initials='P.' surname='Saint-Andre' fullname='P. Saint-Andre'><organization /></author>
<author initials='S.' surname='Salsano' fullname='S. Salsano'><organization /></author>
<author initials='G.' surname='Wilkins' fullname='G. Wilkins'><organization /></author>
<date year='2011' month='April' />
<abstract><t>On today's Internet, the Hypertext Transfer Protocol (HTTP) is often used (some would say abused) to enable asynchronous, &quot;server- initiated&quot; 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 &quot;bidirectional HTTP&quot; 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='I-D.ietf-core-object-security'>
<front>
<title>Object Security of CoAP (OSCOAP)</title>

<author initials='G' surname='Selander' fullname='Goeran Selander'>
    <organization />
</author>

<author initials='J' surname='Mattsson' fullname='John Mattsson'>
    <organization />
</author>

<author initials='F' surname='Palombini' fullname='Francesca Palombini'>
    <organization />
</author>

<author initials='L' surname='Seitz' fullname='Ludwig Seitz'>
    <organization />
</author>

<date month='July' day='1' year='2017' />

<abstract><t>This document defines Object Security of CoAP (OSCOAP), a method for application layer protection of the Constrained Application Protocol (CoAP), using the CBOR Object Signing and Encryption (COSE).  OSCOAP provides end-to-end encryption, integrity and replay protection to CoAP payload, options, and header fields, as well as a secure message binding.  OSCOAP is designed for constrained nodes and networks and can be used across intermediaries and over any layer.  The use of OSCOAP is signaled with the CoAP option Object-Security, also defined in this document.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-core-object-security-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-core-object-security-04.txt' />
</reference>



<reference anchor='W3C.REC-html5-20141028'
           target='http://www.w3.org/TR/2014/REC-html5-20141028'>
<front>
<title>HTML5</title>

<author initials='I.' surname='Hickson' fullname='Ian Hickson'>
    <organization />
</author>

<author initials='R.' surname='Berjon' fullname='Robin Berjon'>
    <organization />
</author>

<author initials='S.' surname='Faulkner' fullname='Steve Faulkner'>
    <organization />
</author>

<author initials='T.' surname='Leithead' fullname='Travis Leithead'>
    <organization />
</author>

<author initials='E.' surname='Navara' fullname='Erika Doyle Navara'>
    <organization />
</author>

<author initials='T.' surname='O&amp;#039;Connor' fullname='Theresa O&amp;#039;Connor'>
    <organization />
</author>

<author initials='S.' surname='Pfeiffer' fullname='Silvia Pfeiffer'>
    <organization />
</author>

<date month='October' day='28' year='2014' />
</front>

<seriesInfo name='World Wide Web Consortium Recommendation' value='REC-html5-20141028' />
<format type='HTML' target='http://www.w3.org/TR/2014/REC-html5-20141028' />
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor='RFC6763' target='https://www.rfc-editor.org/info/rfc6763'>
<front>
<title>DNS-Based Service Discovery</title>
<author initials='S.' surname='Cheshire' fullname='S. Cheshire'><organization /></author>
<author initials='M.' surname='Krochmal' fullname='M. Krochmal'><organization /></author>
<date year='2013' month='February' />
<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 initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<author initials='M.' surname='Ersue' fullname='M. Ersue'><organization /></author>
<author initials='A.' surname='Keranen' fullname='A. Keranen'><organization /></author>
<date year='2014' month='May' />
<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 initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></author>
<author initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></author>
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<date year='2014' month='June' />
<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='RFC7159' target='https://www.rfc-editor.org/info/rfc7159'>
<front>
<title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
<author initials='T.' surname='Bray' fullname='T. Bray' role='editor'><organization /></author>
<date year='2014' month='March' />
<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='RFC' value='7159'/>
<seriesInfo name='DOI' value='10.17487/RFC7159'/>
</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 initials='H.' surname='Tschofenig' fullname='H. Tschofenig' role='editor'><organization /></author>
<author initials='T.' surname='Fossati' fullname='T. Fossati'><organization /></author>
<date year='2016' month='July' />
<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='I-D.ietf-core-senml'>
<front>
<title>Media Types for Sensor Measurement Lists (SenML)</title>

<author initials='C' surname='Jennings' fullname='Cullen Jennings'>
    <organization />
</author>

<author initials='Z' surname='Shelby' fullname='Zach Shelby'>
    <organization />
</author>

<author initials='J' surname='Arkko' fullname='Jari Arkko'>
    <organization />
</author>

<author initials='A' surname='Keranen' fullname='Ari Keranen'>
    <organization />
</author>

<author initials='C' surname='Bormann' fullname='Carsten Bormann'>
    <organization />
</author>

<date month='July' day='3' year='2017' />

<abstract><t>This specification defines media types for representing simple sensor measurements and device parameters in the 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 this media type in protocols such as HTTP or CoAP to transport the measurements of the sensor or to be configured.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-core-senml-10' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-core-senml-10.txt' />
</reference>


<reference anchor="IANA-media-types" target="http://www.iana.org/assignments/media-types/media-types.xhtml">
  <front>
    <title>Media Types</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </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></organization>
    </author>
    <date year="n.d."/>
  </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></organization>
    </author>
    <date year="2013" month="February"/>
  </front>
</reference>




<reference  anchor='RFC7320' target='https://www.rfc-editor.org/info/rfc7320'>
<front>
<title>URI Design and Ownership</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<date year='2014' month='July' />
<abstract><t>Section 1.1.1 of RFC 3986 defines URI syntax as &quot;a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme.&quot;  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 URI substructure is inappropriate, because that essentially usurps ownership.  This document further describes this problematic practice and provides some acceptable alternatives for use in standards.</t></abstract>
</front>
<seriesInfo name='BCP' value='190'/>
<seriesInfo name='RFC' value='7320'/>
<seriesInfo name='DOI' value='10.17487/RFC7320'/>
</reference>



<reference  anchor='RFC6943' target='https://www.rfc-editor.org/info/rfc6943'>
<front>
<title>Issues in Identifier Comparison for Security Purposes</title>
<author initials='D.' surname='Thaler' fullname='D. Thaler' role='editor'><organization /></author>
<date year='2013' month='May' />
<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'>
<front>
<title>Publish-Subscribe Broker for the Constrained Application Protocol (CoAP)</title>

<author initials='M' surname='Koster' fullname='Michael Koster'>
    <organization />
</author>

<author initials='A' surname='Keranen' fullname='Ari Keranen'>
    <organization />
</author>

<author initials='J' surname='Jimenez' fullname='Jaime Jimenez'>
    <organization />
</author>

<date month='July' day='3' year='2017' />

<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.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-core-coap-pubsub-02' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-core-coap-pubsub-02.txt' />
</reference>



<reference anchor='I-D.irtf-t2trg-iot-seccons'>
<front>
<title>State-of-the-Art and Challenges for the Internet of Things Security</title>

<author initials='O' surname='Garcia-Morchon' fullname='Oscar Garcia-Morchon'>
    <organization />
</author>

<author initials='S' surname='Kumar' fullname='Sandeep Kumar'>
    <organization />
</author>

<author initials='M' surname='Sethi' fullname='Mohit Sethi'>
    <organization />
</author>

<date month='September' day='10' year='2017' />

<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 are well-recognized and many standardization steps for providing security have been taken, for example, the specification of Constrained Application Protocol (CoAP) over Datagram Transport Layer Security (DTLS).  However, security challenges still exist and there are some use cases that lack a suitable solution.  In this document, we first discuss the various stages in the lifecycle of a thing.  Next, we document the various 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 ensure roll out of secure IoT services.  This document is a product of the IRTF Thing-to-Thing Research Group (T2TRG).</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-irtf-t2trg-iot-seccons-05' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-irtf-t2trg-iot-seccons-05.txt' />
</reference>




    </references>


<section anchor="future-work" title="Future Work">

<t><list style="symbols">
  <t>Interface semantics: shared knowledge among system components (URI schemes, media types, relation types, well-known locations; see core-apps)</t>
  <t>Unreliable (best effort) communication, robust communication in network with high packet loss, 3-way commit</t>
  <t>Discuss directories, such as CoAP Resource Directory</t>
  <t>More information on how to design resources; choosing what is modeled as a resource, etc.</t>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
H4sIACv6ulkAA619a3Pb1rXod8/4P2CUD5FOSUqW7cR2ptOj2E7tEzv2teSb
zpnOdEByk0IFAiwASmbS3N9+13uvDUCy09YzTSkS2I+11/u1p9Pp/Xttl1fL
v+VlXYVnWdfswv17xbahj213enLy9OT0/r1lvajyDTywbPJVN70KTV6Fatqd
ds162oS2mxZ1Ny3zDj7ev7fIu2dZUa3q+/e2xbP797KsqxfPsq/3of0a/2r3
myasWvcNzFjVXbEqwtI/1zXFonNfLOrNNk++aeum6421qGEvLTwX3JfNahGW
bbcv8cuq/loWtQzb7hK+eQRfdEWHv354eX6x2pXZi9AW6ypb1U32uupCU4Uu
q1fZxWVRrdvsfN92YdPev5fP5024Hn+tvnDPNSF/ll2cXnz4M/yx6y7rBiFz
/94UIAXLP5tlPzJUcWkM7LOm8F/WzfpZ9hJA0rZ1JfAJAaHB+y66/bPsf+rm
Om8ZDkvc7Mnpo9MTAcyu6hp45oeiKuHQ8buwyYvyWZY3xUwO9b+DzDADaN+/
Zwt8Cwusr/OuXVzGFb7Nu+6yyNvkJ17nxavsf3cw1GWy0o9VcR2atujy0MGX
eduG7Bu3/PiKLP/5q+mTk6en6QbOb4rul9D0NnEla/hvQL1Z6C5/meFItoEf
Z9mrvOmuQlz+j2W+a923tHK/xOz7JmxClV3872u/jfd1263yxWX28OHJo0cn
cfn8eFz+i+npk4ePnyaL/3NoNnm1dwu/pAX8d/dLMYMV4A/371U1PNXBSoh+
Pvzw/OHTJ9/o529PH564zw/4M2AgfQDMZlQ+axaXRRcW3a7Jy+wcsb/NAGZZ
dxkUUQGlfwrdTd1cTed5G5bZeb3qbgBb/duh5XEj3sI/AeuHGeBTKJdAFvz9
ErjAsww4xwn/3QJCwVzADgBwl7MXs+xFAcfedLC9uppEeO9xMc/zsgDiqYp8
kr1urosqyD4fnz6y/X/z8NG39Pn19MWsCN1quqibgIyo3jWLMF0WDay7Bmgr
kE4ePaXPPz98Pvvw8vk0fCqmpycPHpw8fGCQfPz4afzsZnt8+uRkMDN+//TJ
E/v+m/jut988emCfnz5+as+cnpyOrLqe/x0WO23DAnC/2yfLvOw25WNc6KMH
J6c4GYKxhxjffPvNw4gMp0/i58en9vlBXMa3T08fjyyjDdWm5O/PfjqbbsKy
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
AA==

-->

</rfc>

