理解什么是Web Services

本文深入浅出地介绍了WebServices的基本概念,包括其作为网络服务的角色,远程过程调用(RPC)的工作原理,以及如何像本地调用一样便捷地进行远程调用。特别聚焦于SOAP(简单对象访问协议)这一实现WebServices的常用框架,探讨了其在HTTP之上的工作方式,以及与XML和WSDL文档的结合使用,使开发者能够轻松理解和调用WebServices。
摘要由CSDN通过智能技术生成

Web Services初学者,往往会被诸如WSDL、SOAP、HTTP、XML等概念搞得晕头转向。往往也会发出这样的疑问:要胜任ONVIF协议网络摄像机(IPC)客户端程序开发,对Web Services的掌握要到什么程度?我现在就消除你的疑惑,你只要知道皮毛就够了,这得益于诸如gSOAP这样现成的工具,避免了我们「自己造轮子」。跟着我的专栏一步步学习,你就会体会到这点。

不多说,进入本文的主题。

3. 远程调用

函数接口调用方式分为:

  • 本地调用(Local Procedure Call,简称LPC)。
  • 远程调用(Remote Procedure Call,简称RPC)。

 


图2

 

  • 本地调用:通常,在我们的代码中调用一个函数,这个函数要么是系统API,要么是我们自己实现的本地代码,一起编译,一起发布,也在同一个进程中一起执行,这就是本地调用!

  • 远程调用:被调用方法的具体实现不在同一个进程,而是在别进程,甚至别的电脑上。RPC一个重要思想就是,使远程调用看起来像本地调用一样,调用者无需知道被调用接口具体在哪台机器上执行。

4. 远程调用原理

比如 A (client) 调用 B (server) 提供的remoteAdd方法:

  1. 首先A与B之间建立连接(通常是TCP,但还有其他的,如HTTP、管道等);
  2. 然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
  3. B接受A发送过来的字节流,然后反序列化得到方法名,方法参数,接着执行相应的方法调用并把结果30返回;
  4. A接受远程调用结果,输出30。

 


图3

 

通过上面的简单阐述,远程调用与socket通讯好像啊,都是远程通讯,都是C/S模式。他两者到底有啥区别?

  1. RPC在提供强大的远程调用能力的同时,不损失本地调用的语义简洁性。RPC一个重要思想就是:使远程调用看起来像本地调用一样。

  2. socket是RPC经常采用的通信手段之一,除了Socket,RPC还有其他的通信方法,比如:http、操作系统自带的管道等。

用HTTP协议实现的远程调用,熟悉的人一下子就想到了Web Service。

5. Web Services的简单理解

 


图4

 

我们可以这样来理解什么是Web Services,它即是一种网络服务。当你的系统完成一个通用的功能以后,如果你想让别人使用你的功能的话,那么你就可以发布成为Web Services服务,别人就可以通过网络远程调用到你的服务接口。

Web Services能够让各个系统之间的对接变得:快捷、方便、廉价。

6. Web Services举例

免费的Web Services服务:http://www.webxml.com.cn/zh_cn/index.aspx

这个网址提供了很多免费的Web Services服务,而且在网页上提供了各个远程调用接口的「测试」功能,这个「测试」功能有助于大家理解Web Services服务的远程调用接口,大家可以去体验下,我拿其中的「天气预报」和「手机号归属地查询」举个例子。

6.1. 天气预报WEB服务

Web Services服务地址:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx

看主要接口getWeather,输入城市名称调用该接口,Web Services就会返回该城市的天气预报数据,如下图所示。

 


图5

 

天气预报WEB服务

 

6.2. 手机号归属地查询WEB服务

Web Services服务地址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx

看接口getMobileCodeInfo,输入手机号码,就能获得手机号码归属地省份、地区和手机卡类型信息。如下图所示:

 


图6

 

手机号归属地查询WEB服务

 

7. Web Services常用的几种框架

 


图7

 

实现Web Services的几种方式

 

