Network Working Group                                         A. Bierman
Internet-Draft                                                 YumaWorks
Intended status: Standards Track                            M. Bjorklund
Expires: August 3, 2015                                   Tail-f Systems
                                                               K. Watsen
                                                        Juniper Networks
                                                        January 30, 2015


                      RESTCONF Collection Resource
               draft-ietf-netconf-restconf-collection-00

Abstract

   This document describes a collection resource for the RESTCONF
   protocol to provide enhanced filtering features for the retrieval of
   data nodes with the GET method.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on August 3, 2015.

Copyright Notice

   Copyright (c) 2015 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of




Bierman, et al.          Expires August 3, 2015                 [Page 1]


Internet-Draft             RESTCONF Collection              January 2015


   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Terminology . . . . . . . . . . . . . . . . . . . . . . .   3
       1.1.1.  NETCONF . . . . . . . . . . . . . . . . . . . . . . .   3
       1.1.2.  HTTP  . . . . . . . . . . . . . . . . . . . . . . . .   4
       1.1.3.  YANG  . . . . . . . . . . . . . . . . . . . . . . . .   5
       1.1.4.  RESTCONF  . . . . . . . . . . . . . . . . . . . . . .   5
       1.1.5.  Terms . . . . . . . . . . . . . . . . . . . . . . . .   5
       1.1.6.  URI Template  . . . . . . . . . . . . . . . . . . . .   6
       1.1.7.  Tree Diagrams . . . . . . . . . . . . . . . . . . . .   6
     1.2.  Collection Resource Type  . . . . . . . . . . . . . . . .   6
     1.3.  Collection Resource . . . . . . . . . . . . . . . . . . .   6
     1.4.  Query Parameters  . . . . . . . . . . . . . . . . . . . .   7
       1.4.1.  Query Parameter URIs  . . . . . . . . . . . . . . . .   7
       1.4.2.  The "limit" Query Parameter . . . . . . . . . . . . .   8
       1.4.3.  The "offset" Query Parameter  . . . . . . . . . . . .   8
       1.4.4.  The "sort" Query Parameter  . . . . . . . . . . . . .   8
       1.4.5.  The "where" Query Parameter . . . . . . . . . . . . .   8
   2.  RESTCONF Collection module  . . . . . . . . . . . . . . . . .   9
   3.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  11
     3.1.  YANG Module Registry  . . . . . . . . . . . . . . . . . .  11
     3.2.  application/yang Media Sub Types  . . . . . . . . . . . .  11
     3.3.  NETCONF Capability URNs . . . . . . . . . . . . . . . . .  12
   4.  Security Considerations . . . . . . . . . . . . . . . . . . .  12
   5.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  13
   6.  Normative References  . . . . . . . . . . . . . . . . . . . .  13
   Appendix A.  Change Log . . . . . . . . . . . . . . . . . . . . .  14
     A.1.  restconf-03 to restconf-collection-00 . . . . . . . . . .  14
   Appendix B.  Open Issues  . . . . . . . . . . . . . . . . . . . .  14
   Appendix C.  RESTCONF Collection Examples . . . . . . . . . . . .  14
     C.1.  "limit" Parameter . . . . . . . . . . . . . . . . . . . .  14
     C.2.  "offset" Parameter  . . . . . . . . . . . . . . . . . . .  15
     C.3.  "sort" Parameter  . . . . . . . . . . . . . . . . . . . .  16
     C.4.  "where" Parameter . . . . . . . . . . . . . . . . . . . .  16
     C.5.  "TopN" Use Case . . . . . . . . . . . . . . . . . . . . .  16
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  16

1.  Introduction

   There is a need for standard mechanisms to control the filtering,
   sorting, and retrieval of data from RESTCONF devices.  A server may
   contain many instances of a particular YANG list.  Retrieval of the
   entire list at once can be extremely inefficient.




Bierman, et al.          Expires August 3, 2015                 [Page 2]


Internet-Draft             RESTCONF Collection              January 2015


   Pagination mechanisms are needed to allow a client to iterate through
   a large list, in a manner that is most efficient for the application.

   This document describes a "collection" resource that can be used to
   control retrieval of data nodes from a RESTCONF server.

     [FIXME: describe basic needs
     - target resource picks the list
     - 'fields' is a node-set XPath expression to pick
        the subtrees within the target resource
       to return
     - 'where' is a boolean XPath expression to pick which list
       instances are selected for return
     - 'sort' is ??? parameter to sort the selected list instances
     - 'limit' is the max number of list instances returned
     - 'offset' is the XPath position() of the list instance
        ??? pre or post access control ???
        ??? if post, then what if NACM changes while client
            retrieving
      ]

   Collection resources represent search results through the server
   data.  Data that the client is not authorized to receive according to
   the access control parameters configured in [RFC6536] MUST NOT be
   returned in RESTCONF response messages.

