WebService的基本介绍和调用实例

来源:互联网 发布:知乎 修改一句话介绍 编辑:程序博客网 时间:2024/06/10 07:51

本文由Markdown语法编辑器编辑完成。

1. WebService的基本介绍

传统上,我们把计算机后台程序(Daemon)提供的功能,称为”服务”(service)。比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个”服务”。通俗地说,”服务”就是计算机可以提供的某一种功能。

根据来源的不同,”服务”又可以分成两种:一种是“本地服务”(使用同一台机器提供的服务,不需要网络),另一种是“网络服务”(使用另一台计算机提供的服务,必须通过网络才能完成)。

“网络服务”(Web Service)的本质,就是通过网络调用其他网站的资源。

以上内容来自阮一峰的博客:《Web service是什么?》中的描述,链接如下:http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html。

因此,通过学习和使用WebService,我们可以充分利用互联网上提供的种类繁多的服务(如查询手机号码归属地,查询各个城市的时间和天气预报,查询股票行情,查询航班信息等等),而不是仅仅局限于由本机电脑提供有限的服务。毕竟网络的资源是无限的,通过直接调用其他网站提供的服务,我们可以最大限度地提高我们的工作效率,不重复制造轮子,把精力放在我们自己的业务实现上。

2. 通过JavaScript构建WebService客户端

以下是基于JavaScript,通过发送Ajax的GET请求,向WebService的服务端请求,并返回接收到的数据的简单示例。

其中,testWebService.html代码如下:

<!DOCTYPE html><html><head>    <title>WebService Client test page</title>    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /></head><body><script src="./jquery-2.1.3.min.js"></script><script src="./testWebServiceClient.js"></script><script>document.write("<h1>Send WebService Get and Post:</h1>");</script><div>    <input id="sendWebServiceGet" onclick="sendWebServiceGet();" type="button" value="SendGet">    </br></div> </body></html>

testWebServiceClient.js的实现如下:
其中,URL:http://ws.webxml.com.cn//WebServices/WeatherWS.asmx/getRegionCountry,是网络上提供的获得国外国家名称和与之对应的ID的服务。
该服务无输入参数,返回数据为:一维字符串数组。

function sendWebServiceGet() {   var getRegionCountryURL = 'http://ws.webxml.com.cn//WebServices/WeatherWS.asmx/getRegionCountry';   $.ajax({        url: getRegionCountryURL,        type: 'Get',        dataType: 'JSONP',        contentType: "text/xml; charset=utf-8",         success: function(data){            console.log(data);          },        error: function(msg){            console.log(msg);        }    })}

这里写图片描述

这里写图片描述

虽然按照上面JS文件的写法,可以向WebService服务器发出GET请求,并且在jQuery的回调函数中,也可以得到从服务器返回来的数据。但是,在浏览器的后台,却抛出了错误信息:
Uncaught SyntaxError: Unexpected token <”。

根据这个链接给出的答案可以知道产生这个问题的原因:
https://stackoverflow.com/questions/19934187/unexpected-token-reading-xml-file
“The response you are getting is an XML document, not a JavaScript program following the JSONP pattern. You get the error because the browser is trying to execute the XML as JavaScript (which it isn’t). Either change the response to be JSONP, or use some other method to make a cross-domain request.”
(你得到的响应是一个XML的文档,而不是JSONP样式的JavaScript程序. 你得到这个错误是因为浏览器在努力把XML执行为JavaScript, 实际上它并不是. 修改回复为JSONP,或者用别的方法生成一个跨域的请求.)

3. 基于浏览器访问WebService服务的实例

以下演示一个从网络上查找到的可用的WebService的服务:
这个WebService提供的服务是“查询2400多个城市天气预报Web服务”,包含2300个以上中国城市和100个以上国外城市天气预报数据。数据每2.5小时左右自动更新一次,准确可靠。
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx

这个WebService提供了如下服务:
(1) getRegionCountry: 获得国外国家名称和与之对应的ID
输入参数:无;
返回数据:一维字符串数组。

(2) getRegionDataset: 获取中国省份、直辖市、地区;国家名称(国外)和与之对应的ID
输入参数:无;
返回数据:DataSet。

(3) getRegionProvince: 获得中国省份、直辖市、地区和与之对应的ID
输入参数:无;
返回数据:一维字符串数组。

(4) getSupportCityDataset: 获得支持的城市/地区名称和与之对应的ID
输入参数:theRegionCode = 省市、国家ID或名称;
返回数据:DataSet。

(5) getSupportCityString: 获得支持的城市/地区名称和与之对应的ID
输入参数:theRegionCode = 省市、国家ID或名称;
返回数据:一维字符串数组。

(6) getWeather: 获得天气预报数据
输入参数:城市/地区ID或名称;
返回数据:一维字符串数组。

下面我们来演示如何根据它提供的WebService和接口,来获取国外城市(London)和国内城市(Beijing)的实时天气预报。

3.1 获取英国伦敦的天气预报:

首先调用getRegionCountry接口,获取这个服务支持的国外国家的ID。
这里写图片描述

从返回的国家名称和ID中可以看到,英国对应的ID是:3247.

然后再调用getSupportCityString,获取该天气预报服务支持英国的哪些城市。调用这个服务时,需要输入国家的名称或ID。
这里写图片描述

如上图所示,在输入框中输入英国的ID:3247,点击调用按钮,可以看到该服务支持的英国城市列表:
这里写图片描述

可以看到英国有三个城市支持该服务,爱丁堡,伦敦和曼切斯特。
伦敦的城市ID为:2503.

最后调用getWeather的服务,该服务需要输入两个参数。
这里写图片描述

其中theCityCode输入2503, theUserID可以不填,点击调用按钮,即可以看到该服务提供的伦敦的天气预报数据。这个数据是包括今天在内的,未来五天的天气预报数据。
这里写图片描述

3.2 获取中国北京的天气预报:

按照同样的方法,我们可以通过依次调用
getRegionProvince获取中国国内省份的ID列表:
这里写图片描述

可以看到北京市的ID是311101。
这里赫然出现了钓鱼岛,再强调一次:钓鱼岛自古以来就是中国神圣的不可分割的领土,钓鱼岛是中国的。

再调用getSupportCityString, 输入311101,即可获取北京市内的各个区的ID,如下所示:
这里写图片描述

这里写图片描述

最后调用getWeather接口,输入北京城区的ID: 792, 即可获取北京城区的天气预报。
这里写图片描述

4. 基于SoapUI模拟WebService客户端

5. 可用的WebService地址列表:

摘自:http://www.cnblogs.com/cmlr/articles/1745379.html

提供WebService服务的站点链接:
http://www.webxml.com.cn/zh_cn/web_services.aspx

(1)中文-英文双向翻译WEB服务:
Endpoint: http://fy.webxml.com.cn/webservices/EnglishChinese.asmx

(2)国内手机号码归属地查询WEB服务:
Endpoint: http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx

(3)2500多个城市天气预报WEB服务:
Endpoint: http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx

……

参考链接:

  1. Web service是什么?
    http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html
  2. 如何使用soapUI模拟WebService客户端发送请求
    https://jingyan.baidu.com/article/cbcede0712849a02f40b4d88.html
原创粉丝点击