BlunderLab Notebook
B040701 |
|
This material was captured from the Atom API Quick Guide. It is here for off-line consultation and also for establishment of sources. The page was captured this way because I couldn't accomplish a Save As ... MHT with my current security settings. -- dh:2004-07-09-13:51 -0700
Written by Joe Gregorio
The current revision of the AtomAPI is contains quite a few changes from previous revisions. All of those changes have been talked about seperately, but when put together represent a fairly large change to the API. Here is Quick Reference for the AtomAPI which also highlights those changes.
The URIs in the draft AtomAPI RFC are not normative, they are examples. The draft RFC isn't about specifying the form of the URLs that are to be used. Yes, there are guidelines you should follow when creating URIs, but those are just general guidelines. That is an important document and if you're creating server side software you should know it already.
In the end, it's the server that controls the URI space for that domain. Now, for convenience that space may be mapped to a file system hierarchy, but again, there's no requirement for that to be true. So what does the RFC specify? It lays out the formats of the files that can be returned, and the actions that can be performed on the URIs. Note that URIs are embedded in some of those formats. That embedding, that intertwingling of format and URI, is the crux of hypertext, and we are using HTTP as our protocol, the Hypertext Transfer Protocol. Here then is an abbreviated description of the AtomAPI as it stands today, with all the example URIs contracted into short names. Outlined first are the different types of URIs the AtomAPI deals with. Different types of URIs are distinguished by the methods that are allowed to act on them, their actions, and the content-types that they accept.
URI Type | HTTP Method | Content Type | Return values |
---|---|---|---|
Post | POST | AtomEntry | Returns an Edit URI in the Location: header. |
Edit | GET, PUT, DELETE | AtomEntry | |
Feed | GET | AtomFeed |
Several things are important to note here. First is that both weblog
entries and comments on those entries are both created using a Post
URI. Now they are probably going to be different URIs, but they are the
same type of URI, i.e. a URI that accepts a POST with a
body of a filled in Atom Entry and as a consequence creates a new
resource based on that Entry. How to discover the types of URIs and what
they are used for is discussed later.
All of the discovery uses a link
tag. The link
tag from HTML will be used in (X)HTML, and the same tag will be used
in the Atom format, with the restriction the value of the rel
attribute is case sensitive.
For creating a new site Entry, the link tag is used. Note
that a link tag is used in both HTML and in the Atom format. A
link tag of the following format points to the Post
URI for a site. In HTML the link tags are always found in the head
element, while in Atom they may appear as children of the Feed
and entry
elements. In the case of Post
,
the link tag is found in HTML and as a child of the Feed
element only.
<link rel="service.post"
type="application/x.atom+xml"
href="URI for Posting goes here"
title="The name of the site.">
Note: Multiple link tags may appear together and can be distinguished by having different 'rel', 'type' and 'title' attributes.
Edit
URI is used to edit an existing Entry.
To edit the Entry the client does a GET on the URI to retrieve
the Atom Entry, it then modifies the Entry and then PUTs the
Entry back to the same URI. Use the DELETE method on the URI to
remove the Entry. Note that an Entry could be either a full
Entry on a site, or a comment.
A link tag in either HTML or Atom of the following form will point to the URI for editing an Entry.
<link rel="service.edit"
type="application/x.atom+xml"
href="URI that handles editing "
title="Desc/title of Entry.">
The Feed
URI is used to retrieve an Atom
feed. Note that the feed may contain just Entries for
syndication, or may contain additional link tags so that it may
be used for browsing/navigating around to other Atom feeds.
A typical feed for syndication would be indicated by a link tag of the form:
<link href='URI of feed goes here'
type='application/x.atom+xml'
rel='feed'
title='A nice descriptive title'/>
If a feed contains extra link tags for navigation, such a feed might be supplied specifically for a weblog publishing client to use, then it is of the form:
<link href='URI of feed goes here'
type='application/x.atom+xml'
rel='feed.browse'
title='A nice descriptive title'/>
Or
<link href='URI of feed goes here'
type='application/x.atom+xml'
rel='prev'
title='A nice descriptive title'/>
<entry xmlns="http://example.com/newformat#" >
<title>My First Entry</title>
<summary>A very boring entry...</summary>
<author>
<name>Bob B. Bobbington</name>
<url>http://bob.name/</url>
</author>
<issued>2003-02-05T12:29:29</issued>
<created>2003-02-05T14:10:58Z</created>
<modified>2003-02-05T14:10:58Z</modified>
<link rel="alternate" type="text/html"
href="http://example.org/reilly/2003/02/05#My_First_Entry"/>
<id>urn:example.org:reilly:1</id>
<content type="application/xhtml+xml" xml:lang="en-us">
<p xmlns="...">Hello, <em>weblog</em> world! 2 < 4!</p>
</content>
</entry>
<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<link rel="next" type='application/x.atom+xml'
title="Next 20 Entries" href="http://.."/>
<link rel="prev" type='application/x.atom+xml'
title="Previous 20 Entries" href="http://.."/>
<link rel="comments" type='application/x.atom+xml'
title="Last 20 Comments" href="http://.."/>
<link rel='service.post' type='application/x.atom+xml"
title="Create a new post on intertwingly.net" href=".."/>
<entry>
<id>http://example.org/blog/1630.atom</id>
<link rel="alternate" type="text/html"
href="http://example.org/blog/1630.html" />
<link rel="service.post" type='application/x.atom+xml'
href="/blog/1630.atom-new-comment" title="Add a comment."/>
<link rel="comments" type='application/x.atom+xml'
title="Comments on Entry 1630" href="/blog/1630.atom" />
<link rel="service.edit" type='application/x.atom+xml"
href="/blog/1630.atomapi" />
<title>One year ago today...</title>
<content type="application/xhtml+xml" mode="xml">
<div xmlns="http://www.w3.org/1999/xhtml">Microsoft
<a href="http://www.intertwingly.net/blog/945.html">
inhaled a blogger</a>.  Now it looks like
he is attempting to
<a href="http://www.razorsoft.net/weblog/2003/10/28.html">
resurface</a>...
</div>
</content>
<issued>2003-10-29T20:52:57-05:00</issued>
<modified>2003-10-29T20:52:57-05:00</modified>
</entry>
<entry>
<id>http://example.org/blog/1628.atom</id>
<link rel="alternate" type="text/html"
href="http://example.org/blog/1628.atom" />
<link rel="service.post" type='application/x.atom+xml'
href="/blog/1628.atom-new-comment" title="Add a comment"/>
<link rel="comments" type='application/x.atom+xml'
title="Comments on Entry 1628" href="/blog/1628.atom" />
<link rel="service.edit" type='application/x.atom+xml"
href="/blog/1628.atomapi" />
<title>Is <content> required on a POST?</title>
<content type="application/xhtml+xml" mode="xml">
<div xmlns="http://www.w3.org/1999/xhtml">
I've kicked off what I intend to be a series of
discussions leading up to the creation of a
validation test suite for Atom implementors
with the following question on the
<a href="http://www.imc.org/atom-syntax/index.html">
atom-syntax mailing list</a>:
<a href="http://www.imc.org/atom-syntax/mail-archive/msg00908.html">
Is content required on a POST</a>?
</div>
</content>
<issued>2003-10-29T05:24:12-05:00</issued>
<modified>2003-10-29T05:24:12-05:00</modified>
</entry>
</feed>
You are navigating Orcmid's Lair |
created 2004-07-09-1358 -0700 (pdt) by orcmid |