在博客编辑接口介绍一文中,我提到了博客编辑接口的各种用途和好处。不过对于不具备专业知识的博客用户来说,为博客客户端程序(如Windows Live Writer)手动设定定博客引擎的编辑接口是比较困难的,因此博客引擎应该提供自动发现机制,使外部程序能够简单地通过博客网站地址找到博客编辑接口。
先来看看Windows Live Writer是如何发现博客引擎的编辑接口的。
运行Windows Live Writer,点击菜单栏的“工具->选项”,弹出“选项”对话框,在左栏中选中“账户”,在右栏中点击右上角的“添加”按钮,弹出“添加日志账户”向导。 选择“其他日志服务”并点击“下一步”按钮。
填写“日志主页URL”、“用户名”、“密码”等信息并点击“下一步”按钮。
很快Windows Live Writer提示配置完成,然后用户就可以使用Windows Live Writer发表文章了。
Windows Live Writer发现博客引擎编辑接口的过程如下:
首先,Windows Live Writer根据“日志主页URL”读取博客引擎的主页内容。
主页内容中有这样一行HTML代码:
<link type="application/rsd+xml" rel="edituri" title="RSD" href="http://www.tiray.net/rsd.axd" />
这行HTML代码指出了博客编辑接口的描述文件地址。
接着,Windows Live Writer读取描述文件的内容。
博客引擎返回的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<rsd version="1.0">
<service>
<engineName>BlogEngine.NET 1.4.5.0</engineName>
<engineLink>http://dotnetblogengine.com</engineLink>
<homePageLink>http://www.tiray.net/</homePageLink>
<apis>
<api name="MetaWeblog" preferred="true" apiLink="http://www.tiray.net/metaweblog.axd" blogID="http://www.tiray.net/" />
<api name="BlogML" preferred="false" apiLink="http://www.tiray.net/api/BlogImporter.asmx" blogID="http://www.tiray.net/" />
</apis>
</service>
</rsd>
上面的XML代码实际上实现了一个标准的Really Simple Discovery (简称RSD)。RSD的目的就是帮助外部程序发现博客引擎的各种API接口,使用RSD后,用户只需要知道博客的主页地址、用户名和密码,就可以使用外部程序与博客引擎进行交互。
RSD由以下两部分组成:
1、RSD文件的位置描述
这是通过在博客主页添加以下内容实现的
<link type="application/rsd+xml" rel="edituri" title="RSD" href="YourRSDFileUrl" />
2、RSD文件
RSD文件是以XML格式实现的,其所包含的元素如下:
<service> 容器元素,子元素为:
<engineName> 博客引擎名称
<engineLink> 博客引擎网站地址
<homePageLink> 博客主页
<apis> 容器元素
<apis>的子元素
<api> 可以有多个api元素。api元素有以下四个必需的属性:
"name" api的名称。
"preferred" 布尔值,指示此API是否是博客引擎推荐的首选API。只应有唯一个api元素的preferred属性设置为"true",其它的应设置为"false"。
"apiLink" API地址。
"blogID" 博客ID。如果没有博客ID的话,可以设置为blogID=""。
<api>的可选子元素,用于对API进行详细描述,不是必须的。容器元素为<settings>
<docs> API文档地址。
<notes> 供用户阅读的注释。
<setting> 以"name-value"形式描述的API设置。可以有多个setting元素。
下面是一个完整的RSD文件示例:
<?xml version="1.0" encoding="utf-8"?>
<rsd version="1.0">
<service>
<engineName>BlogEngine.NET 1.4.5.0</engineName>
<engineLink>http://dotnetblogengine.com</engineLink>
<homePageLink>http://www.tiray.net/</homePageLink>
<apis>
<api name="MetaWeblog" preferred="true" apiLink="http://www.tiray.net/metaweblog.axd" blogID="http://www.tiray.net/" />
<api name="BlogML" preferred="false" apiLink="http://www.tiray.net/api/BlogImporter.asmx" blogID="http://www.tiray.net/" />
<api name="sample" preferred="false" apiLink="http://www.tiray.net/" blogID=http://www.tiray.net/" >
<settings>
<docs>http://www.tiray.net/ </docs>
<notes>It's a sample!</notes>
<setting name="Setting1">value1</setting>
<setting name="Setting2">value2</setting>
</settings>
</api>
</apis>
</service>
</rsd>
Really Simple Discovery 1.0由Daniel Berlinger于2002年发布,官方文档地址:http://cyber.law.harvard.edu/blogs/gems/tech/rsd.html
个人认为,Really Simple Discovery更重要的意义是提供了一种自动发现网站服务功能的方法。例如你可以基于与RSD相同的思路,为自己开发的某个Web Service提供自动发现机制,从而让Web Service客户端可以自动找到Web Service地址,这对于开发一个比较通用的Web Service(例如用于用户验证的Web Service?),可能会很有用处的。