赵斌

赵斌的博客

他的个人主页  他的博客

[译]AtomPub Protocol是如何工作的

赵斌  2009年08月18日 星期二 19:46 | 2319次浏览 | 0条评论

原文通过blogbus2zeuux工具同步发布:http://antmanler.blogbus.com/logs/44475464.html

文章发布时间:2009/8/18/4/48

这是我在写blogbus2zeuux时看到的一篇文章,原文地址:" how atom works ".今天早起起来把它翻译了一下,希望对感兴趣的人有所帮助,本文是我初次进行翻译工作,若有纰漏还请严厉指正!
今天终于生成了自己的VPS推荐码,欢迎大家使用: 100023219_20090917242

Atom Publishing Protocol是如何工作的

与其他关于RSS和Atom的出版的图书不同, RSS in Atom action 将重点介绍Atom Publishing协议。 因此,我密切关注协议的开发。 这篇博客是对当前Atom版本的总结(基于 Draft 04 发布于2005年5月10日,译注:最新标准是RFC 5023) 。 这是我即 早些时候发布的关于Atom API 0.9的文章 Atom in a nutshell 后又一篇关于Atom的博客 。

Atom Publishing Protocol(还在制订中) 是一种新的为博客,wiki或其他类型的内容管理系统通过提供交互的web服务协议,通过的简单的利用HTTP传输XML(XML over HTTP),不需任何额外的SOAP或XML - RPC。您的代码使用HTTP请求提供的谓词GET ,POST, PUT和DELETE(正如他们所指代的事件一样)与Web资源集合交互。下面我将介绍它是如何工作的。

探索 workspace 和 collections

首 先,您向服务器的Atom链接发起带验证的GET请求(authenticated GET),以获得关于当前可用服的描述。服务器返回了一个(描述)Atom服务的XML文件,其中列出了一些列workspace,每个 workspace包含对应的collection集合。一个workspace可能是一个博客,wiki命名空间或内容集等通过您用户名/密码可以访问 的资源。

每个workspace可包含两种类型的集合(collection):项目(entries)和资源(resources)。 在最终的标准中可能会允许(至少)五种类型的集合:条目(entries),类别(categories),模板(templates),用户 (users)和集成资源(generic resources)。

下面的例子是一个博客用户的XML服务文档,该用户可以访问两个博客“My Blog”和“Marketing Team Blog” :

<?xml version="1.0" encoding='utf-8'?>
<service xmlns= "http://purl.org/atom/app#" >
     <workspace title= "My Blog" >
        <collection contents= "entries" title= "Blog Entries"
            href= "http://localhost:8080/roller/atom/myblog/entries" />
        <collection contents= "generic" title= "File Uploads"
            href= "http://localhost:8080/roller/atom/myblog/resources" />
     </workspace>
     <workspace title= "Marketing Team Blog" >
         <collection contents= "entries" title= "Blog Entries"
             href= "http://localhost:8080/roller/atom/marketingblog/entries" />
         <collection contents= "generic" title= "File Uploads"
             href= "http://localhost:8080/roller/atom/marketingblog/entries" />
     </workspace>
</service>

关于collections

既然一个workspace是一个博客,那麽博客一般都包含一系列的条 目,上传文件,资源和类别等等这样的集合。所有这些集合都通过和HTTP谓词所指代的同样的方式(GET,POSTD,ELETE,PUT)处理和作出响 应。所有这些(集合)支持分页,因此,服务器可以将collections以一个易于处理的数据块方式返回。同时还支持按日期查询(集合),因此,您可以 通过开始和结束日期过滤器来过滤collections。

为了获得一个collection,可以向网址(就是服务文档collection的' href '列出的地址) 发起一个GET请求。

服 务文档为每个collection都指定了一个URI。如果你向一个URI 发出GET请求,你会得到一个包含Atom Collection 的XML文件,其中列出了前X个该collection中的成员。如果collection中的成员多于X个,那么该文件还将包含指向下一批成员的URI ,您可以使用它来获得下一批成员。您也可以在HTTP的头部通过Range来指定一日期范围,这样可以限制返回的collection只包含那些在开始和 结束日期之间的条目。