实现Web Services常用的框架有:REST、SOAP、JavaScript、XML-PRC等。这些看不懂,没关系,大家知道一个事情即可:实现Web Services的方式有好几种,

我们的主角ONVIF标准中的Web Service采用的是SOAP方式,接下来我们来了解下SOAP。

8. SOAP简介

8.1. 在TCP/IP四层模型中展示SOAP

SOAP(Simple Object Access Protoco,简单对象访问协议),是TCP/IP协议体系中的一个应用层协议,它是在HTTP基础之上实现的。

 


图8

 

8.2. 如此理解SOAP

浅谈 SOAP:http://www.ibm.com/developerworks/cn/xml/x-sisoap/

这篇IBM的文章「浅谈 SOAP」写的很好,值得参考。

以下这张图是我对SOAP的理解:

 


图9

 

SOAP协议 = RPC机制 + HTTP传输协议 + XML数据格式

SOAP的两个主要设计目标是「简单性」和「可扩展性」,SOAP的设计正是围绕这两点展开的。

SOAP使用RPC机制,体现了「简单性」。让客户端调用Web Service的接口看起来像本地调用一样,确实很简单。

SOAP 使用 HTTP 传送 XML,体现了「可扩展性」。尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 成熟、稳定、又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。

套用一副对联加以概括:

上联: 社区活跃框架多
下联: 简单易懂不出错
横批: 省时省力

8.3. SOAP的局限性

SOAP也有一些局限性,以下场景就不适合 SOAP:

 


图10

 

  1. 实时数据推送
    HTTP是短连接的,都是客户端请求,服务端应答,这种模式导致服务端无法实时推送数据给客户端,只有像Socket那样的长连接才能保证实时通讯。

  2. 省流量、高传输效率的应用
    HTTP有包头,而且XML全部用文本文件来传输数据,效率会比较低,如果你对流量、传输效率要求极高,那么你应该多考虑其它的方式,而不要用 SOAP。

8.4. SOAP协议看起来长这样

 


图11

 

这个一个股票Web Services服务系统,其中GetStockPrice接口适用于查询股票当前价格,图中查询了IBM的股票价格,Web Services返回股票价格为34.5

8.5. WSDL文档

对于一个Web Services,我们如何知道它对外提供了多少个接口,以及每个接口是如何调用的,这就涉及到WSDL(Web Services Description Language,网络服务描述语言)。

注意:只有SOAP方式实现的Web Services才有WSDL文档,其他方式实现的Web Services并没有WSDL文档。

我们可以这么理解WSDL:WSDL是一个使用XML语言书写的文档,这个文档描述了Web Services对外提供了哪些接口,就像动态库的.h文件一样。每个Web Services都有对应的WSDL文档。

 


图12

 

什么是WSDL

 

如果将WSDL语言转化成C语言,它看起来应该是这样子:

 


图13

 

WSDL语言转化成C语言

 

我们可以看看完整的WSDL文档长什么样子的:

  1. 天气预报WEB服务的接口说明(WSDL文档)

  2. 手机号归属地查询WEB服务的接口说明(WSDL文档)

  3. ONVIF标准的WEB服务的接口说明(WSDL文档)

如果你是第一次接触WSDL文档,前两个的WSDL文档估计你是看不懂(排版乱糟糟),而ONVIF的WSDL文档兴许你还能看懂(ONVIF官网的WSDL之所以这么工整,是因为插入排版的语句)。

9. 总结

回顾下本文的重点:

  1. Web Services是一种网络服务,它对外提供了一系列远程调用接口(RPC),你可以像本地调用一样去调用这些远程调用接口。列举了几个免费的WEB服务供大家体验。

  2. Web Services常用的框架有多种,ONVIF标准中的Web Service采用的是SOAP方式。

  3. WSDL文档是采用SOAP方式实现的Web Services的接口描述文档,就像动态库的.h文件一样。同时也展示了WSDL语言转化为C语言的对比效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值