DataONE APIs
============

The DataONE infrastructure exposes application programming interfaces (APIs)
that support interaction between :term:`Member Node` and :term:`Coordinating
Node`, and to support development of applications that interact with the
DataONE infrastructure (elements of the :term:`Investigator Toolkit`).

.. figure:: images/componentMethods.png 
   :figwidth: 100%

   *Figure 1.* Overview of the system components and the methods being called
   by each component. An arrow to a target indicates the origin is calling the
   method on the target.

All services in DataONE are implemented using a RESTful approach with HTTPS
(or HTTP) as the transport protocol and XML for encoding messages. 

Member Nodes can expose different levels of functionality that equate to four
different tiers while participating in the DataONE network. The tiers and Member
Node APIs necessary to support are summarized in the table below. Also indicated
are the corresponding Coordinating Node APIs that are necessary for
functionality expressed for each tier.

.. list-table::
   :widths: 1 5 5 5
   :header-rows: 1
   
   * - Tier
     - Description
     - MN APIs
     - CN APIs
   * - 1
     - Public read, no authentication or access control of content. No content
       can be created through the DataONE service interfaces. The node can not
       act as a replication target.
     - :mod:`MNCore`, :mod:`MNRead`
     - :mod:`CNCore`, :mod:`CNRead`
   * - 2
     - Read and resolve with access control support.
     - Tier 1 + :mod:`MNAuthorization`
     - :mod:`CNAuthorization`, :mod:`CNRegister`, :mod:`CNIdentity`
   * - 3
     - Write (create, update, delete), possibly limited support for data types
     - Tier 2 + :mod:`MNStorage`
     - 
   * - 4
     - Replication target. The types of content supported by the node may be
       limited to a subset of object formats.
     - Tier 3 + :mod:`MNReplication`
     - :mod:`CNReplication`

The specific methods that must be implemented for each tier are listed in the
respective APIs.


**Contents**

.. toctree::
   :maxdepth: 1
   
   rest_comms
   MN_APIs
   CN_APIs
   ITK_APIs
   Version 1.0 Data Types <Types>
   Version 1.1 Data Types (extend v1.0) <Types11>
   Version 2.0 Data Types (extend v1.1) <Types2>
   Exceptions
   monitoring
   CN_internal_APIs