1.1.  Terminology

   The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in BCP
   14, [RFC2119].

   [FIXME: remove terms that are not used]

1.1.1.  NETCONF

   The following terms are defined in [RFC6241]:

   o  candidate configuration datastore

   o  client

   o  configuration data

   o  datastore

   o  configuration datastore



Bierman, et al.          Expires August 3, 2015                 [Page 3]


Internet-Draft             RESTCONF Collection              January 2015


   o  protocol operation

   o  running configuration datastore

   o  server

   o  startup configuration datastore

   o  state data

   o  user

1.1.2.  HTTP

   The following terms are defined in [RFC3986]:

   o  fragment

   o  path

   o  query

   The following terms are defined in [RFC7230]:

   o  header

   o  message-body

   o  Request-Line

   o  request URI

   The following terms are defined in [RFC7231]:

   o  method

   o  request

   o  resource

   The following terms are defined in [RFC7232]:

   o  entity tag








Bierman, et al.          Expires August 3, 2015                 [Page 4]


Internet-Draft             RESTCONF Collection              January 2015


1.1.3.  YANG

   The following terms are defined in [RFC6020]:

   o  container

   o  data node

   o  key leaf

   o  leaf

   o  leaf-list

   o  list

   o  presence container (or P-container)

   o  RPC operation (now called protocol operation)

   o  non-presence container (or NP-container)

   o  ordered-by system

   o  ordered-by user

1.1.4.  RESTCONF

   The following terms are defined in [I-D.ietf-netconf-restconf]:

   o  data resource

   o  target resource

   o  retrieval request

1.1.5.  Terms

   The following terms are used within this document:

   o  collection resource: a resource with the media type "application/
      yang.collection+xml" or "application/yang.collection+json".
      Contains a set of data resources.








Bierman, et al.          Expires August 3, 2015                 [Page 5]


Internet-Draft             RESTCONF Collection              January 2015


1.1.6.  URI Template

   Throughout this document, the URI template [RFC6570] syntax
   "{+restconf}" is used to refer to the RESTCONF API entry point
   outside of an example.  See the root resource discovery serction
   defined in [I-D.ietf-netconf-restconf] for details.

   All of the examples in this document assume "/restconf" as the
   discovered RESTCONF API root path.

1.1.7.  Tree Diagrams

   A simplified graphical representation of the data model is used in
   this document.  The meaning of the symbols in these diagrams is as
   follows:

   o  Brackets "[" and "]" enclose list keys.

   o  Abbreviations before data node names: "rw" means configuration
      data (read-write) and "ro" state data (read-only).

   o  Symbols after data node names: "?" means an optional node, "!"
      means a presence container, and "*" denotes a list and leaf-list.

   o  Parentheses enclose choice and case nodes, and case nodes are also
      marked with a colon (":").

   o  Ellipsis ("...") stands for contents of subtrees that are not
      shown.

1.2.  Collection Resource Type

   The following resource type are defined in this document:

               +------------+-----------------------------+
               | Resource   | Media Type                  |
               +------------+-----------------------------+
               | Collection | application/yang.collection |
               +------------+-----------------------------+

                           RESTCONF Media Types

1.3.  Collection Resource

   A collection resource contains a set of data resources.  It is used
   to represent a all instances or a subset of all instances in a YANG
   list or leaf-list.




Bierman, et al.          Expires August 3, 2015                 [Page 6]


Internet-Draft             RESTCONF Collection              January 2015


   A collection resource can be retrieved with the GET method,
   optionally with the query parameters "limit" (Section 1.4.2) and
   "offset" (Section 1.4.3).

   The "ietf-restconf-collection" YANG module contains the "application/
   yang.collection" restconf-media-type extension which specifies the
   syntax and semantics of a "collection" media type.

