快速业务通道

BlogEngine.Net架构与源代码分析系列part6:开放API

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

MetaWeblog与BlogImporter

一款优秀的Blog系统少不了一些公开的API。BlogEngine.Net实现了标准的MetaWeblog API接口来允许用户通过客户端软件来发布自己的Blog,此外它还实现了将其它Blog系统中的文章(标准格式的BlogML或Rss)导入到BlogEngine.Net中来的BlogImporter接口,在这篇文章里我将对这些开放部分进行详细的介绍,对于涉及到的一些相关知识点也给出链接或做简单的描述。

MetaWeblog API使用标准的Http协议封装的XMLRPC实现(类似于WebService中的Soap协议)

1.首先让我们了解一下什么是MetaWeblog API

MetaWeblog API (MWA)是一套编程接口,允许外面的程序能取得和设置Blog文章的文本或属性。它是建立在XMLRPC接口之上,并且已经有了很多的实现。

2.MetaWeblog API有三个基本的函数规范:

metaWeblog.newPost (blogid, username, password, struct, publish) 返回一个字符串,可能是Blog的ID。

metaWeblog.editPost (postid, username, password, struct, publish) 返回一个Boolean值,代表是否修改成功。

metaWeblog.getPost (postid, username, password) 返回一个Struct。

其中blogid、username、password分别代表Blog的id(注释:如果你有两个Blog,blogid指定你需要编辑的blog)、用户名和密码。由于篇幅有限,关于MetaWeblog API的更多信息请参考文末的链接部分。

3.BlogEngine.Net中的MetaWeblog API的实现分析

BlogEngine.Net的XMLRPC调用主要是由BlogEngine.Core.API.MetaWeblog命名空间下的几个类型来完成的。

首先客户端软件通过Http协议向MetaWeblogHandler提交了一个标准的XML请求,MetaWeblogHandler是一个HttpHandler,之后MetaWeblogHandler执行ProcessRequest来处理这个请求,最后将处理结果再封装为XML返回给客户端软件。

下面让我对这部分涉及到的几个类型做一个简单的介绍:

MetaWeblogHandler:不用说了,处理的主逻辑部分,ProcessRequest是处理的入口点,将一些具体处理的部分委托给一些私有成员,例如:

internal string NewPost(string blogID, string userName, string password,
MWAPost sentPost, bool publish)

XMLRPCRequest:是对一个HttpRequest信息提取以后的封装,里面是一些解析XML提取信息的相关属性与方法,例如远程调用方法名,参数,文章信息等。

XMLRPCResponse:与XMLRPCRequest是对应的,它的Response方法会将执行结果生成XML并传递给HttpResponse之后返回给客户端。

还有一些类似于MWABlogInfo,例如MWAMediaObject,MWAPost等的结构是对于业务对象类型数据提取信息的封装,主要是为了交换信息而定义的。

从BlogEngine.Net的实现上看,它支持很多标准的协议,这些协议很多都是基于XML进行通信的,而BlogEngine.Net一般都是通过HttpHandler来处理这些标准的。

BlogEngine.Net的导入和导出Blog文章的实现分析

BlogEngine.Net的导入支持Rss和BlogML两种格式,导出支持BlogML格式(也具有Rss的请求链接,后续文章将讲解)。登录以后进入Settings我们发现在页面的最底部提供了导入和导出功能的两个按钮,查看codebefore的代码我们看到这两个按钮的请求地址为:

<input type="button" value="<%=Resources.labels.import %>"
onclick="location.href=''http://dotnetblogengine.net/clickonce/blogimporter/
blog.importer.application?url=<%=Utils.AbsoluteWebRoot %>&username=<%=Page.User.Identity.Name %>''" />
<input type="button" value="<%=Resources.labels.export %>"
onclick="location.href=''blogml.axd''" />

原来在导入时会向http://dotnetblogengin

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号