SOAP Web 服务介绍

已经跨入 2015 年,当今最为常见的两种 Web 服务类型分别是: REST 和 SOAP 。不过,从趋势来看,越来越多人已经开始使用 REST 风格的 Web 服务。而 SOAP 大多也开始或已经转型 REST,应该说 REST 会慢慢成为主流。这篇文章不会对 REST 介绍太多,主要的重点还是介绍一下 SOAP 风格的 Web 服务。

Web Service 三要素

实际上,现在说 “Web Service 三要素”应该是不算很准确了,不过这个概念一直这样沿用,而且本文我们为了更能清楚阐释 SOAP Web 服务,那么就这样定义。

Web Service 的三个要素分别是:

  1. SOAP(Simple Object Access Protoco) 简单对象访问协议;
  2. WSDL(Web Services Description Language) 网络服务描述语言;
  3. UDDI(Universal Description Discovery and Integration)一个用来发布和搜索 WEB 服务的协议(非必须);

SOAP 用来描述传递信息的格式规范, WSDL 用来描述如何访问具体的接口(比如它会告诉你该服务有哪些接口可以使用,参数是什么等等), UDDI 用来管理、分发和查询 Web Service。下面我们将逐一详细介绍这三个要素,并通过结合实例来进行阐释。

为了把这三个要素说得更清楚,我们将会使用一个免费的 SOAP Web 服务作为例子进行阐述。该服务只提供一个接口即:根据 QQ 号,获取 QQ 在线状态。查看该服务

SOAP

它是一个协议,可以简单的理解为:它定义了一个基于 XML 的可扩展消息信封格式。因为客户端与服务器进行交互,由于大家的平台和应用程序都不一样,所以大家约定都采用 SOAP 这个协议来规范交互时的需要传递的消息。

请求接口时,发送的消息例子:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <qqCheckOnline xmlns="http://WebXml.com.cn/">
            <qqCode>8698053</qqCode>
        </qqCheckOnline>
    </soap:Body>
</soap:Envelope>

接口响应时,返回的消息例子:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <qqCheckOnlineResponse xmlns="http://WebXml.com.cn/">
            <qqCheckOnlineResult>Y</qqCheckOnlineResult>
        </qqCheckOnlineResponse>
    </soap:Body>
</soap:Envelope>

注:以上例子是使用 SOAP 1.1 发送的消息,SOAP 1.2 发送的消息格式其实大同小异,具体自己查看接口文档

下面对它结构进行详细说明。

XML 声明

<?xml version="1.0" encoding="utf-8"?>

该行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码(utf-8)。

Envelope 元素

<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    ....
</soap:Envelope>

Envelope 元素是 SOAP 消息的固定根元素,SOAP 协议规定的,不能变,其中 xmlns 是 XML Namespace 的缩写,表示 XML 命名空间。xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 是 Envelope的一个属性,它表示定义个以 soap 为前缀的命名空间 http://schemas.xmlsoap.org/soap/envelope/,即命名空间的名字是:http://schemas.xmlsoap.org/soap/envelope/,而它的前缀是 soap,这样子就把 soap前缀与该命名空间进行了绑定。即任何用 soap 为前缀的元素都属于该命名空间的,包括根元素 Envelope 。举个例子:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <qqCheckOnline xmlns="http://WebXml.com.cn/">
            <qqCode>8698053</qqCode>
        </qqCheckOnline>
    </soap:Body>
</soap:Envelope>

其中,Envelope 和 Body 元素就是以 soap 为前缀的,那么 Envelope 和 Body 元素都是属于 http://schemas.xmlsoap.org/soap/envelope/ 这个命名空间的。

同时,SOAP 协议中规定,SOAP 消息必须使用 SOAP Envelope 命名空间,所以 http://schemas.xmlsoap.org/soap/envelope/ 这个命名空间是固定的不能变(注意:这里只针对 SOAP 1.1 版本,SOAP 1.2 会有所不同)。所有 SOAP 消息元素,比如:EnvelopeHeaderBodyFault 也都必须属于该命名空间。

Body 元素

<soap:Body>
    <qqCheckOnline xmlns="http://WebXml.com.cn/">
        <qqCode>8698053</qqCode>
    </qqCheckOnline>
</soap:Body>

