我还记得我大学毕业的时候,第一份工作是delphi的,当时delphi6刚刚出来,在新的程序里面有个叫做soap的,也就是我们那时候通常说的webservice。当然现在webservice有时候也会被人用来称呼restful api,所以为了更精确的定义,其实应该叫xml webservices。
xml webservices其实包含三部分标准:SOAP,WSDL,UDDI。
我们今天着重看soap.soap首先就是定义了传输数据的格式,同时soap也是基于xml。所以不管你的webservice是如何定义参数和返回值的,其实在传输过程中都是符合soap规范的xml。
如果你有疑问的话,我们用soapui做一下测试。我们用vs.net做一个最简单的helloworld方法的webservice。
[WebMethod] public string HelloWorld() { return "Hello World"; }
下图则是返回的xml
所以我不明白为什么这么多人会用xml webservice用json字符串传输格式。因为soap本身的定义就是简单对象访问协议(Simple Object Access Protocol),换句话说soap定义了如何把简单类型,数组类型,结构数据类型序列化格式。soap本身就具有传输任何数据格式的能力!这个能力是等同于json的!而用json字符串,传输格式就是xml套着json,不是多此一举吗?而且很多不合格的程序员还会用拼接字符串的方式拼接json。
如下面代码,我们用xml webservice传输一个采购订单(PO).
public class POMain { public string POID { get; set; } public DateTime PODate { get; set; } public ListPODetailList { get; set; } } public class PODetail { public string ItemID { get; set; } public int Number { get; set; } }
[WebMethod] public void AddPO(POMain po) { }
大家可以看到这是一个非常复杂的数据格式,数据本身是一个c#的类,类里面还有子对象的列表字段。
soapui会显示传输的数据,如下图格式:
而vs.net会跟踪到,
我在想也许是某些不太负责的培训学校在推广这种webservice(soap)传json字符串的歪方式,我希望各位程序员同志能转变这种歪方式,走在正道上,用soap标准传输数据格式,即用简单数据,数组,类(其实是结构)方式传输数据。如果想用json可,可以用restful api ,json rpc,而不是soap webservice传json字符串。