下面的例子是一个通过向上例中My Blog的Blog Entries发出GET请求获得的collection的XML 文档。

<?xml version="1.0" encoding='utf-8'?>
<collection xmlns= "http://purl.org/atom/app#"
   next= "http://localhost:8080/roller/atom/myblog/entry/77088a1" >
   <member title= "The Connells: Fun and Games"
         href= "http://localhost:8080/roller/atom/myblog/entry/7700a0"
         updated= "2005-04-16T23:07:08-0400" />
   <member title= "The Connells: Boylan Heights"
         href= "http://localhost:8080/roller/atom/myblog/entry/7700c9"
         updated= "2005-04-15T23:06:09-0400" />
   <member title= "The Connells: Gladiator"
         href= "http://localhost:8080/roller/atom/myblog/entry/7700c8"
         updated= "2005-04-14T14:05:31-0400" />
</collection>

collection的每一个成员都包含一个tile和一个URI。要获collection的成员,只需向URI发出GET请求。 如果要删除使用DELETE请求。如果要更新则利用PUT请求。下面例子是你向上例中第一个成员包含的URI发出GET请求时可能回收到的该条目的 XML:

<entry xmlns= "http://purl.org/atom/ns#" >
  <title> The Connells: Fun and Games </title>
  <id> 7700a0 </id>
  <updated> 2005-06-01T19:07:45Z </updated>
  <content type= "html" >
     Let me tear down into your heart
     Let me take a seat and stay awhile
     Let me have a half of your whole 
     Let me keep it for myself awhile 
  </content>
</entry>

要向collection中添加新的成员,您只需向collection的URI提交POS请求。如果您要发布一个新的条目,就将这个条目以XML格式作为数据提交 。如果是一个上传文件,直接将文件作为数据提交。

就这些。很简单吧?

如何进行身份验证?

在 Atom 标准中要求服务器的支持HTTP digest 身份验证,这可能给一些博客的实现带来困难(取决于他们的ISP和Web服务器) ,或更容易实现的CGI认证(我认为 WSSE 会将CGI模式作为人证方式,这也是我的Atom实现中所使用的方式) 。

如何支持HTTP受限的设备?

有 些设备具有已阉割的HTTP客户端。例如,有些Java J2ME支持的手机不能发出HTTP PUT或DELETE请求 。如果你不能使用PUT或DELETE请求,您可以使用一个用SOAP包装的POST请求,指定Web-Method为PUT或DELETE 。Atom服务器被要求必须支持SOAP的POST和能够返回以SOAP信封形式的结果。

关于条目的"草稿"与"发布"?

这仍然悬而未决。一些人建议针对条目不同的状态使用不同的collection(Draft,Approved,Published等) 。但更多倾向于有可能在Atom格式引进一个新的元素来描述条目的状态。

总结

下 面是我对当前使用的Atom protocol(译注:最新草案与作者描述可能会有出入)的总结。我认为这对现有的博客的API在功能和设计上的巨大改善。并且它易于实现。之所以这么 说,是因为我即将完成我的服务器和客户端的实现。我希望在不久就可以发布它。这个发布版可能独立于Roller(Atom服务器)和我的 BlogClient UI(Atom 客户端)发布 。

如果希望获得改善该协议的机会,请加入 Atom Protocol mailling list 参与讨论。最后一次呼吁规格变化现在 定于10月(译注:2005年) 。如果又Atom方面的专家阅读这篇博客:欢迎 留言 指出错误。

关于作者 : Dave Johnson

DaveJohnson

"RSS in Atom action"的作者,现在就职于IBM/Rational

I'm Dave Johnson. I'm a software developer, open source advocate, blogger and webgeek from Raleigh, North Carolina. I'm a member of the Apache Software Foundation, PMC chair for Apache Roller and a mentor for Apache Incubator projects JSPWiki and SocialSite.

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !

暂时没有评论

Zeuux © 2024

京ICP备05028076号