1.4.  Query Parameters

   Each RESTCONF operation allows zero or more query parameters to be
   present in the request URI.  The following query parameters are
   defined for RESTCONF collection resources.

   +--------+---------+------------------------------------------------+
   | Name   | Methods | Description                                    |
   +--------+---------+------------------------------------------------+
   | limit  | GET     | Number of entries to return for collection     |
   |        |         | resources                                      |
   | offset | GET     | Starting point for collection resources        |
   | sort   | GET     | Sorting criteria for collection resources      |
   | where  | GET     | Boolean filter to select data instances for a  |
   |        |         | collection resource                            |
   +--------+---------+------------------------------------------------+

                         RESTCONF Query Parameters

   Query parameters can be given in any order.  Each parameter can
   appear at most once in a request URI.  A default value may apply if
   the parameter is missing.

   Refer to Appendix C for examples of query parameter usage.

   If vendors define additional query parameters, they SHOULD use a
   prefix (such as the enterprise or organization name) for query
   parameter names in order to avoid collisions with other parameters.

1.4.1.  Query Parameter URIs

   A new set of RESTCONF Capability URNs are defined to identify the
   specific query parameters supported by the server.










Bierman, et al.          Expires August 3, 2015                 [Page 7]


Internet-Draft             RESTCONF Collection              January 2015


       +------+----------------------------------------------------+
       | Name | URI                                                |
       +------+----------------------------------------------------+
       | page | urn:ietf:params:restconf:capability:page:1.0       |
       | page | urn:ietf:params:restconf:capability:page-xpath:1.0 |
       +------+----------------------------------------------------+

                       RESTCONF Query Parameter URIs

1.4.2.  The "limit" Query Parameter

   The "limit" parameter is used to restrict the number of data
   resources to return in response to GET requests on collection
   resources.

   The value of the "limit" parameter is either an integer greater than
   or equal to 1, or the string "unbounded".  The string "unbounded" is
   the default value.

   If the server includes the "page" query parameter URI in the
   "capability" leaf-list in the "ietf-restconf-monitoring" module
   defined in [I-D.ietf-netconf-restconf], then the "limit" query
   parameter MUST be supported.

1.4.3.  The "offset" Query Parameter

   The "offset" parameter is used to specify the first data resource to
   return in response to GET requests on collection resources.
   Resources instances are numbered with consecutive integers from 1 to
   the number of resource instances.

   The value of the "offset" parameter is an integer greater than or
   equal to 1.  The default value is 1.

   If the server includes the "page" query parameter URI in the
   "capability" leaf-list in "ietf-restconf-monitoring" module defined
   in [I-D.ietf-netconf-restconf], then the "offset" query parameter
   MUST be supported.

1.4.4.  The "sort" Query Parameter

      [FIXME]

1.4.5.  The "where" Query Parameter

      [FIXME]





Bierman, et al.          Expires August 3, 2015                 [Page 8]


Internet-Draft             RESTCONF Collection              January 2015


