Internet Engineering Task Force                          P. Hallam-Baker
Internet-Draft                                         Comodo Group Inc.
Intended status: Standards Track                           July 31, 2012
Expires: February 1, 2013


Simple Cloud Interoperable Jason Encoding for REST Web Services (SCIJER)
                                Bindings
                      draft-hallambaker-scijer-00

Abstract

   SCIJER (pronounced skyjer) specifies a mapping of data types to
   JavaScript Object Notation (JSON) encoding.  The JSON specification
   defines encodings for integers, strings, arrays and objects.  This
   document specifies a mapping between JSON encoding and an extended
   set of types.

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 February 1, 2013.

Copyright Notice

   Copyright (c) 2012 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
   the Trust Legal Provisions and are provided without warranty as



Hallam-Baker            Expires February 1, 2013                [Page 1]


Internet-Draft             SCIJER JSON BINDING                 July 2012


   described in the Simplified BSD License.


Table of Contents

   1.  Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . 3
     1.1.  Requirements Language . . . . . . . . . . . . . . . . . . . 3
     1.2.  Defined Terms . . . . . . . . . . . . . . . . . . . . . . . 3
   2.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . . . 3
   3.  Bindings  . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
     3.1.  Object  . . . . . . . . . . . . . . . . . . . . . . . . . . 3
     3.2.  Serializable  . . . . . . . . . . . . . . . . . . . . . . . 3
       3.2.1.  Array . . . . . . . . . . . . . . . . . . . . . . . . . 3
       3.2.2.  List  . . . . . . . . . . . . . . . . . . . . . . . . . 4
     3.3.  Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . 4
     3.4.  Integer . . . . . . . . . . . . . . . . . . . . . . . . . . 4
     3.5.  Floating Point  . . . . . . . . . . . . . . . . . . . . . . 4
     3.6.  String  . . . . . . . . . . . . . . . . . . . . . . . . . . 4
       3.6.1.  URI . . . . . . . . . . . . . . . . . . . . . . . . . . 5
       3.6.2.  Label . . . . . . . . . . . . . . . . . . . . . . . . . 5
       3.6.3.  Name  . . . . . . . . . . . . . . . . . . . . . . . . . 5
     3.7.  Enumeration . . . . . . . . . . . . . . . . . . . . . . . . 5
     3.8.  Time  . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
       3.8.1.  DateTime  . . . . . . . . . . . . . . . . . . . . . . . 6
       3.8.2.  ElapsedTime . . . . . . . . . . . . . . . . . . . . . . 6
     3.9.  Binary  . . . . . . . . . . . . . . . . . . . . . . . . . . 6
     3.10.   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
   4.  Security Considerations . . . . . . . . . . . . . . . . . . . . 7
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 7
   6.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . 7
   7.  Normative References  . . . . . . . . . . . . . . . . . . . . . 7
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . . . 7



















Hallam-Baker            Expires February 1, 2013                [Page 2]


Internet-Draft             SCIJER JSON BINDING                 July 2012


1.  Definitions

1.1.  Requirements Language

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

1.2.  Defined Terms

   The following terms are used in this document:




2.  Introduction

   JSON is a format for encoding data structures in UTF8 text format
   with similar capabilities to XML and ASN.1 but with lower coding
   overhead.  Unlike XML and ASN.1, JSON does not have a schema
   language.

   This draft defines a mapping between JSON data types and programming
   language types that MAY be used as the basis for a schema language
   definition.


3.  Bindings

   Specify conversions between JSON encoding and C, C# and Java types.

3.1.  Object

   JSON

   C

   C#

   Java

3.2.  Serializable

3.2.1.  Array







Hallam-Baker            Expires February 1, 2013                [Page 3]


Internet-Draft             SCIJER JSON BINDING                 July 2012


   JSON

   C

   C#

   Java

3.2.2.  List

   JSON

   C

   C#

   Java

3.3.  Boolean

   JSON  true | false

   C  int

   C# bool

   C# boolean

3.4.  Integer

   JSON  number without decimal point

   C, C#, Java  int or long

3.5.  Floating Point

   JSON  number with decimal point

   C, C#, Java  float or double

3.6.  String

   The String type maps to the JSON string encoding.  The following
   subtypes are defined to represent commonly used syntactic
   restrictions.






Hallam-Baker            Expires February 1, 2013                [Page 4]


Internet-Draft             SCIJER JSON BINDING                 July 2012


   JSON  String encoding

   C  char * [NB must use appropriate wrappers to encode/decode UTF8]

   C#, Java  String

      URI

      Label

      Name

3.6.1.  URI

   A URI is a string that contains a URI as specified in [RFC3986].

3.6.2.  Label

   A label is a string that MUST NOT contain any ASCII character other
   than digits (0-9), alphabetic (a-z, A-Z), underscore or dash.  All
   other UNICODE characters are permitted.

   The Label type provide a means of avoiding content injection attacks
   by ensuring that a field does not contain characters commonly used as
   control characters in scripting languages.

3.6.3.  Name

   A Name is a sequence of Labels separated by period characters '.'.

   Note that the syntactic restriction of a Name is not exactly the same
   as the restriction on a DNS address.

3.7.  Enumeration

   An enumeration is encoded as a Label.

3.8.  Time

   SSCIJER supports two encodings

   DateTime  A string encoded in [RFC3339] format.  This provides a
      human readable representation.

   ElapsedTime  A number that represents the number of seconds that have
      elapsed since January 1, 0001 at 00:00:00.000 in the Gregorian
      calendar.  Decimals MAY be used to represent time intervals of
      less than a second.



Hallam-Baker            Expires February 1, 2013                [Page 5]


Internet-Draft             SCIJER JSON BINDING                 July 2012


   Conversion between the two encodings MUST be informed by the times at
   which leap seconds were introduced into the UTC coding.  This creates
   a challenge in the case that a device only has access to time in one
   form but not the other.

   In order to address this problem, implementations MUST accept time
   values encoded in either format and SHOULD emit the encoding
   specified in the schema.

3.8.1.  DateTime

   JSON  String [Encoded in [RFC3339] format.]

   C  System dependent

   C# DateTime

   Java  Date

   Represents a date and time in the Gregorian callendar using the
   format described in [RFC3339].

3.8.2.  ElapsedTime

   JSON  Number

   C  System dependent

   C# DateTime

   Java  Date

   A number that represents the number of seconds that have elapsed
   since January 1, 0001 at 00:00:00.000 in the Gregorian calendar.
   Decimals MAY be used to represent time intervals of less than a
   second.

3.9.  Binary

   JSON  String [Base64 encoding of binary data]

   C  {unsigned char *, length}

   C#, Java  byte []

3.10.





Hallam-Baker            Expires February 1, 2013                [Page 6]


Internet-Draft             SCIJER JSON BINDING                 July 2012


4.  Security Considerations


5.  IANA Considerations


6.  Acknowledgements

   The name of this draft was inspired by Mark Nottingham.


7.  Normative References

   [RFC1035]  Mockapetris, P., "Domain names - implementation and
              specification", STD 13, RFC 1035, November 1987.

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

   [RFC3339]  Klyne, G., Ed. and C. Newman, "Date and Time on the
              Internet: Timestamps", RFC 3339, July 2002.

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


Author's Address

   Phillip Hallam-Baker
   Comodo Group Inc.

   Email: philliph@comodo.com


















Hallam-Baker            Expires February 1, 2013                [Page 7]