view Side-By-Side changes
Network Working Group J. Gregorio, Ed. Internet-Draft BitWorking, Inc Expires:March 22,September 19, 2005 R. Sayre, Ed. Boswijck Memex ConsultingSeptember 21, 2004March 18, 2005 The Atom Publishing Protocoldraft-ietf-atompub-protocol-02.txtdraft-ietf-atompub-protocol-03.txt Status of this Memo This document is an Internet-Draft and is subject to all provisions of Section 3 of RFC 3667. By submitting this Internet-Draft,I certifyeach author represents that any applicable patent or other IPR claims of whichI amhe or she is aware have been or will be disclosed, and any of whichIhe or she become aware will be disclosed, in accordance with RFC 3668. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. 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." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire onMarch 22,September 19, 2005. Copyright Notice Copyright (C) The Internet Society(2004). All Rights Reserved.(2005). Abstract This memo presents a protocol for using XML (Extensible Markup Language) and HTTP (HyperText Transport Protocol) to edit content. The Atom Publishing Protocol is an application-level protocol for publishing and editing Web resources belonging to periodically Gregorio & Sayre Expires September 19, 2005 [Page 1] Internet-Draft The Atom Publishing Protocol March 2005 updated websites. The protocol at its core is the HTTP transport of Atom-formatted representations. The Atom format is documented in the Atom Syndication Format(draft-ietf-atompub-format-02.txt). Gregorio & Sayre Expires March 22, 2005 [Page 1] Internet-Draft The Atom Publishing Protocol September 2004(draft-ietf-atompub-format-06.txt). Editorial Note To provide feedback on this Internet-Draft, join the<http://www.imc.org/atom-syntax/index.html>.atom-syntax mailing list (http://www.imc.org/atom-syntax/index.html) [1]. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1 Notational Conventions . . . . . . . . . . . . . . . . . . 4 1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 2. The Atom Publishing Protocol Model . . . . . . . . . . . . . 43. Functional Specification2.1 Atom Collections . . . . . . . . . . . . . . . . . .5 3.1 PostURI. . . 4 2.1.1 Usage . . . . . . . . . . . . . . . . . . . . . . . . 53.1.1 Locating the PostURI2.1.2 Client and Server Interaction . . . . . . . . . . . . 5 3. Functional Specification . . . . .5 3.1.2 Request. . . . . . . . . . . . . 5 3.1 Collections . . . . . . . . . .5 3.1.3 Response. . . . . . . . . . . . . 6 3.1.1 Collection Document . . . . . . . . . .5 3.2 EditURI. . . . . . . 6 3.1.2 Elements in a Collection Document . . . . . . . . . . 6 3.1.3 Collection Requests . . . . . . . .7 3.2.1 Locating. . . . . . . . . 7 3.2 Introspection . . . . . . . . . . . . . .7 3.2.2 Request. . . . . . . . 8 3.2.1 Service Document . . . . . . . . . . . . . . .7 3.3 FeedURI. . . . 8 3.3 Entry Collection . . . . . . . . . . . . . . . . . . . . . 9 3.3.1 Locating . . . . . . . . . . . . . . . . . . . . . . . 103.3.2 Request .3.4 Simple Resource Collection . . . . . . . . . . . . . . . . 10 3.4.1 Locating . . . . . .10 3.3.3 Response. . . . . . . . . . . . . . . . . 10 3.4.2 Request . . . . . .10 3.4 ResourcePostURI. . . . . . . . . . . . . . . . . 10 3.5 Atom Request and Response Body Constraints . . . .10 3.4.1 Locating. . . . 11 3.5.1 id . . . . . . . . . . . . . . . . . . .10 3.4.2 Request. . . . . . . 11 3.5.2 link . . . . . . . . . . . . . . . .11 3.4.3 Response. . . . . . . . . 11 3.5.3 title . . . . . . . . . . . . . .11 3.5 Link Tag. . . . . . . . . . 11 3.5.4 summary . . . . . . . . . . . . . . .12 3.5.1 rel. . . . . . . . 11 3.5.5 content . . . . . . . . . . . . . . . . .12 3.5.2 href. . . . . . 12 3.5.6 issued . . . . . . . . . . . . . . . . . . .12 3.5.3 title. . . . . 12 3.5.7 modified . . . . . . . . . . . . . . . . . . .13 3.5.4 type. . . . 12 3.5.8 created . . . . . . . . . . . . . . . . . . . . .13 3.6 Atom Request and Response Body Constraints. . 12 3.5.9 author . . . . . .13 3.6.1 id. . . . . . . . . . . . . . . . . . 13 3.5.10 contributor . . . . . . . .13 3.6.2 link. . . . . . . . . . . . 13 3.5.11 generator . . . . . . . . . . . . .13 3.6.3 title. . . . . . . . 13 3.6 Securing the Atom Protocol . . . . . . . . . . . . . . . . 133.6.4 summary3.6.1 [@@TBD@@ CGI Authentication] . . . . . . . . . . . . . 14 4. Security Considerations . . . . . . . . . .14 3.6.5 content. . . . . . . . 14 5. IANA Considerations . . . . . . . . . . . . . . .14 3.6.6 issued. . . . . 14 6. Appendix A - SOAP Enabling . . . . . . . . . . . . . . . . . 15 6.1 Servers . .14 3.6.7 modified. . . . . . . . . . . . . . . . . . . . . . . 153.6.8 created . . .Gregorio & Sayre Expires September 19, 2005 [Page 2] Internet-Draft The Atom Publishing Protocol March 2005 6.2 Clients . . . . . . . . . . . . . . . . . . . .15 3.6.9 author . . . . . . . . . . . . . . . . . . . . . . . . 15 3.6.10 contributor . . . . . . . . . . . . . . . . . . . . 15 3.6.11 generator . . . . . . . . . . . . . . . .. . . . . 153.7 Securing the Atom Protocol . . . . . . . . . . . . . . . . 16 3.7.1 [@@TBD@@ CGI Authentication] . . . . . . . . . . . . . 16 4. Security Considerations . . . . . . . . . . . . . . . . . . 16 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . 17 Gregorio & Sayre Expires March 22, 2005 [Page 2] Internet-Draft The Atom Publishing Protocol September 2004 6. Appendix A - SOAP Enabling . . . . . . . . . . . . . . . . . 17 6.1 Servers . . . . . . . . . . . . . . . . . . . . . . . . . 17 6.2 Clients . . . . . . . . . . . . . . . . . . . . . . . . . 177. Appendix B - Examples . . . . . . . . . . . . . . . . . . .1715 7.1 Example for a weblog . . . . . . . . . . . . . . . . . . .1715 7.2 Example for a wiki . . . . . . . . . . . . . . . . . . . .1815 8. Revision History . . . . . . . . . . . . . . . . . . . . . .1815 9. Normative References . . . . . . . . . . . . . . . . . . . .1917 Authors' Addresses . . . . . . . . . . . . . . . . . . . . .2018 Intellectual Property and Copyright Statements . . . . . . .2119 Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page 3] Internet-Draft The Atom Publishing ProtocolSeptember 2004March 2005 1. Introduction The Atom Publishing Protocol is an application-level protocol for publishing and editing Web resources using HTTP [RFC2616] and XML. 1.1 Notational Conventions 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 Terminology Atom Entry: An Atom Entry is a fragment of a full Atom feed. In this case, the fragment is a single 'entry' element and all its child elements. Each Atom Entry describes a single Web resource, providing metadata and optionally a textual representation of that resource.PostURI: A URI that is used to create new resources. POSTing an Atom Entry to this URI will create a new resource. EditURI: A URI that is used to edit a resource. The editing is done using the HTTP verbs GET, PUT and DELETE. The representation of the resource is always that of an Atom Entry. FeedURI: The URI which identifies an Atom Feed.2. The Atom Publishing Protocol Model The Atom Publishing Protocol is an application-level protocol for publishing and editing Web resources. The primary way of interaction in the Atom Publishing Protocol is by managing collection of resources. All collections support the same basic methods of interaction. In addition, the resources belonging to collections also share the same interaction patterns. Using the common HTTP verbs provides a pattern for working with all such Web resources: o GET is used to retrieve a representation of a resource or perform a read-only query. o PUT is used to update a known resource. o POST is used to create a new dynamically-named resource. o DELETE is used to remove a resource.There are four major classes2.1 Atom Collections An Atom collection is a set of items all ofURI [RFC2396] in this specification: PostURI, ResourcePostURI, FeedURI, and EditURI. This specification definestheexpected actionssame type ("members" of the collection), where the "type" may be, foreachexample: Atom entry, category, template, "simple resource", or any other classification of web resource. Each collection has a URI which is given in themethods listed.introspection file. A GET on the collection URIMAY support methods not listed here. For example, an EditURI could supportMUST produce aPOST or OPTIONS method. However, what those methods do is beyondcollection document as defined in "3.X.1 Collection Document." That document describes PART OF thescopestate ofthis specification. o EditURI: PUT, GET, DELETE o PostURI: POST o FeedURI: GET o ResourcePostURI: POST This document does not specifytheformcollection. All the members of a collection have an "updated" property, and theURIs that are used.collection is considered to be ordered by this property. A single Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page 4] Internet-Draft The Atom Publishing ProtocolSeptember 2004 The URI spaceMarch 2005 collection document may not contain all ofeach server is controlled, as defined by HTTP, bytheserver alone. What thismembers of a collection. If a collection documentdoes specify areis theformatsresponse ofthe files that are exchangeda non-partial GET request, and does not contain all of theactions that can be performed onmembers of a collection, then it will contain theURIs embedded in those files. 3. Functional Specification 3.1 PostURI The PostURI is used to create entries. These can be either full entries, such asURI of the next collection document which will contain more of the collection members. By traversing this list of collection documents aweblog post, or theyclient canbe comments, or evenobtain all of the members of awiki page.collection. Theclient POSTs a filled-in Atom Entry to this URI. If the request is successful, one or more Web resources MAY'next' attribute will not becreated. For example, POSTing an Atom entrypresent in the response to aPostURI may createpartial GET request. 2.1.1 Usage Below twonew Web resources, an HTML representation and anusages are outlined for Atomrepresentation. 3.1.1 Locating the PostURI The PostURI can be discovered in a link elementCollections. They are here to highlight common idioms for interacting withan @rel of 'service.post'. The link element containingaPostURI used to createCollection Resource and not anew entry MAY be discovered in three different places.normative interaction pattern. Thefirst place it mayAtom Collection can befound is in a <link> elementused by clients in two ways. In the'head' element of an HTML document. The second placefirst case the client has attached to aPostURI may be foundsite for the first time and is doing anatom:link elementinitial syncronization, thatisis, retrieving achildlist of all theatom:feed element.members of the collections and possibly retrieving all the members of the collection also. Thethird placeclient can perform aPostURI may be found is innon-partial GET on theatom:link element of an atom:entry. @@ TBD @@ - Discuss subordinate resourcescollection resource andwhatit will receive aPostURI means based on wherecollection document that either contains all theURI was found. <link rel="service.post" type="application/atom+xml" href="URI for Posting goes here" title="The namemember of thesite." /> 3.1.2 Request The request containscollection, or the collection document root element 'collection' will contain afilled-in Atom entry, subject'next' attribute pointing to theconstraints in section Section 3.6. 3.1.3 Response The possible status codes from a POST are 201, 303, 400, 404, 409, 410 and 500. Gregorio & Sayre Expires March 22, 2005 [Page 5] Internet-Draft The Atom Publishing Protocol September 2004 3.1.3.1 Response code 201 The Response MUST include a Location: header with the URI ofnext collection document. By repeatedly following thecreated resource. The URI returned must be'next' attribute from document to document theEditURI ofclient can find all theentry just created. The bodymembers of theresponse SHOULD contain the newly created entry. If the entry is present incollection. In theresponse body then it MUST conform tosecond case thesame constraints listed for responses to a GET onclient has already done anEditURI. User agents MUST NOT depend oninitial sync, and now needs to re-sync, because theserver returningclient was just restarted, or some time has passed since aresponse body. If the serverre-sync, etc. The client doesreturnaresponse body then the user agents MUST NOT dependpartial GET on theresponse body havingcollection document, supplying acontent-type of 'application/atom+xml". NoteRange header that begins from theserver may choose to omit the content inlast time theresponse, particularly if it is large. A 201 response MAY contain an ETag response header field indicatingclient sync'd to the currentvaluetime. The collection document returned will contain only those members of theentity tag for the requested variant just created. If the entry returned is subsequentlycollection that have changed since theuser agent can update the entry by submitting it via PUT tolast time theEditURI. If an ETag was returned withclient syncronized. 2.1.2 Client and Server Interaction [[anchor5: ...]] This document does not specify thecreationform of theentry then the user agent SHOULD include an If-Match: header in the request that containsURIs thatETag. 3.1.3.2 Response code 303are used. ThebodyURI space of each server is controlled, as defined by HTTP, by the server alone. What thisresponsedocument doesnot containspecify are thefilled-in Entry, butformats of thefilled-in Entryfiles that are exchanged and the actions that can befound under a different URI and can be retrieved using a GET methodperformed onthat resource. The URI SHOULD be given bytheLocation fieldURIs embedded inthe response. 3.1.3.3 Response code 400 Indicates that the server believes that the data sent constitutes an invalid request. As an example, the data posted may not be well-formed XML. The server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. 3.1.3.4 Response code 409 The request contained a valid Atom Entry, but it conflicts with state on the server. The response SHOULD contain enough for information for the user to resolve the conflict. [[@@TBD@@ more about response body format]]those files. 3. Functional Specification Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page6]5] Internet-Draft The Atom Publishing ProtocolSeptember 2004 3.1.3.5 Response code 500 Indicates that the server detected an internal error on the server processing this request (suchMarch 2005 3.1 Collections 3.1.1 Collection Document A collection document is rooted by a <collection> element. A collection element may have any number of <member> elements asan unhandled exception). The server SHOULD include an entity containing an explanationchildren; each such element identifies a member of theerror situation, and whether it iscollection. In some situations, atemporarycollection document may not contain every member of the collection itself. Whether complete orpermanent condition. 3.2 EditURI An EditURI is used to editpartial, the members in asingle entry. Each entry that is editablecollection document MUSThaveconstitute aunique URI. This URI supports both GET and PUT and they are usedconsecutive sequence of the collection's members, ordered by their "updated" properties. That is, a collection document MUST contain a contiguous subset of the members of the collection ordered by their 'updated' property. 3.1.2 Elements intandem fora Collection Document A collection document MAY contain zero or more 'member' elements. Each 'member' element MUST include anediting cycle. The client GETs'href' attribute identifying a URL of therepresentation whichmember resource. The 'href' URI of a member resource isformatted asanAtom entry. The client may then update"EditURI" under theentryterms of section 2, andthen PUT it backMUST respond to the sameURI. The PUT will cause allHTTP methods as such an EditURI. Each 'member' element MAY include an "hrefreadonly" attribute. This optional attribute identifies a URI which, on a GET request, responds equivalently to how therelated resources"href" URI would respond tobe updated, for example,theHTML representation. Notesame request. Clients SHOULD NOT apply to this URI any HTTP methods that would be expected to modify thevaluestate of thecontent element inresource (e.g. PUT, POST or DELETE). A PUT or POST request to this URI MAY NOT affect theAtom entry doesunderlying resource. If the "hrefreadonly" attribute is nothavegiven, its value defaults toexactly matchthecontent element for"href" value. If thesame entry when it"hrefreadonly" attribute is present, and its value isrepresented inanAtom feed. For example, a server may allow the client to post entries whose contentempty string, then there isformatted as WikiML, yetno URI that can be treated in theserver may clean upway suchmarkup and transform it into well-formed XHTML before placing it ina value would be treated. Clients SHOULD use thepublicly available Atom feed. Another scenario is summaries--the EditURI is for editing"href" value to manipulate thefull contentresource within the context ofan entry, buttheserver may only present excerpts when it produces an Atom feed. A client will send a DELETE toAPP itself. Clients SHOULD prefer theEditURI to delete an entry. 3.2.1 Locating"hrefreadonly" value in any other context. Forediting a site Entry,example, if thelink tagresource isused. Note thatan image, alink tag is used in both HTML and inclient may replace theAtom format. A link tagimage data using a PUT on the "href" value, and may even display a preview of thefollowing format points toimage by fetching theEditURI for"href" URI. But when creating asite. In HTML,public, read-only reference to thelink tags for editing are always found insame image resource, thehead element, while in Atom they may appear as children ofclient should use theentry elements. <link rel="service.edit" type="application/atom+xml" href="URI for Editing goes here" title="Readable desc of"hrefreadonly" value. If theentry." /> Note: The critical characteristic of this link tag"hrefreadonly" value is an empty string, the@rel of 'service.edit' andclient SHOULD NOT make public reference to the@type of 'application/atom+xml'. 3.2.2 Request A PUT request, and a GET response both contain"href" value. Each 'member' element MUST include afilled-in Atom'title' attribute, whose value Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page7]6] Internet-Draft The Atom Publishing ProtocolSeptember 2004 entry, subject to the constraints in section Section 3.6. The expected status codes fromMarch 2005 is aGET are 200, 301, 307, and 500. 400, 404, and 410 are also possible.human-readable name or description for the item. Theexpected status codes from a PUT are 2xx, 301, 307, 500 and 501. 400, 404, 409, and 410values of 'title' attributes arealso possible. 3.2.2.1 Successful Requests Servers MUST indicate successful GET requests withnot required to be unique across all members of a200 response. Serverscollection. Each 'member' element MUSTindicate successful PUT requests with a 2xx response. Servers MAYincludeadditional information inan 'updated' attribute, whose value is thePUT response. Clients SHOULD NOT expect any additional information in a PUT response. 3.2.2.2 Response code 301 The entry has moved permanently,'updated' property of thenew URI is given incollection member whose format MUST conform to theLocation header. Thedate-time BNF rule in [RFC3339]. 3.1.3 Collection Requests 3.1.3.1 Range: Header HTTP/1.1 allows a clientSHOULD retryto request that only part (a range of) theGET usingcollection to be included within theURI returnedresponse. HTTP/1.1 uses range units in theLocation header. WhenRange header field. A collection can be broken down into subranges according to the members 'updated' property. If aPUT operationRange: header isattemptedpresent in theuser agent should promptrequest, its value explictly identifies theuser before attemptinga time interval interval in which all thePUT on the URI returned in the Location header. 3.2.2.3 Response code 307 The entry has moved temporarily, the new URI is givenmembers 'updated' property must fall to be included in theLocation header.response. Range = "Range" ":" ranges-specifier Theclient SHOULD retry the GET usingvalue of theURI returnedRange: header should be a pair of ISO 8601 dates, separated by a slash character; either date may be optionally omitted, in which case theLocation header. When a PUT operationrange isattempted the user agent should prompt the user before attempting the PUTunderstood as stretching to infinity onthe URI returned in the Location header. 3.2.2.4 Response code 401 Indicatesthatthe server believes that the data sent constitutes an invalid request. As an example, the data posted may not be well-formed XML.end. ranges-specifier = updated-ranges-specifier updated-ranges-specifier = updated-unit "=" updated-range updated-unit = "updated" updated-range = [iso-date] "/" [iso-date] Theserver SHOULD include an entity containing an explanation of the error situation, and whether it isresponse to atemporary or permanent condition. 3.2.2.5 Response code 409 Thecollection requestcontainedMUST be avalid Atom Entry, but it conflicts with the statecollection document, all of whose 'member' elements fall within theresource, or other state onrequested range. If no members fall in theserver. For example, a server could signal thatrequested range, theclient has erred in this manner if it receivesserver MUST respond with arequestcollection document containing no 'member' elements. 3.1.3.2 Accept-Ranges: Header The response to a non-partial GET request MUST include anatom:id element whoseAccept-Ranges header that indicates that the server accepts 'updated' range requests. Accept-Ranges = "Accept-Ranges" ":" acceptable-ranges acceptable-ranges = updated-unit ( 1#range-unit ) Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page8]7] Internet-Draft The Atom Publishing ProtocolSeptember 2004 value differs from thatMarch 2005 3.2 Introspection There are many different kinds of resources that can be managed through theresource found at the requested URI. The response SHOULD contain enough for informationAPP, for example, entries, templates, users, etc. The Service Document is a single document that lists all theuser to resolvefacets of theconflict. [[@@TBD@@ more about response body format ]] 3.2.2.6 Response code 410 IndicatesAPP that a site supports and also contains therequested resource is gone permanently.URIs of all those resources. 3.2.1 Service Document Theclient SHOULD NOT repeatService Document lists therequest. 3.2.2.7 Response code 500 Indicatesresources thatthe server detected an internal error on the server processing this request (such as an unhandled exception).each site makes available. Theserver SHOULD include an entity containingService Resource returns anexplanation of the error situation, and whether it is a temporary or permanent condition. 3.3 FeedURI The FeedURI is used to retrieve a representation in Atom format. Note that this feed is different from a typical Atom feed in that it contains "link" elements for navigating and manipulating the content of the site. For example there should be a "link" element with rel="next" whose URI points to the next block of entries on the site. Similarly, the feed element can contain a "link" element with rel="service.post", the URI of which is a PostURI. Individual entries should contain "link" elements with rel="service.edit" whose URIs are EditURIs. This document only uses some of the methods available for each type of URI. For example, the only method described by this document for the FeedURI is GET. Any other method may be supported by the URI types described, but defining their behavior is beyond the scope of this document. In this light you may notice that the PostURI only supports the POST method. It is possible, and allowable, that for some implementations the PostURI and the FeedURI are the same URI. @@ Editor's Note: @@ Note that the "service.feed" takes the place of the Introspection File and the Search facet in previous versions of the specification. That is, facet discovery, which was previously done by inspecting the Introspection file is now done by looking for "link" tags with an attribute "rel" set to "service.[something]" in the "service.feed" file. At the same time the same representation replaces the search facet by having "link" tags that point to other feeds using well-known 'rel' attribute values such as 'next' and 'prev', or the search can branch in multiple directions by specifying Gregorio & Sayre Expires March 22, 2005 [Page 9] Internet-Draft The Atom Publishing Protocol September 2004 multiple link tags with rel="service.feed" and having differing title attributes that announce the kind of search results in that feed. 3.3.1 Locating A link tag of the following format points to the FeedURI. <link rel="service.feed" type="application/atom+xml" href="URI goes here" title="The name of the site." /> 3.3.2 Request The request is a simple GET. No other verbs are currently specified for this URI. 3.3.3 Response The expected status codes from a GET are 200, 301, 307, and 500. 401, 404, and 410 are also possible. 3.3.3.1 Response code 301 The Feed has moved permanently, the new URI is given in the Location header. The client SHOULD do a GET on the URI returned in the Location header. 3.3.3.2 Response code 307 The Feed has moved temporarily, the new URI is givenService Document inthe Location header. The client SHOULD doresponse to a GETon the URI returned in the Location header. 3.4 ResourcePostURI The ResourcePostURIrequest. Here isused to create new non-entry resources. The client POSTs a resourcean example of an Service Document. <?xml version="1.0" encoding='utf-8'?> <service version="0.3" xmlns="http://purl.org/atom/ns#"> <workspace title="Main Site" > <collection rel="entries" name="Entries" href="http://example.org/reilly/feed" /> <collection rel="categories" name="Categories" href="http://example.org/reilly/cat" /> <collection rel="templates" name="Templates" href="http://example.org/reilly/tmpl" /> <collection rel="users" name="Users" href="http://example.org/reilly/users" /> <collection rel="resource" name="Pictures" href="http://example.org/reilly/pic" /> </workspace> <workspace title="b-links"> <collection rel="entries" name="Entries" href="http://example.org/reilly/feed" /> <collection rel="http://example.net/booklist" name="Books" href="http://example.org/reilly/books" /> </workspace> </service> o entries o resource o categories o templates o users The default for thedesired MIME type directly to this URI. 3.4.1 Locating For creating a new non-entry resource, the link tagrel attribute isused. Note that a link tag'resource'. Extensibility for 'rel' values isused in both HTML andhandled in theAtom format. A link tagsame manner as PaceFieldingLinks. Each 'collection' element in 'workspace' represents a single facet of thefollowing format points to the ResourcePostURI forAPP. While asite. In HTML the link tags are always foundsite must fully support each facet they list in their Service Document, a site does not need to support all thehead element, whilefacets inAtom theythis RFC. Additionally, new facets mayappear as children of the Feed and entry elements.be added either Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page10]8] Internet-Draft The Atom Publishing ProtocolSeptember 2004 <link rel="resource.post" href="URIMarch 2005 through vendor extension or follow-on RFCs. 3.2.1.1 Service Documet Elements The "service" element is the document element of a Service Document, acting as a container forResource Posting goes here" title="The nameservice data associated with possibly multiple workspaces. Its only child elements MUST be one or more 'workspace' elements. The 'service' element MUST have a single attribute 'version' whose content indicates the version of thesite."> 3.4.2 RequestAtom specification that the document conforms to. The content of this attribute is unstructured text. The version identifier for this specification is "1.0". The 'workspace' element element contains information elements about the collections of resources available for editing. The only children of 'workspace' MUST be one or more "collection" elements. Therequest contains'workspace' element MUST have aresource, sent throughsingle attribute 'title' whose content MUST NOT be empty and which is astandard HTTP POST, e.g.: POST /_do/exampleblog/post_resource HTTP/1.1 Host: www.example.com Content-Type: image/jpeg Content-Length: nnn ...raw bytes of image go here... 3.4.3 Responsehuman-readable name for the workspace. Theexpected status codes from a POST'collection' element describes various typed groups of resources available for editing or adding to. 3.3 Entry Collection Entries are201, 303, 400, 415,managed through collections and500. 401, 404, 409,as such entry collection and410entries that arealso possible. 3.4.3.1 Response code 201 The response MUST includemembers of aLocation: header withcollection must support all the operations enumerated above. An Edit Resource is used to edit a single entry. Each entry that is editable MUST have a unique URI. This URIofsupports both GET and PUT and they are used in tandem for an editing cycle. The client GETs thecreated resource, i.e.representation which is formatted as an Atom entry. The client may then update theURI usedentry and then PUT it back toretrievetheresource representation in a subsequent HTTP GET.same URI. Theserver SHOULD omitPUT will cause all thecontentrelated resources to be updated, for example, the HTML representation. Note that the value of theresourcecontent element in theresponse, since it would be redundant to return itAtom entry does not have to exactly match theclient. 3.4.3.2 Response code 303 Similar to 201 but no cachingcontent element for the same entry when it isallowed. The response MUST includerepresented in an Atom feed. For example, aLocation: header. 3.4.3.3 Response code 400 Indicates that theserverbelieves thatmay allow thedata sent constitutes an invalid request. The server SHOULD include an entity containing an explanation ofclient to post entries whose content is formatted as WikiML, yet theerror situation,server may clean up such markup andwhethertransform itis a temporary or permanent condition. 3.4.3.4 Response code 415 The MIME type ofinto well-formed XHTML before placing it in therequest entitypublicly available Atom feed. Another scenario is summaries--the EditURI isnot supported by the server for this resource. The response SHOULD contain enough for informationfor editing theuserfull content of an entry, but the server may only present excerpts when it produces an Atom feed. A client will send a DELETE toresolvetheconflict.EditURI to delete an entry. Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page11]9] Internet-Draft The Atom Publishing ProtocolSeptember 2004 [[@@TBD@@ more about response body format ]] 3.4.3.5 Response code 500 Indicates that the server detected an internal error on the server processing this request (such as an unhandled exception). A short description of the error will appear on the status line itself. A longer description will appear inMarch 2005 3.3.1 Locating For editing a site Entry, thebody. 3.5 Link Tag Thelink tag is used. Note that a link tag is used in both HTML andAtom formats. There are slight differences between the two usages. Here are the commonalities, differences, and a list of well-known values for the rel attribute. <http://www.w3.org/TR/html4/struct/links.html#edef-LINK> appearsin the'head' of the document. The 'head' section only allows a linear list of 'link' tags. TheAtomformat allows 'link' tags as children of both the 'feed' element and of the 'entry' element. Note that this gives the information present in theformat. A link tagmore context. For example ... @@ TBD @@ 3.5.1 rel This attribute describes the relationship from the current document, be it HTML or Atom, to the anchor specified by the href attribute. The valueofthis attribute is a space-separated list of link types. Note that these values are case insensitive. When used in concert with type="application/atom+xml", the relations may be interpreted as follows. alternate: The URI inthehref attributefollowing format points toan alternate representation ofthecontaining resource. start: The Atom feed at the URI supplied in the href attribute contains the first feed inEditURI for alinear sequence of entries. next: The Atom feed atsite. In HTML, theURI suppliedlink tags for editing are always found in thehref attribute contains the next N entrieshead element, while ina linear sequence of entries. prev: TheAtomfeed atthey may appear as children of theURI supplied inentry elements. <link rel="service.edit" type="application/atom+xml" href="URI for Editing goes here" title="Readable desc of thehref attribute containsentry." /> Note: The critical characteristic of this link tag is theprevious N entries in a linear sequence@rel ofentries. service.edit: The URI given in'service.edit' and thehref attribute is used to edit a representation@type of 'application/atom+xml'. 3.4 Simple Resource Collection Simple Resources are managed through collections and as such simple reource collections and simple resources that are members of thereferred resource. service.post: The URI incollection must support all thehref attribute is used to create newoperations enumerated above. Simple Resources can be images, templates, and any other non-entry resources.service.feed: The URI given in3.4.1 Locating For creating a new non-entry resource, thehref attributelink tag is used. Note that astarting point for navigating contentlink tag is used in both HTML andservices. 3.5.2 href URI ofin theresource being described by this link element. Gregorio & Sayre Expires March 22, 2005 [Page 12] Internet-Draft TheAtomPublishing Protocol September 2004 3.5.3 title Offers advisory information aboutformat. A link tag of thelink. Renderedfollowing format points to theuser to help them choose amongResourcePostURI for aset of links with the same rel and type attributes. 3.5.4 type The content type ofsite. In HTML theresource available atlink tags are always found in theURI givenhead element, while in Atom they may appear as children of thehref attributeFeed and entry elements. <link rel="resource.post" href="URI for Resource Posting goes here" title="The name of thelink element. Mostsite."> 3.4.2 Request The request contains a resource, sent through a standard HTTP POST, e.g.: POST /_do/exampleblog/post_resource HTTP/1.1 Host: www.example.com Content-Type: image/jpeg Content-Length: nnn ...raw bytes ofthe link types in this specification are on type 'application/atom+xml'. 3.6image go here... Gregorio & Sayre Expires September 19, 2005 [Page 10] Internet-Draft The Atom Publishing Protocol March 2005 3.5 Atom Request and Response Body Constraints The Atom format is used as the representation of all the resources in this specification. As it is used in differing contexts, there are different constraints of which elements may be present, and how their values should be interpreted.3.6.13.5.1 id PostURI MUST NOT be present. FeedURI MUST be present. EditURI GET MUST be present. PUT MUST be present.3.6.23.5.2 link PostURI MAY be present. Servers MAY use the information to determine the URI of the created resource. Relative URLs are to be interpreted relative to xml:base. FeedURI MUST be present. EditURI GET MUST be present. PUT MUST be present.3.6.33.5.3 title PostURI MUST be present. The element may be empty, to explicitly indicate "no title". Servers SHOULD NOT try to generate a title if one is not provided. The type attribute MAY be present, and if not it defaults to "text/plain". If present, it MUST represent a MIME type that the server supports. The mode attribute MAY be present. If not present, it defaults to "xml". If present, it MUST be "xml", "base64", or "escaped".Gregorio & Sayre Expires March 22, 2005 [Page 13] Internet-Draft The Atom Publishing Protocol September 2004FeedURI MUST be present. EditURI GET MUST be present. PUT MUST be present. The element may be empty, to explicitly indicate "no title". Servers SHOULD NOT try to generate a title if one is not provided.3.6.43.5.4 summary PostURI MAY be present. If not present, the server is welcome to produce its own summary. If present but empty, the server SHOULD NOT generate a summary of its own. The type attribute MAY be present. If not, it defaults to "text/plain". If present, it must represent a MIME type that the server supports. The mode Gregorio & Sayre Expires September 19, 2005 [Page 11] Internet-Draft The Atom Publishing Protocol March 2005 attribute MAY be present and defaults to "xml". If present, it must be "xml","base64", or "escaped". FeedURI MAY be present. EditURI GET MAY be present. PUT MAY be present. The element may be empty, to explicitly indicate "no summary". Servers SHOULD NOT try to generate a title if one is not provided.3.6.53.5.5 content PostURI MAY be present but may be empty, to explicitly indicate "no content". The type attribute MAY be present, but defaults to "text/plain" if not present. It must represent a MIME type that the server supports. The MODE attribute may be present and defaults to "xml" if not present. It must be "xml","base64", or "escaped". FeedURI MAY be present. EditURI GET MAY be present. PUT MAY be present. The element may be empty, to explicitly indicate "no content".3.6.63.5.6 issued PostURI MUST be present, but may be empty, in which case it signifies "now" in the time zone of the server. FeedURI MUST be present. EditURI GET MUST be present. PUT MUST be present. Server policy determines if an updated time is accepted.Gregorio & Sayre Expires March 22, 2005 [Page 14] Internet-Draft The Atom Publishing Protocol September 2004 3.6.73.5.7 modified PostURI MUST NOT be present. FeedURI MAY be present. EditURI GET MAY be present. PUT MAY be present. The element may be empty, to explicitly indicate that 'now' on the server time is to be used.3.6.83.5.8 created PostURI MAY be present. Gregorio & Sayre Expires September 19, 2005 [Page 12] Internet-Draft The Atom Publishing Protocol March 2005 FeedURI MAY be present. EditURI GET MAY be present. PUT MAY be present. The server may or may not accept an updated value. If the server does not allow updating the issued time then any PUT request with a different issued value MUST be rejected.3.6.93.5.9 author PostURI MAY be present. If not present, the server determines the author. If present, and conflicting with valid values as determined by the server, then the server may change the value of author. FeedURI MAY be present. EditURI GET MAY be present. PUT MAY be present.3.6.103.5.10 contributor PostURI MAY be present. FeedURI MAY be present. EditURI GET MAY be present. PUT MAY be present.3.6.113.5.11 generator PostURI MUST be present and contain a URI. The value of the element indicates the code base used to create this request. MUST also have an attribute 'version' with a version number. FeedURI MUST NOT be present.Gregorio & Sayre Expires March 22, 2005 [Page 15] Internet-Draft The Atom Publishing Protocol September 2004EditURI GET MUST NOT be present. PUT MUST NOT be present.3.73.6 Securing the Atom Protocol All instances of publishing Atom entries SHOULD be protected by authentication to prevent posting or editing by unknown sources. Atom servers and clients MUST support one of the following authentication mechanisms, and SHOULD support both. o HTTP Digest Authentication [RFC2617] o [@@TBD@@ CGI Authentication ref] Atom servers and clients MAY support encryption of the Atom session Gregorio & Sayre Expires September 19, 2005 [Page 13] Internet-Draft The Atom Publishing Protocol March 2005 using TLS [RFC2246]. There are cases where an authentication mechanism may not be required, such as a publicly editable Wiki, or when using the PostURI to post comments to a site that does not require authentication to create comments.3.7.13.6.1 [@@TBD@@ CGI Authentication] This authentication method is included as part of the protocol to allow Atom servers and clients that cannot use HTTP Digest Authentication but where the user can both insert its own HTTP headers and create a CGI program to authenticate entries to the server. This scenario is common in environments where the user cannot control what services the server employs, but the user can write their own HTTP services. 4. Security Considerations Because Atom is a publishing protocol, it is important that only authorized users can create and edit entries. The security of Atom is based on HTTP Digest Authentication and/or [@@TBD@@ CGI Authentication]. Any weaknesses in either of these authentication schemes will obviously affect the security of the Atom Publishing Protocol. Both HTTP Digest Authentication and [@@TBD@@ CGI Authentication] are susceptible to dictionary-based attacks on the shared secret. If the shared secret is a password (instead of a random string with sufficient entropy), an attacker can determine the secret by exhaustively comparing the authenticating string with hashed results of the public string and dictionary entries.Gregorio & Sayre Expires March 22, 2005 [Page 16] Internet-Draft The Atom Publishing Protocol September 2004See RFC 2617 for more detailed description of the security properties of HTTP Digest Authentication. @@TBD@@ Talk here about using HTTP basic and digest authentication. @@TBD@@ Talk here about denial of service attacks using large XML files, or the billion laughs DTD attack. 5. IANA Considerations This document has no actions for IANA. Gregorio & Sayre Expires September 19, 2005 [Page 14] Internet-Draft The Atom Publishing Protocol March 2005 6. Appendix A - SOAP Enabling All servers SHOULD support the following alternate interface mechanisms to enable a wider variety of clients to interact with Atom Publishing Protocol servers. The following requirements are in addition to the ones listed in the Functional Specification Section. If a server supports SOAP Enabling then it MUST support all of the following. 6.1 Servers 1. All servers MUST support the limited use of the SOAPAction HTTP Header as described below in the Client section. 2. All servers MUST be able to process well formed XML. Servers need not be able to handle processing instructions or DTDs. 3. Servers MUST accept content in a SOAP Envelope, and if they receive a request that is wrapped in a SOAP Envelope then they MUST wrap their responses in SOAP envelopes or produce a SOAP Fault. 6.2 Clients 1. Clients SHOULD use the appropriate HTTP Method when possible. When not possible, they should use POST and include a SOAPAction HTTP header which is constrained as follows: 2. SOAPAction: "http://schemas.xmlsoap.org/wsdl/http/[METHOD]" 3. Where [METHOD] is replaced by the desired HTTP Method. 4. Clients MAY wrap their XML payload in a SOAP Envelope. If so, they must also wrap it in an element which exactly matches the HTTP Method. 7. Appendix B - Examples 7.1 Example for a weblog Fill this in with an example for how all the above is used for aGregorio & Sayre Expires March 22, 2005 [Page 17] Internet-Draft The Atom Publishing Protocol September 2004weblog. Start with main HTML page, link tag of type service.feed to the 'introspection' file. 1. Creating a new entry 2. Finding an old entry 3. editing an old entry 4. commenting on a entry (via HTML and Atom) 7.2 Example for a wiki Fill this in like above but for a wiki. 8. Revision History draft-ietf-atompub-protocol-03 - Incorporates PaceSliceAndDice3 and Gregorio & Sayre Expires September 19, 2005 [Page 15] Internet-Draft The Atom Publishing Protocol March 2005 PaceIntrospection. draft-ietf-atompub-protocol-02 - Incorporates Pace409Response, PacePostLocationMust, and PaceSimpleResourcePosting. draft-ietf-atompub-protocol-01 - Added in sections on Responses for the EditURI. Allow 2xx for response to EditURI PUTs. Elided all mentions of WSSE. Started adding in some normative references. Added the section "Securing the Atom Protocol". Clarified that it is possible that the PostURI and FeedURI could be the same URI. Cleaned up descriptions for Response codes 400 and 500. Rev draft-ietf-atompub-protocol-00 - 5Jul2004 - Renamed the file and re-titled the document to conform to IETF submission guidelines. Changed MIME type to match the one selected for the Atom format. Numerous typographical fixes. We used to have two 'Introduction' sections. One of them was moved into the Abstract the other absorbed the Scope section. IPR and copyright notifications were added. Rev 09 - 10Dec2003 - Added the section on SOAP enabled clients and servers. Rev 08 - 01Dec2003 - Refactored the specification, merging the Introspection file into the feed format. Also dropped the distinction between the type of URI used to create new entries and the kind used to create comments. Dropped user preferences. Rev 07 - 06Aug2003 - Removed the use of the RSD file for auto-discovery. Changed copyright until a final standards body is chosen. Changed query parameters for the search facet to all begin with atom- to avoid name collisions. Updated all the Entries to follow the 0.2 version. Changed the format of the search results and template file to a pure element based syntax. Rev 06 - 24Jul2003 - Moved to PUT for updating Entries. Changed all the mime-types to application/x.atom+xml. Added template editing. Changed 'edit-entry' to 'create-entry' in the Introspection file to more accurately reflect it's purpose.Gregorio & Sayre Expires March 22, 2005 [Page 18] Internet-Draft The Atom Publishing Protocol September 2004Rev 05 - 17Jul2003 - Renamed everything Echo into Atom. Added version numbers in the Revision history. Changed all the mime-types to application/atom+xml. Rev 04 - 15Jul2003 - Updated the RSD version used from 0.7 to 1.0. Change the method of deleting an Entry from POSTing <delete/> to using the HTTP DELETE verb. Also changed the query interface to GET instead of POST. Moved Introspection Discovery to be up under Introspection. Introduced the term 'facet' for the services listed Gregorio & Sayre Expires September 19, 2005 [Page 16] Internet-Draft The Atom Publishing Protocol March 2005 in the Introspection file. Rev 03 - 10Jul2003 - Added a link to the Wiki near the front of the document. Added a section on finding an Entry. Retrieving an Entry now broken out into it's own section. Changed the HTTP status code for a successful editing of an Entry to 205. Rev 02 - 7Jul2003 - Entries are no longer returned from POSTs, instead they are retrieved via GET. Cleaned up figure titles, as they are rendered poorly in HTML. All content-types have been changed to application/atom+xml. Rev 01 - 5Jul2003 - Renamed from EchoAPI.html to follow the more commonly used format: draft-gregorio-NN.html. Renamed all references to URL to URI. Broke out introspection into it's own section. Added the Revision History section. Added more to the warning that the example URIs are not normative.99. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC 2246, January 1999. [RFC2396] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998. [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A. and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. [1] <http://www.imc.org/atom-syntax/index.html> Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page19]17] Internet-Draft The Atom Publishing ProtocolSeptember 2004March 2005 Authors' Addresses Joe Gregorio (editor) BitWorking, Inc 1002 Heathwood Dairy Rd. Apex, NC 27502 US Phone: +1 919 272 3764EMail:Email: joe@bitworking.com URI: http://bitworking.com/ Robert Sayre (editor) Boswijck Memex Consulting 148 N 9th St. 4R Brooklyn, NY 11211 USEMail:Email: rfsayre@boswijck.com URI: http://boswijck.com Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page20]18] Internet-Draft The Atom Publishing ProtocolSeptember 2004March 2005 Intellectual Property Statement The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org. The IETF has been notified of intellectual property rights claimed in regard to some or all of the specification contained in this document. For more information consult the online list of claimed rights. Disclaimer of Validity This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Copyright Statement Copyright (C) The Internet Society(2004).(2005). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page21]19] Internet-Draft The Atom Publishing ProtocolSeptember 2004March 2005 Acknowledgment Funding for the RFC Editor function is currently provided by the Internet Society. Gregorio & Sayre ExpiresMarch 22,September 19, 2005 [Page22]20] ----