大概是在19年、20年那一阵,好多项目对接三方都是要用webservice的soap去做,当时就非常不理解整这么麻烦干啥,为啥不用restful,现在再回顾下这两者,soap的效率虽说不及restful,但是在成熟度和规范性上,确实要比restful要好,尤其是走内网专线,版本迭代较少,双方开发语言不同,交易量也不是很大的项目,用soap协议完成接口调用就非常合理了。

当时也是踩了不少的坑,比如三方发布了server,我们编写client时就要严格遵循wsdl中的规则(比如方法名及参数名等)去调用等等,接下来就分析下webservice中的soap、wsdl、xml的概念和client端编写实例(以公网发布的webservice服务端接口调用为例)。

一、什么是webservice

标准定义:W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。

没做过相关开发的朋友看完概念肯定看不懂,我也不懂,用软件开发角度描述就是:

在传统的程序编码中,存在各种的函数方法调用。通常,我们知道一个程序模块M中的方法A,向其发出调用请求,并传入A方法需要的参数P,方法A执行完毕后,返回处理结果R。这种函数或方法调用通常发生在同一台机器上的同一程序语言环境下。现在的我们需要一种能够在不同计算机间的不同语言编写的应用程序系统中,通过网络通讯实现函数和方法调用的能力,而Webservice正是应这种需求而诞生的。

总结下来webservice就是跨语言跨平台的远程web api调用技术。~

贴:

不管你的Webservice是用什么工具,什么语言写出来的,只要你用SOAP协议通过HTTP来调用它,总体结构都一致。通常,你用你自己喜欢的语言(如VB6或者VB.NET)来构建你的Web service,然后用SOAPToolkit或者.NET的内建支持来把它暴露给Web客户。于是,任何语言,任何平台上的客户都可以阅读其WSDL文档,以调用这个Webservice。客户根据WSDL描述文档,会生成一个SOAP请求消息。Web service都是放在Web服务器 (如IIS)后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器来。Web服务器再把这些请求转发给Webservice请求处理器。请求处理器的作用在于,解析收到的SOAP请求,调用Webservice,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把它送回到客户端。

这一串说的是webservice soap方式从发布到被调用的流程,里面涉及了soap协议、xml、wsdl文档,由这些模块支撑起了整个生命周期。

二、如何调用webservice(SOAP方式)

服务端:生成服务描述文件,以供客户端获取。接收客户端发来的SOAP请求消息,解析其中的方法调用和参数格式。根据WSDL和WSML的描述,调用相应的COM对象来完成指定功能,并把返回值放入SOAP回应消息返回给用户。

客户端:取得服务端的服务描述文件WSDL,解析该文件的内容,了解服务端的服务信息,以及调用方式。根据需要,生成恰当的SOAP请求消息(指定调用的方法,已经调用的参数),发往服务端。等待服务端返回的SOAP回应消息,解析得到返回值。

三、soap和wsdl的概念

(SOAP方式)最普遍的一种说法就是,WebService = SOAP + HTTP + WSDL。其中,SOAP(Simple Object AccessProtocol)协议是webservice的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的计算服务处理。这里WSDL(WebServices Description Language)web 服务描述语言也是一个XML文档,它通过HTTP向公众发布,公告客户端程序关于某个具体的 Web service服务的URL信息、方法的命名,参数,返回值等。

1、soap协议

SOAP 指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。可自定义,易于扩展。一条 SOAP 消息就是一个普通的 XML 文档。

2、wsdl文档

WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。

描述的挺抽象的,不深究原理直接从开发的角度理解,soap协议就是对于client和server,传接参都是用xml文档格式作为一条消息。wsdl文档就是server发布该文档后,client的开发必须遵从该文档中的接口规范(方法、参数等)进行开发。

四、整合一、二、三概念
Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力。
Webservice 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。
soap是一种简单基于xml的轻量协议,用户web上交换结构化信息和类型信息。
soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为: text/xml任何数据都可以xml化。
WSDL基于XML格式,用来描述Web服务。WSDL文档可以看成是客户端和服务器之间的一个协约。
五、使用公网webservice server api编写client及观察数据结构

以前在自己公众号里写过一个调百度天气的好像,年代久远想不起来了,调一个查手机号归属地的吧。

换电脑了,webservice studio没了,胆小如我竟然找了半小时官网下载都没找到。。。焯

来这个网站找个搜手机号归属地的webservice吧: http://www.webxml.com.cn/

先小看一下api的用法,有两个:

1.PNG

wsdl文档内容,其实这里面的标签都另有概念的,在这里就不细致展开了:

2.PNG

调getmobileinfo这个接口吧,主要看看request和response的数据结构:

3.PNG

4.PNG

很明显传接参都是soap消息。不过1333333333这个号好大佬哦。。侵删。

既然server放在公网上了,那么不使用工具调试,用编码方式编写client调用的话,首先第一步是要先下载server端的wsdl。

wsimport -s D:\mobileserver -keep http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

在这里逐渐回想起了当年被支配的恐惧,因为当年的错,现在又犯了哈哈哈哈,首先无论是linux还是windows不到jdk目录下咋都找不到wsimport呢,然后我一开始是下载在idea的项目路径里了,但是带空格下不了,只能执行如上指令了,最后就下载的server的类的包路径,在做client开发时还是保持一致吧,自己瞎改会出现成片的爆红好像。

5.PNG

client main方法,按wsdl的规范来,挺好调用的:

6.PNG

六、SOAP与RESTful区别

REST 构建的系统其系统的扩展能力要强于SOAP,这可以体现在它的统一接口抽象、代理服务器支持、缓存服务器支持等诸多方面, 而SOAP的成熟性可以给需要提供给多开发语言的,多传输方式的,对于安全性要求较高的接口设计带来便利。

安全性:SOAP会好于restful
效率和易用性(REST更胜一筹)
成熟度(总的来说SOAP在成熟度上优于REST)

参考文章:

1、webservice和soap原理

2、WebService学习笔记(webservice、soap、wsdl、jws详细分析)

3、WebService SOAP、Restful和HTTP(post/get)请求区别

4、RESTful和SOAP比较


标题:Soap方式调试webservice接口实例
作者:jyl
地址:http://jinyunlong.xyz/articles/2022/01/10/1641798597783.html