`

XML-RPC与web service

阅读更多
前段时间公司的办公环境切换到云,顺便清理了外网权限,导致我的外发权限没有了。所以现在很多新的博客都只能发到公司内部博客了,这里的更新速度就变慢了点。不过这里也是不会废弃的,还是会抽空在这里发

最近其中一项工作,是分析本行业欧洲项目的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

    PHP中使用XML-RPC构造Web_Service简单入门.doc

    PHP中使用XML-RPC构造Web_Service简单入门.doc

    PHP采用XML-RPC构造Web Service实例教程

    目前进行Web Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。 PHP自身就集成了XML-RPC和SOAP...

    Programming Web Services with XML-RPC

    Programming Web Services with XML-RPC &lt;br&gt;Simon St. Laurent &lt;br&gt;Joe Johnston &lt;br&gt;Edd Dumbill &lt;br&gt;Publisher: O'Reilly &lt;br&gt;First Edition June 2001 ISBN: 0-596-00119-3, 230 pages

    php的xmlrpc详细讲解与实例

    PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是... 我们这里主要是以XML-RPC来简单描述Web Service的交互过程,部分内容来自PHP手册,更详细内容,建议参考手册。

    WebServices服务接口调用---基于rpc方式应用

    WebServices服务接口调用---基于rpc方式应用。sun-jaxws.xml方式

    HTTP-RPC:轻量级REST for Java

    内容获取HTTP-RPC HTTP-RPC通过Maven Central分发: 提供对使用Web服务以及与常见文件格式和关系数据库进行交互的支持(需要Java 8或更高版本) 取决于客户端;提供对实现Web服务的支持(需要Java Servlet规范3.1或...

    HTTP-RPC:Java的轻量级REST

    介绍 ... 提供对使用Web服务以及与通用文件格式和关系数据库进行交互的支持(需要Java 8或更高版本) -取决于客户端; 提供对实现Web服务的支持(需要Java Servlet规范3.1或更高版本) 注意不推荐

    Programming_Web_Services_with_Perl

    Programming_Web_Services_with_Perl, SOAP,XML-RPC,HTTP......

    jmeter图文入门教程.pdf

    站点的Web1.0的Web 2.0 (ajax, flex and flex-ws-amf) Web Services: SOAP / XML-RPC 通过JDBC驱动程序的数据库 ⽬录: LDAP ⾯向消息的服务通过JMS Service: POP3, IMAP, SMTP FTP 服务 等等其他协议

    PHP Web 2.0 Mashup Projects.pdf

    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-...

    Python网络编程基础

    第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系统公共模块 | ├──...

    SOAP最早由Dave Winner、Don Box和Bod Atkinson提出。

    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...

    PHP.Web.Services.APIs.for.the.Modern.Web.2nd.Edition

    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...

    Python Network Programming Cookbook, 2nd Edition - 2017

    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 ...

    Web Services With Perl

    这是本很有用的书,描述了网络服务基本理论及SOAP概念,例举了很多用各种perl module构建网络服务的源代码,比如非常常用的SOAP::Lite, XML-RPC等。

    Handle Web Service-开源

    简单的servlet,它通过XML-RPC接口公开handle.net句柄系统(r)提供的API。

Global site tag (gtag.js) - Google Analytics