Body 元素里面,一般都是放一些请求和响应的内容。qqCheckOnline 表示要调用的接口方法,而 qqCode 就是调用该方法时,传入的参数,当然参数可以有多个。

其中,qqCheckOnline 元素上也定义了一个命名空间 http://WebXml.com.cn/。值得注意的是,这里在定义命名空间时,并没有设置命名空间前缀(namespace prefix)。这种设置方式,会把当前元素及其所有子元素,都归属于该命名空间。了解 XML 命名空间

我们看到,SOAP 消息元素和应用程序本身的元素是属于不同的命名空间,这样有利于把 SOAP 消息元素与其他元素区分开来,当然也防止了与自定义元素重名的问题。

Header 元素

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <AuthenHeader xmlns="http://www.example.com">
            <sAuthenticate>string</sAuthenticate>
        </AuthenHeader>
    </soap:Header>
    <soap:Body>
    ......
    </soap:Body>
</soap:Envelope>

有些接口需要提供 Header 元素,它和 Body 信息一起发送,它一般用于身份验证等作用。例子中的 AuthenHeader 和 sAuthenticate 都是接口自定义的参数。

Fault 元素

当调用服务发生错误时,错误信息一般会被放置在 Fault 元素内。例如:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Client</faultcode>
            <faultstring>Input string was not in a correct format.</faultstring>
            <detail/>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

Fault 元素内还有 faultcodefaultstringdetail,用于描述错误信息用的。在上一篇文章:《SOAP 介绍》中已经对该知识点进行了比较详细的说明,有兴趣可以看看。

WSDL

一个 XML 格式的文档。它用于描述该服务有哪些可用方法、参数的数据类型、命名空间等等信息。它的目的是让你知道该如何使用该服务,包括调用的各种细节信息。WSDL 文档通常用来辅助生成服务器和客户端代码及配置信息。

契约先行与代码先行模式

在开发 Web Service 过程中有两种实现模式:契约先行(Contract first)模式和代码先行(Code first)模式。

契约先行模式:首要工作是定义针对这个 Web 服务的接口的 WSDL(Web Services Description Language,Web 服务描述语言 ) 文件。WSDL 文件中描述了 Web 服务的位置,可提供的操作集,以及其他一些属性。WSDL 文件也就是 Web 服务的 “契约”。“契约” 订立之后,再据此进行服务器端和客户端的应用程序开发。

代码先行模式:与契约先行模式不同,代码先行模式中,第一步工作是实现 Web 服务端,然后根据服务端的实现,用某种方法(自动生成或手工编写)生成 WSDL 文件。

实际上,一个 WSDL 文件也挺复杂的,一般自己也不会去直接看这个文件,而是需要用到某个方法时,直接看该方法的调用说明就好。比如:获得腾讯QQ在线状态

UDDI

UDDI 是一个专门用来管理 Web 服务的地方。Web Service 服务提供商可以通过两种方式来暴露它的 WSDL 文件地址:

  1. 注册到 UDDI 服务器,以便被人查找;
  2. 直接告诉给客户端调用者;

是否需要注册到 UDDI 实际上是可选的,一般公司内部使用的服务,也不会注册到 UDDI。只有那些希望所有人都知道该服务的地址,才会注册到 UDDI。

最后

这篇文章写得有点乱了,主要还是自己对 SOAP 的了解还不够,最起码我并没有真正开发过 SOAP 服务。不过没关系吧,慢慢来,文章可以随着知识的增长慢慢润色。上文其实有一些问题没有说清楚的,比如说:SOAP 服务的适合用在哪里,不适合用在哪里等等。如果你有兴趣,可以看看文章最后的几篇参考文献。

其他

  1. 获得腾讯QQ在线状态服务:qqCheckOnline
  2. SOAP 服务调试工具:SoapUI 5.2
  3. XML 在线格式化工具:Web Toolkit Online
时间: 2024-10-25 12:09:01

SOAP Web 服务介绍的相关文章

Web服务介绍 & httpd安装

Web简介 什么是Web WWW:World Wide Web,万维网 英国人TimBerners-Lee在1989年欧洲共同体的一个大型科研机构工作时发明的 Web是一种超文本信息系统,其主要实现方式是超文本连接 Web特点 1.Web页面的图形化和易于链接 2.Web与操作系统.浏览器平台无关 3.分布式 4.动态习惯 5.交互性 Web工作原理 HTTP(Hyper Text Transfer Protocol,超文本传输协议):提供了访问超文本信息的功能,是Web浏览器和Web服务器之间

