€cdocutils.nodes document q)q}q(U nametypesq}q(Xmember node tiersqNXproposal for api refactoringqNuUsubstitution_defsq}q Uparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startqKUnameidsq}q(hUmember-node-tiersqhUproposal-for-api-refactoringquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqXj/var/lib/jenkins/jobs/API_Documentation_trunk/workspace/api-documentation/source/notes/api_refactoring.txtqUtagnameqUsectionqU attributesq}q(Udupnamesq ]Uclassesq!]Ubackrefsq"]Uidsq#]q$haUnamesq%]q&hauUlineq'KUdocumentq(hh]q)(cdocutils.nodes title q*)q+}q,(hXProposal for API Refactoringq-hhhhhUtitleq.h}q/(h ]h!]h"]h#]h%]uh'Kh(hh]q0cdocutils.nodes Text q1XProposal for API Refactoringq2…q3}q4(hh-hh+ubaubcdocutils.nodes paragraph q5)q6}q7(hXThe DataONE service APIs currently contain methods that are grouped by the general category of functionality provided. For example, the CRUD API contains methods that support create, read, update, and delete operations against the Member Nodes. Such a grouping is convenient for development activities, however does not relate well to the overall functionality that must be expressed by a Member Node to participate at different "tiers" within the DataONE federation. A particular MN might operate in a read-only manner and so must express only a small selection of methods pulled from several different APIs as they are currently defined.q8hhhhhU paragraphq9h}q:(h ]h!]h"]h#]h%]uh'Kh(hh]q;h1XThe DataONE service APIs currently contain methods that are grouped by the general category of functionality provided. For example, the CRUD API contains methods that support create, read, update, and delete operations against the Member Nodes. Such a grouping is convenient for development activities, however does not relate well to the overall functionality that must be expressed by a Member Node to participate at different "tiers" within the DataONE federation. A particular MN might operate in a read-only manner and so must express only a small selection of methods pulled from several different APIs as they are currently defined.q<…q=}q>(hh8hh6ubaubh5)q?}q@(hX+Further complicating the division of methods between APIs is the need to support versioning of services. Current versioning operates across the entire set of APIs and thus requires that a service implements all methods of a single version. A more granular approach would versioning at the API level, so that in many cases (where there are no inter-dependencies) it will be possible to update a set of methods without affecting other methods, and so service update on a particular node can be more progressive, and so less disruptive to ongoing operations.qAhhhhhh9h}qB(h ]h!]h"]h#]h%]uh'Kh(hh]qCh1X+Further complicating the division of methods between APIs is the need to support versioning of services. Current versioning operates across the entire set of APIs and thus requires that a service implements all methods of a single version. A more granular approach would versioning at the API level, so that in many cases (where there are no inter-dependencies) it will be possible to update a set of methods without affecting other methods, and so service update on a particular node can be more progressive, and so less disruptive to ongoing operations.qD…qE}qF(hhAhh?ubaubh5)qG}qH(hX¤Grouping the methods into API definitions more aligned with the functionality that should be exposed by different classes or tiers of nodes should also simplify the overall process of node service updates since the entire group of methods can be updated rather than working with methods pulled from different method groups of different versions to define the service that must be implemented by a particular Member Node.qIhhhhhh9h}qJ(h ]h!]h"]h#]h%]uh'Kh(hh]qKh1X¤Grouping the methods into API definitions more aligned with the functionality that should be exposed by different classes or tiers of nodes should also simplify the overall process of node service updates since the entire group of methods can be updated rather than working with methods pulled from different method groups of different versions to define the service that must be implemented by a particular Member Node.qL…qM}qN(hhIhhGubaubh5)qO}qP(hX£This document outlines a strategy for refactoring the APIs to better align with the tiers of Member Nodes that are likely to participate in the DataONE federation.qQhhhhhh9h}qR(h ]h!]h"]h#]h%]uh'Kh(hh]qSh1X£This document outlines a strategy for refactoring the APIs to better align with the tiers of Member Nodes that are likely to participate in the DataONE federation.qT…qU}qV(hhQhhOubaubh)qW}qX(hUhhhhhhh}qY(h ]h!]h"]h#]qZhah%]q[hauh'K$h(hh]q\(h*)q]}q^(hXMember Node Tiersq_hhWhhhh.h}q`(h ]h!]h"]h#]h%]uh'K$h(hh]qah1XMember Node Tiersqb…qc}qd(hh_hh]ubaubh5)qe}qf(hXGFive tiers of Member Node functionality have currently been identified:qghhWhhhh9h}qh(h ]h!]h"]h#]h%]uh'K&h(hh]qih1XGFive tiers of Member Node functionality have currently been identified:qj…qk}ql(hhghheubaubcdocutils.nodes field_list qm)qn}qo(hUhhWhhhU field_listqph}qq(h ]h!]h"]h#]h%]uh'K(h(hh]qr(cdocutils.nodes field qs)qt}qu(hUhhnhhhUfieldqvh}qw(h ]h!]h"]h#]h%]uh'K(h(hh]qx(cdocutils.nodes field_name qy)qz}q{(hXTier 1q|hhthhhU field_nameq}h}q~(h ]h!]h"]h#]h%]uh'Kh]qh1XTier 1q€…q}q‚(hh|hhzubaubcdocutils.nodes field_body qƒ)q„}q…(hXPublic read, no Authn/Authzq†h}q‡(h ]h!]h"]h#]h%]uhhth]qˆh5)q‰}qŠ(hh†hh„hhhh9h}q‹(h ]h!]h"]h#]h%]uh'K(h]qŒh1XPublic read, no Authn/Authzq…qŽ}q(hh†hh‰ubaubahU field_bodyqubeubhs)q‘}q’(hUhhnhhhhvh}q“(h ]h!]h"]h#]h%]uh'K)h(hh]q”(hy)q•}q–(hXTier 2q—hh‘hhhh}h}q˜(h ]h!]h"]h#]h%]uh'Kh]q™h1XTier 2qš…q›}qœ(hh—hh•ubaubhƒ)q}qž(hXRead/Resolve with Authn/AuthzqŸh}q (h ]h!]h"]h#]h%]uhh‘h]q¡h5)q¢}q£(hhŸhhhhhh9h}q¤(h ]h!]h"]h#]h%]uh'K)h]q¥h1XRead/Resolve with Authn/Authzq¦…q§}q¨(hhŸhh¢ubaubahhubeubhs)q©}qª(hUhhnhhhhvh}q«(h ]h!]h"]h#]h%]uh'K*h(hh]q¬(hy)q­}q®(hXTier 3q¯hh©hhhh}h}q°(h ]h!]h"]h#]h%]uh'Kh]q±h1XTier 3q²…q³}q´(hh¯hh­ubaubhƒ)qµ}q¶(hXGWrite (create, update, delete), possibly limited support for data typesq·h}q¸(h ]h!]h"]h#]h%]uhh©h]q¹h5)qº}q»(hh·hhµhhhh9h}q¼(h ]h!]h"]h#]h%]uh'K*h]q½h1XGWrite (create, update, delete), possibly limited support for data typesq¾…q¿}qÀ(hh·hhºubaubahhubeubhs)qÁ}qÂ(hUhhnhhhhvh}qÃ(h ]h!]h"]h#]h%]uh'K+h(hh]qÄ(hy)qÅ}qÆ(hXTier 4qÇhhÁhhhh}h}qÈ(h ]h!]h"]h#]h%]uh'Kh]qÉh1XTier 4qÊ…qË}qÌ(hhÇhhÅubaubhƒ)qÍ}qÎ(hX1Limited Replication target (specified data types)qÏh}qÐ(h ]h!]h"]h#]h%]uhhÁh]qÑh5)qÒ}qÓ(hhÏhhÍhhhh9h}qÔ(h ]h!]h"]h#]h%]uh'K+h]qÕh1X1Limited Replication target (specified data types)qÖ…q×}qØ(hhÏhhÒubaubahhubeubhs)qÙ}qÚ(hUhhnhhhhvh}qÛ(h ]h!]h"]h#]h%]uh'K,h(hh]qÜ(hy)qÝ}qÞ(hXTier 5qßhhÙhhhh}h}qà(h ]h!]h"]h#]h%]uh'Kh]qáh1XTier 5qâ…qã}qä(hhßhhÝubaubhƒ)qå}qæ(hX#Replication target, any data types h}qç(h ]h!]h"]h#]h%]uhhÙh]qèh5)qé}qê(hX"Replication target, any data typesqëhhåhhhh9h}qì(h ]h!]h"]h#]h%]uh'K,h]qíh1X"Replication target, any data typesqî…qï}qð(hhëhhéubaubahhubeubeubh5)qñ}qò(hXMThe methods that must be supported by each of these are indicated in Table 1.qóhhWhhhh9h}qô(h ]h!]h"]h#]h%]uh'K.h(hh]qõh1XMThe methods that must be supported by each of these are indicated in Table 1.qö…q÷}qø(hhóhhñubaubcdocutils.nodes table qù)qú}qû(hUhhWhNhUtableqüh}qý(h ]h!]h"]h#]qþUid1qÿah%]uh'Nh(hh]r(h*)r}r(hX**Table 1.** DataONE service methods supported at different tiers of Member Node functionality. (*)Authentication and Authorization APIs are under active development and may change from the specifications listed here.h}r(h ]h!]h"]h#]h%]uhhúh]r(cdocutils.nodes strong r)r}r(hX **Table 1.**h}r(h ]h!]h"]h#]h%]uhjh]r h1XTable 1.r …r }r (hUhjubahUstrongr ubh1Xô DataONE service methods supported at different tiers of Member Node functionality. (*)Authentication and Authorization APIs are under active development and may change from the specifications listed here.r…r}r(hXô DataONE service methods supported at different tiers of Member Node functionality. (*)Authentication and Authorization APIs are under active development and may change from the specifications listed here.hjubehh.ubcdocutils.nodes tgroup r)r}r(hUh}r(h#]h"]h ]h!]h%]UcolsKuhhúh]r(cdocutils.nodes colspec r)r}r(hUh}r(h#]h"]h ]h!]h%]UcolwidthKuhjh]hUcolspecrubj)r}r(hUh}r(h#]h"]h ]h!]h%]UcolwidthKuhjh]hjubj)r}r(hUh}r (h#]h"]h ]h!]h%]UcolwidthKuhjh]hjubj)r!}r"(hUh}r#(h#]h"]h ]h!]h%]UcolwidthK uhjh]hjubcdocutils.nodes thead r$)r%}r&(hUh}r'(h ]h!]h"]h#]h%]uhjh]r(cdocutils.nodes row r))r*}r+(hUh}r,(h ]h!]h"]h#]h%]uhj%h]r-(cdocutils.nodes entry r.)r/}r0(hUh}r1(h ]h!]h"]h#]h%]uhj*h]r2h5)r3}r4(hXTierr5hj/hhhh9h}r6(h ]h!]h"]h#]h%]uh'K8h]r7h1XTierr8…r9}r:(hj5hj3ubaubahUentryr;ubj.)r<}r=(hUh}r>(h ]h!]h"]h#]h%]uhj*h]r?h5)r@}rA(hX Existing APIsrBhj<hhhh9h}rC(h ]h!]h"]h#]h%]uh'K9h]rDh1X Existing APIsrE…rF}rG(hjBhj@ubaubahj;ubj.)rH}rI(hUh}rJ(h ]h!]h"]h#]h%]uhj*h]rKh5)rL}rM(hX Proposed APIrNhjHhhhh9h}rO(h ]h!]h"]h#]h%]uh'K:h]rPh1X Proposed APIrQ…rR}rS(hjNhjLubaubahj;ubj.)rT}rU(hUh}rV(h ]h!]h"]h#]h%]uhj*h]rWh5)rX}rY(hXMethodsrZhjThhhh9h}r[(h ]h!]h"]h#]h%]uh'K;h]r\h1XMethodsr]…r^}r_(hjZhjXubaubahj;ubehUrowr`ubahUtheadraubcdocutils.nodes tbody rb)rc}rd(hUh}re(h ]h!]h"]h#]h%]uhjh]rf(j))rg}rh(hUh}ri(h ]h!]h"]h#]h%]uhjch]rj(j.)rk}rl(hUh}rm(h ]h!]h"]h#]h%]uhjgh]rnh5)ro}rp(hXCorerqhjkhhhh9h}rr(h ]h!]h"]h#]h%]uh'Kh]r‹h1XMN_corerŒ…r}rŽ(hj‰hj‡ubaubahj;ubj.)r}r(hUh}r‘(h ]h!]h"]h#]h%]uhjgh]r’h5)r“}r”(hXbping, getCapabilities, getStatus, [getObjectStatistics], [getOperationStatistics], [getLogRecords]r•hjhhhh9h}r–(h ]h!]h"]h#]h%]uh'K?h]r—h1Xbping, getCapabilities, getStatus, [getObjectStatistics], [getOperationStatistics], [getLogRecords]r˜…r™}rš(hj•hj“ubaubahj;ubehj`ubj))r›}rœ(hUh}r(h ]h!]h"]h#]h%]uhjch]rž(j.)rŸ}r (hUh}r¡(h ]h!]h"]h#]h%]uhj›h]r¢h5)r£}r¤(hXTier 1r¥hjŸhhhh9h}r¦(h ]h!]h"]h#]h%]uh'KAh]r§h1XTier 1r¨…r©}rª(hj¥hj£ubaubahj;ubj.)r«}r¬(hUh}r­(h ]h!]h"]h#]h%]uhj›h]r®h5)r¯}r°(hX"MN_crud, MN_replication, MN_healthr±hj«hhhh9h}r²(h ]h!]h"]h#]h%]uh'KBh]r³h1X"MN_crud, MN_replication, MN_healthr´…rµ}r¶(hj±hj¯ubaubahj;ubj.)r·}r¸(hUh}r¹(h ]h!]h"]h#]h%]uhj›h]rºh5)r»}r¼(hXMN_readr½hj·hhhh9h}r¾(h ]h!]h"]h#]h%]uh'KCh]r¿h1XMN_readrÀ…rÁ}rÂ(hj½hj»ubaubahj;ubj.)rÃ}rÄ(hUh}rÅ(h ]h!]h"]h#]h%]uhj›h]rÆh5)rÇ}rÈ(hXQget, getSystemMetadata, listObjects, describe, getChecksum, synchronizationFailedrÉhjÃhhhh9h}rÊ(h ]h!]h"]h#]h%]uh'KDh]rËh1XQget, getSystemMetadata, listObjects, describe, getChecksum, synchronizationFailedrÌ…rÍ}rÎ(hjÉhjÇubaubahj;ubehj`ubj))rÏ}rÐ(hUh}rÑ(h ]h!]h"]h#]h%]uhjch]rÒ(j.)rÓ}rÔ(hUh}rÕ(h ]h!]h"]h#]h%]uhjÏh]rÖh5)r×}rØ(hXTier 2rÙhjÓhhhh9h}rÚ(h ]h!]h"]h#]h%]uh'KFh]rÛh1XTier 2rÜ…rÝ}rÞ(hjÙhj×ubaubahj;ubj.)rß}rà(hUh}rá(h ]h!]h"]h#]h%]uhjÏh]râh5)rã}rä(hX#MN_authorization, MN_authenticationråhjßhhhh9h}ræ(h ]h!]h"]h#]h%]uh'KGh]rçh1X#MN_authorization, MN_authenticationrè…ré}rê(hjåhjãubaubahj;ubj.)rë}rì(hUh}rí(h ]h!]h"]h#]h%]uhjÏh]rîh5)rï}rð(hXMN_authrñhjëhhhh9h}rò(h ]h!]h"]h#]h%]uh'KHh]róh1XMN_authrô…rõ}rö(hjñhjïubaubahj;ubj.)r÷}rø(hUh}rù(h ]h!]h"]h#]h%]uhjÏh]rúh5)rû}rü(hX;MNCore + login(*), logout(*), isAuthorized(*), setAccess(*)rýhj÷hhhh9h}rþ(h ]h!]h"]h#]h%]uh'KIh]rÿh1X;MNCore + login(*), logout(*), isAuthorized(*), setAccess(*)r…r}r(hX;MNCore + login(*), logout(*), isAuthorized(*), setAccess(*)hjûubaubahj;ubehj`ubj))r}r(hUh}r(h ]h!]h"]h#]h%]uhjch]r(j.)r}r(hUh}r (h ]h!]h"]h#]h%]uhjh]r h5)r }r (hXTier 3r hjhhhh9h}r(h ]h!]h"]h#]h%]uh'KJh]rh1XTier 3r…r}r(hj hj ubaubahj;ubj.)r}r(hUh}r(h ]h!]h"]h#]h%]uhjh]rh5)r}r(hXMN_crudrhjhhhh9h}r(h ]h!]h"]h#]h%]uh'KKh]rh1XMN_crudr…r}r(hjhjubaubahj;ubj.)r}r (hUh}r!(h ]h!]h"]h#]h%]uhjh]r"h5)r#}r$(hX MN_storager%hjhhhh9h}r&(h ]h!]h"]h#]h%]uh'KLh]r'h1X MN_storager(…r)}r*(hj%hj#ubaubahj;ubj.)r+}r,(hUh}r-(h ]h!]h"]h#]h%]uhjh]r.h5)r/}r0(hX MNAuth + create, update, delete,r1hj+hhhh9h}r2(h ]h!]h"]h#]h%]uh'KMh]r3h1X MNAuth + create, update, delete,r4…r5}r6(hj1hj/ubaubahj;ubehj`ubj))r7}r8(hUh}r9(h ]h!]h"]h#]h%]uhjch]r:(j.)r;}r<(hUh}r=(h ]h!]h"]h#]h%]uhj7h]r>h5)r?}r@(hXTier 4rAhj;hhhh9h}rB(h ]h!]h"]h#]h%]uh'KNh]rCh1XTier 4rD…rE}rF(hjAhj?ubaubahj;ubj.)rG}rH(hUh}rI(h ]h!]h"]h#]h%]uhj7h]rJh5)rK}rL(hXMN_replicationrMhjGhhhh9h}rN(h ]h!]h"]h#]h%]uh'KOh]rOh1XMN_replicationrP…rQ}rR(hjMhjKubaubahj;ubj.)rS}rT(hUh}rU(h ]h!]h"]h#]h%]uhj7h]rVh5)rW}rX(hXMN_replicationrYhjShhhh9h}rZ(h ]h!]h"]h#]h%]uh'KPh]r[h1XMN_replicationr\…r]}r^(hjYhjWubaubahj;ubj.)r_}r`(hUh}ra(h ]h!]h"]h#]h%]uhj7h]rbh5)rc}rd(hXMNStorage + replicaterehj_hhhh9h}rf(h ]h!]h"]h#]h%]uh'KQh]rgh1XMNStorage + replicaterh…ri}rj(hjehjcubaubahj;ubehj`ubj))rk}rl(hUh}rm(h ]h!]h"]h#]h%]uhjch]rn(j.)ro}rp(hUh}rq(h ]h!]h"]h#]h%]uhjkh]rrh5)rs}rt(hXTier 5ruhjohhhh9h}rv(h ]h!]h"]h#]h%]uh'KRh]rwh1XTier 5rx…ry}rz(hjuhjsubaubahj;ubj.)r{}r|(hUh}r}(h ]h!]h"]h#]h%]uhjkh]hj;ubj.)r~}r(hUh}r€(h ]h!]h"]h#]h%]uhjkh]hj;ubj.)r}r‚(hUh}rƒ(h ]h!]h"]h#]h%]uhjkh]r„h5)r…}r†(hX)MNReplicationCore (no additional methods)r‡hjhhhh9h}rˆ(h ]h!]h"]h#]h%]uh'KUh]r‰h1X)MNReplicationCore (no additional methods)rŠ…r‹}rŒ(hj‡hj…ubaubahj;ubehj`ubehUtbodyrubehUtgrouprŽubeubeubeubahUU transformerrNU footnote_refsr}r‘Urefnamesr’}r“Usymbol_footnotesr”]r•Uautofootnote_refsr–]r—Usymbol_footnote_refsr˜]r™U citationsrš]r›h(hU current_linerœNUtransform_messagesr]ržUreporterrŸNUid_startr KU autofootnotesr¡]r¢U citation_refsr£}r¤Uindirect_targetsr¥]r¦Usettingsr§(cdocutils.frontend Values r¨or©}rª(Ufootnote_backlinksr«KUrecord_dependenciesr¬NU rfc_base_urlr­Uhttps://tools.ietf.org/html/r®U tracebackr¯ˆUpep_referencesr°NUstrip_commentsr±NU toc_backlinksr²j;U language_coder³Uenr´U datestamprµNU report_levelr¶KU _destinationr·NU halt_levelr¸KU strip_classesr¹Nh.NUerror_encoding_error_handlerrºUbackslashreplacer»Udebugr¼NUembed_stylesheetr½‰Uoutput_encoding_error_handlerr¾Ustrictr¿U sectnum_xformrÀKUdump_transformsrÁNU docinfo_xformrÂKUwarning_streamrÃNUpep_file_url_templaterÄUpep-%04drÅUexit_status_levelrÆKUconfigrÇNUstrict_visitorrÈNUcloak_email_addressesrɈUtrim_footnote_reference_spacerʉUenvrËNUdump_pseudo_xmlrÌNUexpose_internalsrÍNUsectsubtitle_xformrΉU source_linkrÏNUrfc_referencesrÐNUoutput_encodingrÑUutf-8rÒU source_urlrÓNUinput_encodingrÔU utf-8-sigrÕU_disable_configrÖNU id_prefixr×UU tab_widthrØKUerror_encodingrÙUUTF-8rÚU_sourcerÛhUgettext_compactr܈U generatorrÝNUdump_internalsrÞNU smart_quotesr߉U pep_base_urlràU https://www.python.org/dev/peps/ráUsyntax_highlightrâUlongrãUinput_encoding_error_handlerräj¿Uauto_id_prefixråUidræUdoctitle_xformrç‰Ustrip_elements_with_classesrèNU _config_filesré]Ufile_insertion_enabledrêˆU raw_enabledrëKU dump_settingsrìNubUsymbol_footnote_startríKUidsrî}rï(hhhhWhÿhúuUsubstitution_namesrð}rñhh(h}rò(h ]h#]h"]Usourcehh!]h%]uU footnotesró]rôUrefidsrõ}röub.