WebService入门
webService就是可编程的URL,使用标准的Http及XML协议远程调用的应用程序组件。webservice包含三个要素,分别是:
- SOAP:简单对象访问协议
- UDDI:通用描述发现整合
- WSDL:webservice描述语言 下面分别介绍这三者。
SOAP
简单来说,HTTP+XML=SOAP。 SOAP 协议包括以下四个部分的内容:
- SOAP 封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;
- SOAP 编码规则(encoding rules),它定义了不同应用程序间交换信息时,需要使用到的数据类型;
- SOAP RPC 表示(RPC representation),它定义了一个表示远程过程调用和应答的协定;
- SOAP 绑定(binding),它定义 SOAP 使用哪种底层协议交换信息的协定。使用 HTTP/TCP/UDP 协议都可以。
消息格式
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<!-- 消息头,可选 -->
</soap:Header>
<soap:Body>
<!-- 消息内容,必需 -->
<soap:Fault>
<!-- 错误信息,可选 -->
</soap:Fault>
</soap:Body>
</soap:Envelope>
一条SOAP消息就是一个普通的XML文档,包含如下元素:
- 必需的 Envelope 元素,据此可把该 XML 文档标识为一条 SOAP 消息;
- 可选的 Header 元素,包含头部信息,一般用于身份验证;
- 必需的 Body 元素,包含所有的调用和响应信息;
- 可选的 Fault 元素,提供有关在处理此消息时,所发生的错误的描述信息;
UDDI
UDDI(统一描述、发现和集成)是一种目录服务,用户可以使用它对WebService进行注册和搜索。用来说明一个Web服务的一些信息类型,以便帮助服务的请求者确定如下问题: WHO,WHAT,WHERE,HOW . UDDI 定义如何查找 Web 服务(及其 WSDL 文件)。UDDI 并不像 WSDL 和 SOAP 一样深入人心,因为很多时候,使用者知道 Web 服务的位置(通常位于公司的企业内部网中)。 UUDI可以与搜索引擎进行类比,搜索引擎一般只返回web页面的URI,而UUID注册中心不仅返回服务的位置,还会返回有关服务的工作方式。
WSDL
下面重点介绍WSDL,认为是三个里面最复杂的。本质上wsdl一门基于XML的语言,用于描述webservice以及如何对他们进行访问的。
<definitions>
<types>
definition of types........
数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)
</types>
<message>
definition of a message....
通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。
</message>
<portType>
definition of a port.......
对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
</portType>
<binding>
definition of a binding....
特定端口类型的具体协议和数据格式规范的绑定。
</binding>
<service>
相关服务访问点的集合。
</servie>
</definitions>
通过wsdl定义就能知道如何访问接口了: 天气预报
返回结果:
PostMan测试
使用postman测试天气预报这一典型的webservice服务。
- 新建一个http请求,填写url地址
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl - header中新增Content-Type类型为:
text/xml;charset=utf-8注意字符集一定是utf-8,否则参数中传递中文会报查询结果为空。
3. 填写body内容,类型为raw,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getSupportCity xmlns="http://WebXml.com.cn/">
<byProvinceName>浙江</byProvinceName>
</getSupportCity>
</soap:Body>
</soap:Envelope>
结果如下: