请不要在webservice(soap)传输json字符串了!(程序初心者经常犯错误系列之一)

  我还记得我大学毕业的时候,第一份工作是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.
  请不要在webservice(soap)传输json字符串了!(程序初心者经常犯错误系列之一)_第1张图片

      下图则是返回的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 List PODetailList { get; set; }
    }

    public class PODetail
    {
        public string ItemID { get; set; }

        public int Number { get; set; }

    }

  

 [WebMethod]
 public void AddPO(POMain po)
 {

  }

     

  大家可以看到这是一个非常复杂的数据格式,数据本身是一个c#的类,类里面还有子对象的列表字段。

   soapui会显示传输的数据,如下图格式:

  请不要在webservice(soap)传输json字符串了!(程序初心者经常犯错误系列之一)_第2张图片

  而vs.net会跟踪到,

  请不要在webservice(soap)传输json字符串了!(程序初心者经常犯错误系列之一)_第3张图片

  我在想也许是某些不太负责的培训学校在推广这种webservice(soap)传json字符串的歪方式,我希望各位程序员同志能转变这种歪方式,走在正道上,用soap标准传输数据格式,即用简单数据,数组,类(其实是结构)方式传输数据。如果想用json可,可以用restful api ,json rpc,而不是soap webservice传json字符串。

 

转载于:https://www.cnblogs.com/shiningplus/p/6844431.html

你可能感兴趣的:(请不要在webservice(soap)传输json字符串了!(程序初心者经常犯错误系列之一))