前段时间公司的办公环境切换到云,顺便清理了外网权限,导致我的外发权限没有了。所以现在很多新的博客都只能发到公司内部博客了,这里的更新速度就变慢了点。不过这里也是不会废弃的,还是会抽空在这里发
最近其中一项工作,是分析本行业欧洲项目的IT系统集成状况,所以稍微了解了一下XML-RPC,有一些想法记录一下
一、XML-RPC的本质
只要熟悉web service,要掌握XML-RPC就非常简单,因为它们本质上是一样的
无论以何种方式实现RPC,都需要解决2个问题,第一是传输问题,即系统间必须有通讯链路,消息才能传输;第二是数据格式问题,系统间的数据,必须能够互相解析
XML-PRC解决这2个问题的方法是:用HTTP作为传输层,用XML传递数据格式
以client的流程举例(server端类似)
发送XML-RPC请求,会经过以下几个步骤
1、首先将请求的格式(方法名、方法参数等)封装成XML格式的数据(XML格式是由XML-RPC规范规定的)
2、然后将XML数据放到HTTP请求体中
接收XML-RPC响应,会经过以下几个步骤
1、从HTTP响应中取出XML
2、将XML解析为本地数据
二、XML-RPC解决的问题,和没有解决的问题
前面说过,XML-RPC可以解决2个问题,第一个就是RPC的能力,另一个由于XML-RPC规范中定义的数据结构是通用的,所以也解决了异构系统集成的问题,比如
<int>23</int>
这个参数,在JAVA平台可以处理为int类型,在.NET平台也可以解析为对应的数据类型
但是,XML-RPC规范中没有规定安全的问题如何解决,还有如何公开发布一个XML-RPC服务,在规范中也没有明确的说明。但是其实我觉得这也是有利有弊,XML-RPC的规范是非常简单的,上个厕所的时间就可以读完:
http://xmlrpc.scripting.com/spec.html
因此,XML-RPC也是相当轻量级的,在各个平台也有成熟的实现(JAVA平台常用的实现是Apache XML-RPC)。所以,在简单的集成场景下,放弃笨重的web service,选择轻量级的XML-RPC,其实也是不错的选择
三、XML-RPC在JAVA平台的实现思路
理解了XML-RPC的本质,实现起来并不困难
对于client,首先用一个组件将调用请求包装为XML数据,然后用HTTP组件(比如commons-http),封装HTTP消息并发送;收到的响应,也先用HTTP组件处理得到XML,再从XML中还原得到本地数据,继续进行业务处理
对于server,有一种方式是通过ServerSocket侦听HTTP请求,然后进行处理,但是这样显然太麻烦。所以更好的选择是基于JAVA平台的Servlet规范来实现,将HTTP处理的部分交给servlet容器来完成,只需要关注怎么实现method的路由,以及XML的转换即可
这里也有2种选择,第一种是为每个XML-RPC服务开发一个单独的Servlet,这样的好处是省略了方法路由的处理;缺点是如果XML-RPC服务很多的话,会有很多的Servlet,并且也不利于动态扩展。第二种办法就是采用“front-end controller”的设计模式,只开发唯一的一个Servlet,在里面进行方法路由,根据client请求的方法名,映射到不同的业务实现类。阅读cxf的源码可以发现,cxf正是采用这种思路来实现
四、XML-RPC的前景
前面说过,XML-RPC是相当轻量级的异构系统RPC规范,我个人很喜欢轻量级的技术。但是XML-RPC目前基本上被web service取代了,这里面可能有XML-RPC先天不足的原因,另外商业的推广可能是更重要的原因。(web service在前十年得到了很多IT巨头厂商的大力推广)以IBM为典型代表的IT龙头老大很擅长这套,先发明一个BUZZ-WORD,然后围绕着出一系列解决方案,然后赚一波钱,接着再发明下一个BUZZ-WORD,其实回头看看,很多时候不是什么新东西,只是包装得很好
另一方面,前段时间突然又重新流行起来的RESTful,也是直接批判了XML-RPC,当然说的也不无道理。但是无论如何,我个人的看法是,技术没有好坏之分,只有适用场景。对于简单的集成场景,很多时候XML-RPC可以满足需求,又很简单,那么也可以作为一个选择
五、web service
web service本质上和XML-RPC完全是一样的,也是遵循本地数据-XML-HTTP这个模型。但是web service在XML这层,采用的是SOAP协议(其实就是更复杂的XML-RPC),原理上毫无区别
web service有明显的“第二版效应”,竭力想弥补第一个版本的缺失,因而在功能上非常的“丰富”和“复杂”,其中有些是很好的,有些是用不上并且相当笨重的
web service相对于XML-RPC,在服务发布上有比较明显的优势。通过WSDL,可以清晰地描述一个服务,然后在client,就可以根据这个WSDL,很容易地生成客户端的代码
另外的一些特性,比如ws-security、wsdd等,很强大,很复杂,很笨重,没用上
- 大小: 4 KB
分享到:
相关推荐
PHP中使用XML-RPC构造Web-Service简单入门.doc
PHP中使用XML-RPC构造Web_Service简单入门.doc
目前进行Web Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。 PHP自身就集成了XML-RPC和SOAP...
Programming Web Services with XML-RPC <br>Simon St. Laurent <br>Joe Johnston <br>Edd Dumbill <br>Publisher: O'Reilly <br>First Edition June 2001 ISBN: 0-596-00119-3, 230 pages
PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是... 我们这里主要是以XML-RPC来简单描述Web Service的交互过程,部分内容来自PHP手册,更详细内容,建议参考手册。
WebServices服务接口调用---基于rpc方式应用。sun-jaxws.xml方式
内容获取HTTP-RPC HTTP-RPC通过Maven Central分发: 提供对使用Web服务以及与常见文件格式和关系数据库进行交互的支持(需要Java 8或更高版本) 取决于客户端;提供对实现Web服务的支持(需要Java Servlet规范3.1或...
介绍 ... 提供对使用Web服务以及与通用文件格式和关系数据库进行交互的支持(需要Java 8或更高版本) -取决于客户端; 提供对实现Web服务的支持(需要Java Servlet规范3.1或更高版本) 注意不推荐
Programming_Web_Services_with_Perl, SOAP,XML-RPC,HTTP......
站点的Web1.0的Web 2.0 (ajax, flex and flex-ws-amf) Web Services: SOAP / XML-RPC 通过JDBC驱动程序的数据库 ⽬录: LDAP ⾯向消息的服务通过JMS Service: POP3, IMAP, SMTP FTP 服务 等等其他协议
we cover two basic web services to get our feet wet — XML-RPC and REST. The Internet UPC database is an XML-RPC-based service, while Amazon uses REST. Preface [ 2 ] We will create code to call XML-...
第8章 XML和XML-RPC 第3部分 E-mail服务 第9章 E-mail的编写和编码 第10章 简单邮件传输协议(SMTP) 第11章 POP 第12章 IMAP 第4部分 多用途的客户端协议 第13章 FTP 第14章 数据库客户端 第15章 SSL 第5部分 ...
| ├── zheng-upms-rpc-service -- rpc服务提供者 | └── zheng-upms-server -- 用户权限系统及SSO服务端[端口:1111] ├── zheng-cms -- 内容管理系统 | ├── zheng-cms-common -- cms系统公共模块 | ├──...
Userland在1998年发布了一个XML-RPC规范。 1999年9月SOAP0.9提交IETF。 2000年5月8日,SOAP1.1作为Note提交W3C。IBM发布Java SOAP实现,并给开放源代码组织Apache XML Project。Sun公司将Web服务集成到J2EE中。 2000...
You’ll learn how to use this language with JSON, XML, and other web service technologies. The second edition has been updated to include even more hands-on examples to apply to your own applications...
Chapter 7, Working with Web Services – XML-RPC, SOAP, and REST, introduces you to various API protocols such as XML-RPC, SOAP, and REST. You can programmatically ask any website or web service for ...
这是本很有用的书,描述了网络服务基本理论及SOAP概念,例举了很多用各种perl module构建网络服务的源代码,比如非常常用的SOAP::Lite, XML-RPC等。
简单的servlet,它通过XML-RPC接口公开handle.net句柄系统(r)提供的API。