XML Web 服务概述
⚠️ 本章为选读内容
本章定位 :建立对 XML Web 服务的全局认知——理解 Web 服务架构(UDDI/WSDL/SOAP 三角模型)、服务发布/发现/使用完整闭环,以及 XML 在其中的枢纽作用。
定义与作用
XML Web 服务 (XML Web Services)是一种跨平台、跨语言的远程调用技术。它将应用程序的功能封装为可通过 Web 协议(HTTP)访问的服务,使用 XML 作为数据交换的通用格式。
核心思想:不同平台的应用(Java、.NET、Python)能像"拼积木"一样互相调用,XML 是积木之间的"通用胶水"。
Web 服务的本质是:用 HTTP 承载 XML 消息,实现跨语言、跨平台的方法调用。
核心原理:Web 服务三角架构
图解释 :Web 服务遵循"三角模型":UDDI 注册中心(可选)帮助消费者发现服务;WSDL 描述服务的接口(方法名、参数类型);SOAP 是实际调用的 XML 消息格式。三者的关系就像:UDDI=黄页,WSDL=说明书,SOAP=信封。
语法/结构要点
Web 服务的三大核心标准
| 标准 | 全称 | 作用 | XML 关系 |
|---|---|---|---|
| SOAP | Simple Object Access Protocol | 定义请求/响应的 XML 消息结构 | 完全基于 XML |
| WSDL | Web Services Description Language | 描述服务的接口、参数、返回类型 | 基于 XML 的接口定义语言 |
| UDDI | Universal Description, Discovery and Integration | 服务的注册与发现机制 | 使用 XML 描述注册信息 |
Web 服务的优势
| 特性 | 说明 |
|---|---|
| 跨平台 | Java 客户端可以调用 .NET 服务,反之亦然 |
| 基于标准 | 基于 W3C 开放标准,不绑定特定厂商 |
| 松耦合 | 客户端只依赖 WSDL,服务端实现可任意更换 |
| 可组合 | 多个 Web 服务可组合成更复杂的业务流程 |
完整示例
场景说明
飞翔科技需要向外部合作伙伴提供一个"订单状态查询"接口。白歌设计用 Web 服务暴露接口——合作伙伴的系统可能是 Java、.NET 或 PHP,但都能通过 SOAP/XML 调用。
SOAP 请求(查询订单状态)
客户端发送:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:ord="http://www.feixiang.com/order">
<soap:Header>
<ord:auth>
<ord:apiKey>FX-2026-KEY-001</ord:apiKey>
</ord:auth>
</soap:Header>
<soap:Body>
<ord:QueryOrderStatus>
<ord:orderId>1001</ord:orderId>
</ord:QueryOrderStatus>
</soap:Body>
</soap:Envelope>
SOAP 响应
服务器返回:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:ord="http://www.feixiang.com/order">
<soap:Body>
<ord:QueryOrderStatusResponse>
<ord:orderId>1001</ord:orderId>
<ord:status>已发货</ord:status>
<ord:trackingNumber>SF1234567890</ord:trackingNumber>
<ord:estimatedDelivery>2026-06-12</ord:estimatedDelivery>
</ord:QueryOrderStatusResponse>
</soap:Body>
</soap:Envelope>
WSDL 片段(接口定义)
<wsdl:definitions name="OrderService"
targetNamespace="http://www.feixiang.com/order"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:message name="QueryOrderStatusRequest">
<wsdl:part name="orderId" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="QueryOrderStatusResponse">
<wsdl:part name="result" type="ord:OrderStatus"/>
</wsdl:message>
<wsdl:portType name="OrderPortType">
<wsdl:operation name="QueryOrderStatus">
<wsdl:input message="tns:QueryOrderStatusRequest"/>
<wsdl:output message="tns:QueryOrderStatusResponse"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
操作结果
| 要素 | 角色 | 内容 |
|---|---|---|
| SOAP | 消息载体 | XML 格式的请求和响应,包含订单 ID 和状态信息 |
| WSDL | 接口契约 | 定义 QueryOrderStatus 方法的参数和返回类型 |
| UDDI | 服务目录 | (可选)合作伙伴可在此发现飞翔科技提供的所有 Web 服务 |
易错场景
Web 服务 ≠ 网站
Web 服务是 程序对程序 的通信(机器读 XML),不是给人看的网页。它的目标是让程序间互相调用,而非展示页面。
混淆 RESTful API 和 SOAP Web 服务
| 对比维度 | SOAP Web 服务 | RESTful API |
|---|---|---|
| 数据格式 | 仅 XML | XML / JSON / 任意 |
| 协议 | HTTP + SOAP 信封 | HTTP 动词 (GET/POST/PUT/DELETE) |
| 接口描述 | WSDL | OpenAPI / Swagger |
| 学习曲线 | 陡峭 | 平缓 |
现代开发中 RESTful API 更流行,但 SOAP 在企业级应用(银行、保险、ERP)中仍大量存在。
UDDI 的"理想与现实"
UDDI 在理论上是一个公共的服务注册中心(类似 DNS),但在实践中从未达到互联网级别的规模。现代微服务架构中,服务注册发现由 Consul、etcd、Nacos 等替代。
面试考点
| 考点 | 参考答案要点 |
|---|---|
| Web 服务的三角模型是什么? | UDDI(发现)— WSDL(描述)— SOAP(通信),三者围绕 XML 协作 |
| SOAP 和 WSDL 各自的作用? | SOAP 是消息格式(请求/响应的 XML 信封);WSDL 是接口定义(有哪些方法、参数类型、返回类型) |
| Web 服务为什么能跨语言? | 因为所有通信都序列化为 XML 文本——任何语言都有 XML 解析器,HTTP 协议通用 |
| Web 服务与 RESTful API 的核心差异? | Web 服务基于 SOAP/WSDL,强类型约束;RESTful 基于 HTTP 动词,更轻量。现代倾向于 RESTful |