REST Web 服务介绍

在项目上使用到了Rest技术,应该是Rest的服务概念才对.主要是对外(BPM)暴露API来提供Service.推荐一篇有质量的文章,接下来会系统一点的学习一下Restful概念.http://kb.cnblogs.com/page/91827/ REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web),具体的我就不多说了.总之,Web是我们在互联网上最常用的服务,

Web 服务编程,REST 与 SOAP

REST 简介 在开始我们的正式讨论之前,让我们简单看一下 REST 的定义. REST(Representational State Transfer)是 Roy Fielding 提出的一个描述互联系统架构风格的名词.为什么称为 REST?Web 本质上由各种各样的资源组成,资源由 URI 唯一标识.浏览器(或者任何其它类似于浏览器的应用程序)将展示出该资源的一种表现方式,或者一种表现状态.如果用户在该页面中定向到指向其它资源的链接,则将访问该资源,并表现出它的状态.这意味着客户端应用程序随

12个强大的Web服务测试工具

在过去的几年中,web服务或API的普及和使用有所增加. web服务或API是程序或软件组件的集合,可以帮助应用程序进行交互或通过形成其他应用程序或服务器之间的连接执行一些进程/事务处理.基本上有两种类型的web服务——基于互联网协议,REST和SOAP推动数据和信息的通讯. 由于这些web服务暴露于网络并且分布于不同的网络,所以它们很容易受到风险和安全威胁,从而影响基于它们的进程.因此,web服务或API测试非常有必要,可以确保它们执行正确并正确地响应查询. 市场上有不少商业和开源的测试工具可

Web服务部署 ----预习笔记

多数网站由域名,空间服务器,DNS解析域名,网站程序,数据库组成. 一WWW概述WWW服务:即万维网服务,是指在网上发布,并可以通过浏览器观看的图形化页面服务. (1)IIS概述提供了可用于Internet Intranet 或者Extranet上继承Web服务器的能力.使用IIS可以为动态网络应用程序创建功能强大的通信平台. 二?安装和配置Web站点(1)安装IIS7.5添加角色,添加Web服务器橘色,查看Web服务介绍,选择角色服务,确认安装.安装完成后在浏览器中输入"http://loca

三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较

目前知道的三种主流的Web服务实现方案为:REST:表象化状态转变 (软件架构风格)SOAP:简单对象访问协议 XML-RPC:远程过程调用协议 下面分别作简单介绍: REST:表征状态转移(Representational State Transfer),采用Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 将所有 Web 系统的服务抽象为资源,REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征.Http

在 PHP 中使用 SOAP 协议调用 Web服务(WebService)

使用 PHP 中调用 WebService,听上去有些高深莫测啊. 其实这是很简单的一件事.由于 Web服务完全是基于 XML 这种平台无关性的标记语言来实现的,所以在 PHP中实现访问 WebService 是可能的.本例我们来完成这样一个 Web服务的调用:获取手机号信息.在互联网上找到这样一个 Web服务是比较容易的,这里我为大家提供一个现成的:http://www.webxml.com.cn/zh_cn/web_services_item.aspx?id=776756327947797A

Web服务技术协议:REST与SOAP

Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移) REST: 一种采用标准URI进行调用的方案.客户端的应用通过URI来获取资源的表征.获得这些表征致使这些应用程序转变了其状态.如果你需要无状态的CRUD(Create/Read/Update/Delete,创建/读取/更新/删除)操作,那么应采用REST. 优点: 1. REST很容易理解 2.

web服务的简单介绍及apache服务的安装

一,web服务的作用:  是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档.可以放置网站文件,让全世界浏览:   可以放置数据让全世界下载.目前最主流的三个Web服务器是Apache.Nginx.IIS 二,当前互联网主流Web服务软件: Apache:中小型web服务的主流,web服务使用目前排名第一 Nginx:大型网站web服务的主流,目前使用使用增势迅猛,社区活跃,发布更新版本比较快. Nginx的分支Tengine(淘宝网正在使用),目前也在飞速发展. Lig