WebService 从“心”定义
【特别说明:本文档仅属个人心得,大家各取所需】
什么是WebService
DL:听过webservice吗?公司业务需要你来搞一下吧
W:emmm。。。。
W:打开Chrome,找到CSDN,搜索“怎么写webservice”,回车;。。。 。。。
W:哇,真是博大精深,“云雾缭绕”。。。。。。
W:研究了一篇又一篇。。。。。。
DL:做好了吗?
W:快了,快了;
DL:懂了吗?什么是webservice?要如何开发一个webservice服务呢?
W:它是能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据的一种技术。
DL:理解了吗?
嗯?理解了吗?
webservice官网
打开这个官网,看不到任何醒目的解释。所以大可不必去找到底什么是webservice,请记住下面三个关键字:
跨编程语言 + 跨操作系 + 远程调用
记住了吗?
- 是的,我记住了
没记住就再看一遍,记住了请打钩!!!
记住的人才可以看下面的内容,没记住请继续记
三个关键字简明扼要的表达了该技术的NB,那到底真的有那么厉害吗?
跨编程语言:通俗点说就是PHP可以调用Java写好的webservice,Java可以调用C#写好的webservice…
跨操作系统:这个比较好理解,可以用Linux服务器调用Windows发布的webservice…
远程调用:举个栗子,你认识了很多不同地方的小姐姐,你可以通过A地给B地的张某某打招呼,也可以从A地给C地的李某某送祝福…,谨慎使用哈!(因为远程调用需要注意安全)
怎么写webservice?
写之前一定要知道的几个术语:
客户端:调用这个WebService的应用程序
服务端:提供这个WebService的应用程序
当两端不管用什么编程语言或者在何种操作系统上,只要均保持统一的一套标准(规范),那么“跨出一小步”就易如反掌了。
知道了客户端和服务端,以及大致明白了它们如何达到该技术特性的,怕大家不太理解,下面搞个图分析一下:
看图必懂
这套标准到底有多神奇呢?
1、XML+XSD
XML格式封装数据(XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的 返回结果是什么)优点在于它与平台、厂商无关。
XML Schema(XSD)是一套数据类型标准。确保数据能有效传输和有效读取。
2、SOAP
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。
举个栗子更好理解:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
3、WSDL
“物品清单(使用说明书)”:告诉客户端(调用的人)我的地址,我有哪些方法,要怎么调用,参数是什么等。
WSDL(Web Services Description Language)是基于XML的语言,用于描述Web Service及其函数、参数和返回值的文件,通过一个url地址访问。
注意:WebService三大规范:JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。
到这里,我觉得有必要补一下全网很多帖子不足的地方,那就是WSDL的解析,如下:
WSDL 文档是利用这些主要的元素来描述某个 web service 的:
<portType> web service 执行的操作
<message> web service 使用的消息
<types> web service 使用的数据类型
<binding> web service 使用的通信协议
了解了基本元素的含义后,我们上一个还热乎的wsdl文件:
天气预报wsdl
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://WebXml.com.cn/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://WebXml.com.cn/">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><a href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a> <strong>2400多个城市天气预报Web服务</strong>,包含2300个以上中国城市和100个以上国外城市天气预报数据。数据每2.5小时左右自动更新一次,准确可靠。<br />使用本站 WEB 服务请注明或链接本站:<a href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/</a> 感谢大家的支持!<br /><br /><img alt="PDF" title="PDF file" src="http://www.webxml.com.cn/images/icon/pdf.gif" style="vertical-align: middle;" /> <a href="http://www.webxml.com.cn/files/WeatherWsHelp.pdf" target="_blank">接口帮助文档</a> <img alt="ZIP" title="ZIP file" src="http://www.webxml.com.cn/images/icon/zip.gif" style="vertical-align: middle;" /> <a href="http://www.webxml.com.cn/files/about_city.zip">部分城市介绍和气候背景</a> <img alt="ZIP" title="ZIP file" src="http://www.webxml.com.cn/images/icon/zip.gif" style="vertical-align: middle;" /> <a href="http://www.webxml.com.cn/files/city_photo.zip">部分城市图片</a> <img alt="HTML" title="HTML file" src="http://www.webxml.com.cn/images/icon/html.gif" style="vertical-align: middle;" /> <a href="http://www.webxml.com.cn/zh_cn/weather_icon.aspx" target="_blank">天气现象和图例</a><br /> </wsdl:documentation>
<wsdl:types>
...
</wsdl:types>
<wsdl:message name="getRegionDatasetSoapIn">
...
</wsdl:message>
...(太多了,省略)
<wsdl:portType name="WeatherWSSoap">
<wsdl:operation name="getRegionDataset">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><br /><h3>获得中国省份、直辖市、地区;国家名称(国外)和与之对应的ID</h3><p>输入参数:无,返回数据:DataSet。</p><br /></wsdl:documentation>
<wsdl:input message="tns:getRegionDatasetSoapIn"/>
<wsdl:output message="tns:getRegionDatasetSoapOut"/>
</wsdl:operation>
<wsdl:operation name="getRegionProvince">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><br /><h3>获得中国省份、直辖市、地区和与之对应的ID</h3><p>输入参数:无,返回数据:一维字符串数组。</p><br /></wsdl:documentation>
<wsdl:input message="tns:getRegionProvinceSoapIn"/>
<wsdl:output message="tns:getRegionProvinceSoapOut"/>
</wsdl:operation>
<wsdl:operation name="getRegionCountry">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><br /><h3>获得国外国家名称和与之对应的ID</h3><p>输入参数:无,返回数据:一维字符串数组。</p><br /></wsdl:documentation>
<wsdl:input message="tns:getRegionCountrySoapIn"/>
<wsdl:output message="tns:getRegionCountrySoapOut"/>
</wsdl:operation>
<wsdl:operation name="getSupportCityDataset">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><br /><h3>获得支持的城市/地区名称和与之对应的ID</h3><p>输入参数:theRegionCode = 省市、国家ID或名称