2.  RESTCONF Collection module

   The "ietf-restconf-collection" module defines conceptual definitions
   within groupings, which are not meant to be implemented as datastore
   contents by a server.

   The "ietf-restconf" module from [I-D.ietf-netconf-restconf] is used
   by this module for the 'restconf-media-type' extension definition.

   RFC Ed.: update the date below with the date of RFC publication and
   remove this note.

   <CODE BEGINS> file "ietf-restconf-collection@2015-01-30.yang"

   module ietf-restconf-collection {
     namespace "urn:ietf:params:xml:ns:yang:ietf-restconf-collection";
     prefix "rcoll";

     import ietf-restconf {
       prefix rc;
       revision-date 2015-01-30;
     }

     organization
       "IETF NETCONF (Network Configuration) Working Group";

     contact
       "WG Web:   <http://tools.ietf.org/wg/netconf/>
        WG List:  <mailto:netconf@ietf.org>

        WG Chair: Mehmet Ersue
                  <mailto:mehmet.ersue@nsn.com>

        WG Chair: Mahesh Jethanandani
                  <mailto:mjethanandani@gmail.com>

        Editor:   Andy Bierman
                  <mailto:andy@yumaworks.com>

        Editor:   Martin Bjorklund
                  <mailto:mbj@tail-f.com>

        Editor:   Kent Watsen
                  <mailto:kwatsen@juniper.net>";

     description
       "This module contains conceptual YANG specifications
        for the RESTCONF Collection resource type.



Bierman, et al.          Expires August 3, 2015                 [Page 9]


Internet-Draft             RESTCONF Collection              January 2015


        Note that the YANG definitions within this module do not
        represent configuration data of any kind.
        The YANG grouping statements provide a normative syntax
        for XML and JSON message encoding purposes.

        Copyright (c) 2015 IETF Trust and the persons identified as
        authors of the code.  All rights reserved.

        Redistribution and use in source and binary forms, with or
        without modification, is permitted pursuant to, and subject
        to the license terms contained in, the Simplified BSD License
        set forth in Section 4.c of the IETF Trust's Legal Provisions
        Relating to IETF Documents
        (http://trustee.ietf.org/license-info).

        This version of this YANG module is part of RFC XXXX; see
        the RFC itself for full legal notices.";

     // RFC Ed.: replace XXXX with actual RFC number and remove this
     // note.

     // RFC Ed.: remove this note
     // Note: extracted from
     // draft-ietf-netconf-restconf-collection-00.txt

     // RFC Ed.: update the date below with the date of RFC publication
     // and remove this note.
     revision 2015-01-30 {
       description
         "Initial revision.";
       reference
         "RFC XXXX: RESTCONF Collection Resource.";
     }

     rc:restconf-media-type "application/yang.collection" {
       uses collection;
     }

     grouping collection {
       description
         "Conceptual container representing the
          application/yang.collection resource type.";

       container collection {
         description
           "Container representing the application/yang.collection
            resource type.";
       }



Bierman, et al.          Expires August 3, 2015                [Page 10]


Internet-Draft             RESTCONF Collection              January 2015


     } // grouping collection

   }

   <CODE ENDS>

3.  IANA Considerations

3.1.  YANG Module Registry

   This document registers three URIs in the IETF XML registry
   [RFC3688].  Following the format in RFC 3688, the following
   registration is requested to be made.

        URI: urn:ietf:params:xml:ns:yang:ietf-restconf-collection
        Registrant Contact: The NETMOD WG of the IETF.
        XML: N/A, the requested URI is an XML namespace.

   This document registers three YANG modules in the YANG Module Names
   registry [RFC6020].

     name:         ietf-restconf-collection
     namespace:    urn:ietf:params:xml:ns:yang:ietf-restconf-collection
     prefix:       rcoll
     // RFC Ed.: replace XXXX with RFC number and remove this note
     reference:    RFC XXXX

3.2.  application/yang Media Sub Types

   The parent MIME media type for RESTCONF resources is application/
   yang, which is defined in [RFC6020].  This document defines the
   following sub-types for this media type.



















Bierman, et al.          Expires August 3, 2015                [Page 11]


Internet-Draft             RESTCONF Collection              January 2015


      - collection

      Type name: application

      Subtype name: yang.xxx

      Required parameters: TBD

      Optional parameters: TBD

      Encoding considerations: TBD

      Security considerations: TBD

      Interoperability considerations: TBD

      // RFC Ed.: replace XXXX with RFC number and remove this note
      Published specification: RFC XXXX

3.3.  NETCONF Capability URNs

   This document registers two capability identifiers in "RESTCONF
   Protocol Capability URNs" registry

     Index
        Capability Identifier
     ------------------------

     :page
         urn:ietf:params:restconf:capability:page:1.0

     :page-xpath
         urn:ietf:params:restconf:capability:page-xpath:1.0

4.  Security Considerations

   This section provides security considerations for the resources
   defined by the RESTCONF protocol.  Security considerations for HTTPS
   are defined in [RFC2818].  Security considerations for the content
   manipulated by RESTCONF can be found in the documents defining data
   models.

   All security considerations that apply to resources defined in
   [I-D.ietf-netconf-restconf] also apply to the collection resource.







Bierman, et al.          Expires August 3, 2015                [Page 12]


Internet-Draft             RESTCONF Collection              January 2015


5.  Acknowledgements

   The authors would like to thank for following for lively discussions
   on list and in the halls (ordered by last name): Rex Fernando

6.  Normative References

   [I-D.ietf-netconf-restconf]
              Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
              Protocol", draft-ietf-netconf-restconf-04 (work in
              progress), January 2015.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2818]  Rescorla, E., "The IETF XML Registry", RFC 2818, May 2000.

   [RFC3688]  Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
              January 2004.

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66, RFC
              3986, January 2005.

   [RFC6020]  Bjorklund, M., "YANG - A Data Modeling Language for the
              Network Configuration Protocol (NETCONF)", RFC 6020,
              October 2010.

   [RFC6241]  Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
              and A. Bierman, Ed., "Network Configuration Protocol
              (NETCONF)", RFC 6241, June 2011.

   [RFC6536]  Bierman, A. and M. Bjorklund, "Network Configuration
              Protocol (NETCONF) Access Control Model", RFC 6536, March
              2012.

   [RFC6570]  Gregorio, J., Fielding, R., Hadley, M., Nottingham, M.,
              and D. Orchard, "URI Template", RFC 6570, March 2012.

   [RFC7230]  Fielding, R. and J. Reschke, "Hypertext Transfer Protocol
              (HTTP/1.1): Message Syntax and Routing", RFC 7230, June
              2014.

   [RFC7231]  Fielding, R. and J. Reschke, "Hypertext Transfer Protocol
              (HTTP/1.1): Semantics and Content", RFC 7231, June 2014.

   [RFC7232]  Fielding, R. and J. Reschke, "Hypertext Transfer Protocol
              (HTTP/1.1): Conditional Requests", RFC 7232, June 2014.



