细说WebService

细说WebService

简介

WebService 是一个应用于客户端、服务端,基于http协议的web应用程序,他有一个非常重要的特点,那就是可以跨语言、跨平台进行远程调用,可应用于分布式系统中的不同分支系统之间的远程调用。W3C为Web Service制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何语言写的web Service 接口在发送数据的时候都要转换成WebService标准的XSD发送。

应用场景

异构系统:整体大的系统下,不同语言开发的不同子系统之间的交互

比如我们玩游戏的时候,会检测你是否已经成年,其中就会用到人脸识别,我们的游戏和人脸识别就是两个系统,如果我们多款游戏都要去跟人脸识别系统做交互,而这些游戏的服务端有用C++、有用GO、有用Python开发的,而我们的人脸识别的服务端是用Java开发的,这时候就可以考虑使用WebService来进行交互,当然肯定还有其他方法去处理这个问题,我们此处不过多赘述

webService三要素

SOAP:简单对象访问协议(Simple Object Access Protocol)

WSDL:网络服务描述语言(Web Services Description Language)

UDDI:统一 描述、发现和集成( Universal Description Discovery and Integration )

SOAP

简单对象访问协议(Simple Object Access Protocol)。Web Service采用标准的SOAP协议传输,SOAP协议是基于http的应用层协议传输xml数据。HTTP用于实现 SOAP 的RPC 风格的传输, 而xml是它的编码模式。

SOAP由四个部分组成:

  • 封装:它定义了一个框架模型,说明了具体内容以及内容的处理者,是可选的还是必须得
  • 编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例
  • RPC表示:它定义了用于表示远程过程调用和应答的协定
  • 定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定

SOAP消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求 / 应答的模式。所有的 SOAP消息都使用 XML 编码。一条 SOAP消息就是一个包含有一个必需的 SOAP 的封装包,一个可选的 SOAP 标头和一个必需的 SOAP 体块的 XML 文档。把 SOAP 绑定到 HTTP 提供了同时利用 SOAP 的样式和分散的灵活性的特点以及 HTTP 的丰富的特征库的优点。在HTTP上传送 SOAP 并不是说 SOAP 会覆盖现有的 HTTP 语义,而是 HTTP 上的 SOAP 语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定。SOAP也可以绑定到TCP和UDP协议上。

WSDL

WSDL是WebService的描述语言,是一种接口定义语言,用于描述WebService的接口信息等,WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。

WSDL 功能

怎样向别人介绍你的Webservice有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Webservice的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Webservice的时候,他们的工具(如VisualStudio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Webservice。解决方法是:用机器能阅读的方式提供一个正式的描述文档。Webservice描述语言(WSDL)就是这样一个基于XML的语言,用于描述Webservice及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Webservice生成WSDL文档,又能导入WSDL文档,生成调用相应Webservice的代码。

UDDI

UDDI是一种规范,它主要提供基于Web服务的注册和发现机制,为Web服务提供三个重要的技术支持。

  • 标准、透明、专门描述Web服务的机制
  • 调用Web服务的机制
  • 可以访问的Web服务注册中心

UUDI其实可以理解为,企业之间的服务共享与彼此发现、交互,程序开发人员通过UDDI机制查找分布在互联网上的Web Service,在获取其WSDL文件后,就可以在自己的程序中以SOAP调用的格式请求相应的服务了。由于开发人员一般都是调用内网服务,所以该技术的关注度并不高。

WebService和http接口调用的区别

  • 协议不同,SOAP协议比http协议更为复杂一些
  • 效率不同,http接口调用的速度往往比WebService效率更高一些
  • 处理数据复杂度不同,http主要通过PST、GET获取信息,WebService基于SOAP能够处理更加复杂的数据类型
  • 跨域,http不能解决跨域问题,WebService则可以处理不同服务间的信息传输问题