我的公司已经使用XML-RPC一段时间,但最近我想知道XML-RPC与普通XML相比有什么好处。首先,它是可怕的“肥胖”,考虑:
<struct>
<member>
<name>ROOM_ID</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>CODE</name>
<value>
<string>MR-101</string>
</value>
</member>
<member>
<name>NAME</name>
<value>
<string>Math Room</string>
</value>
</member>
<member>
<name>CAPACITY</name>
<value>
<int>30</int>
</value>
</member>
</struct>
与此相比:
<room><ROOM_ID>1</ROOM_ID><CODE>MR-101</CODE>
<NAME>Math Room</NAME><CAPACITY>30</CAPACITY></room>
甚至这个:
<room ROOM_ID=1 CODE=MR-101 NAME=”Math Room” CAPACITY=30 />
其次,XML-RPC似乎相当普遍,但并不是普遍存在,而且我对C ++和PHP中对它的支持印象不深。我在使用这两种语言尝试过的所有库都遇到了问题。
第三,在我看来,我可以像使用XML-RPC一样使用纯XML进行远程过程调用。 {(9/9/2009):每种语言都有用于将语言级对象序列化为XML的库。 XML和XML-RPC都需要定义应用程序级模式,例如,字段应如何拼写,但不需要定义任何其他模式。许多人使用纯XML进行RPC调用。}
那么XML-RPC的增值是什么?
答案 0 :(得分:18)
答案 1 :(得分:10)
主要优点是有人已经为您制定了调用架构。这在具有反射的语言中特别有用,你可以盲目地将一个复杂的结构传递给RPC调用,它将解决如何将它转换为XML的问题。它在C ++中的价值较低,你必须告诉XML-RPC库所有数据类型都是明确的。
你是对的,它没有风靡世界。你在图书馆找到的奇怪之处是由于这种低水平的兴趣。我自己用了两个,发现两个都有错误。两者都是放弃软件,所以我无处可以发送补丁,因此我有两个版本的私有补丁版本。叹息。
答案 2 :(得分:2)
XmlRpc的主要价值在于您不必编写代码来生成和解析通过HTTP传递的XML文档,因为XML-RPC是用于表示函数调用的预定义XML模式。
即使库不是最佳,也有一个额外的派生值,因为使用这种类型的系统允许您将远程接口定义为基本语言接口(C ++抽象类,Java接口等),它们独立于用于组件之间通信的线协议。
将接口定义与有线协议(XML-RPC,SOAP等)分开,最终可以在适当的情况下替换备用协议。例如,在我们的系统中,我们使用Hessian为Flex前端公开服务,为.NET前端公开SOAP(Hessian .Net库具有不允许的许可)。
现在坚持使用XML-RPC,您可以选择在未来使用最少量的重构切换到其他协议。
答案 3 :(得分:2)
易于: XML RPC提供
这一切都超过标准XML。
答案 4 :(得分:1)
让我从最后开始,然后倒退:
3)是的,您可以使用纯XML(或纯字符串或二进制协议)进行远程过程调用。区别在于,XmlRpc是一个定义良好的协议,具有许多可用的实现,这意味着a)您不必编写尽可能多的代码,并且b)您可以在线路的另一端与谁进行互操作而无需你或他们不得不处理彼此的代码。 XmlRpc充当桥梁。
2)我会说它是quite ubiquitous :-)我在Java中使用过XmlRpc,因此无法评论C ++ / PHP实现问题。
1)由于上述(3)所致。协议的详细程度是其互操作性的结果和原因。