Bierman, et al.          Expires August 3, 2015                [Page 13]


Internet-Draft             RESTCONF Collection              January 2015


Appendix A.  Change Log

       -- RFC Ed.: remove this section before publication.

   The RESTCONF issue tracker can be found here: https://github.com/
   netconf-wg/restconf/issues

A.1.  restconf-03 to restconf-collection-00

   o  Moved collection resource from RESTCONF to a new document

Appendix B.  Open Issues

       -- RFC Ed.: remove this section before publication.

   The RESTCONF Collection issues are tracked on github.com:

      https://github.com/netconf-wg/restconf/issues

Appendix C.  RESTCONF Collection Examples

   The examples within this document use the "example-jukebox" YANG
   module defined in [I-D.ietf-netconf-restconf].

C.1.  "limit" Parameter

   In this example, the client requests the first two "album" resources
   for a given artist:

   Request from client:

      GET /restconf/data/example-jukebox:jukebox/
         library/artist=Foo%20Fighters/album/?limit=2   HTTP/1.1
      Host: example.com
      Content-Type: application/yang.collection+xml

   Response from server:

      HTTP/1.1 200 OK
      Date: Mon, 23 Apr 2012 17:01:00 GMT
      Server: example-server
      Cache-Control: no-cache
      Pragma: no-cache
      Content-Type: application/yang.collection+xml







Bierman, et al.          Expires August 3, 2015                [Page 14]


Internet-Draft             RESTCONF Collection              January 2015


      <collection xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"
        <album xmlns="http://example.com/ns/example-jukebox">
          <name>Foo Fighters</name>
          <year>1995</year>
          ...
        </album>
        <album xmlns="http://example.com/ns/example-jukebox">
          <name>The Color and the Shape</name>
          <year>1997</year>
          ...
        </album>
      </collection>

C.2.  "offset" Parameter

   In this example, the client requests the next two albums, i.e., two
   albums starting from two.

   Request from client:

      GET /restconf/data/example-jukebox:jukebox/
         library/artist=Foo%20Fighters/album/?limit=2&offset=2  HTTP/1.1
      Host: example.com
      Content-Type: application/yang.collection+json

   Response from server:

























Bierman, et al.          Expires August 3, 2015                [Page 15]


Internet-Draft             RESTCONF Collection              January 2015


      HTTP/1.1 200 OK
      Date: Mon, 23 Apr 2012 17:02:00 GMT
      Server: example-server
      Cache-Control: no-cache
      Pragma: no-cache
      Content-Type: application/yang.collection+json

      {
        "collection": {
          "example-jukebox:album" : [
            {
              "year" : 1999,
              "name" : "There is Nothing Left to Loose",
              ...
            },
            {
             "year" : 2002,
             "name" : "One by One",
             ...
            }
          ]
        }
      }

C.3.  "sort" Parameter

      [FIXME]

C.4.  "where" Parameter

      [FIXME]

C.5.  "TopN" Use Case

     [FIXME: use-case using all parameters for topN for some list]

Authors' Addresses

   Andy Bierman
   YumaWorks

   Email: andy@yumaworks.com


   Martin Bjorklund
   Tail-f Systems

   Email: mbj@tail-f.com



Bierman, et al.          Expires August 3, 2015                [Page 16]


Internet-Draft             RESTCONF Collection              January 2015


   Kent Watsen
   Juniper Networks

   Email: kwatsen@juniper.net















































Bierman, et al.          Expires August 3, 2015                [Page 17]