目录
- 什么是 WebService? (核心概念)
- WebService 能做什么? (应用场景)
- WebService 的两种主流风格
- 1 SOAP (简单对象访问协议)
- 2 REST (Representational State Transfer - 表述性状态转移)
- 如何创建和调用 WebService? (实践入门)
- 1 使用 Java 和 Spring Boot 创建 RESTful WebService
- 2 使用 Postman 调用 WebService
- WebService 的核心相关技术
- 1 XML (可扩展标记语言)
- 2 JSON (JavaScript 对象表示法)
- 3 WSDL (Web Services Description Language)
- 4 UDDI (Universal Description, Discovery, and Integration)
- WebService 的优缺点
- 总结与学习路径
什么是 WebService?
核心定义: WebService 是一种跨编程语言、跨操作系统、跨网络的远程调用技术,它允许你使用 HTTP 协议,通过网络去调用另一个服务器上的应用程序或功能,就像调用本地方法一样简单。

通俗比喻: 想象一下,你的电脑(客户端)想请一台远程的超级计算机(服务器)帮你完成一个复杂的数学计算,你不需要知道这台超级计算机内部是怎么运行的,也不需要安装任何特殊的软件,你只需要按照一个双方都认可的“格式”(WebService 协议)发送一个请求(请计算 2+2”),远程服务器收到请求,计算完成后,再用同样的“格式”把结果(“4”)返回给你的电脑,这个“格式”和“沟通”的过程就是 WebService。
关键特点:
- 跨平台/跨语言: 用 Java 写的 WebService 可以被 Python、C#、JavaScript 等任何语言调用。
- 基于标准协议: 通常使用 HTTP、XML、JSON 等开放标准,无需依赖特定厂商的技术。
- 自描述性: 通常通过 WSDL 文件来描述自己能提供什么服务、如何调用。
- 可通过 Web 协议访问: 基于 HTTP,可以轻松穿过防火墙。
WebService 能做什么?
WebService 的核心思想是“服务化”和“集成”。
- 系统/应用集成: 将不同部门、不同技术栈(如 Java 和 .NET)的系统连接起来,实现数据和功能共享,将公司的财务系统与电商网站集成,实现订单自动处理。
- 数据共享: 提供一个统一的数据接口,让多个客户端(如网站、手机 App、桌面软件)都能获取相同的数据源。
- 创建可复用的功能: 将通用的功能(如用户验证、短信发送、天气预报)封装成 WebService,供多个应用调用,避免重复开发。
- 构建面向服务的架构: 这是现代企业应用架构的一种高级模式,整个系统由一系列可独立部署和扩展的“服务”组成。
WebService 的两种主流风格
WebService 主要分为两大流派:SOAP 和 REST,虽然都是 WebService,但它们的设计理念、复杂度和应用场景有很大不同。

1 SOAP (Simple Object Access Protocol)
SOAP 是一个协议,有严格的规范,它不是一种技术,而是一套规则,规定了如何在 Web 上进行结构化信息交换。
-
特点:
- 协议严格: 必须遵循 W3C 标准,格式非常严格。
- 格式为 XML: 所有请求和响应都必须是 XML 格式,即使传输的数据很简单。
- 平台无关: 通过 WSDL 描述接口,客户端可以自动生成调用代码。
- 内置安全性与可靠性: 本身支持安全(WS-Security)、事务(WS-Transaction)等企业级特性。
- 重量级: 由于 XML 格式冗长,解析开销大,所以相对“重”。
-
适用场景:
- 企业级应用集成。
- 对安全性、事务性要求非常高的金融、电信系统。
- 需要严格契约和跨语言调用的场景。
-
一个典型的 SOAP 请求示例:
(图片来源网络,侵删)<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <m:GetStockPrice xmlns:m="http://www.example.com/stock"> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>
2 REST (Representational State Transfer)
REST 不是一个协议,而是一种软件架构风格,它更轻量级,更符合 Web 的本质。
-
核心思想: 将系统中的所有资源(如数据、功能)都看作一个唯一的 URI(统一资源标识符,可以理解为网址),客户端通过 HTTP 方法(GET, POST, PUT, DELETE)对这些资源进行操作。
-
特点:
- 无状态: 服务器不保存客户端的状态,每个请求都包含处理该请求所需的所有信息。
- 以资源为中心: URL 代表资源,如
/users(用户列表),/users/123(ID为123的用户)。 - 使用 HTTP 方法:
GET: 获取资源。POST: 创建新资源。PUT: 更新资源(全量更新)。DELETE: 删除资源。
- 数据格式灵活: 通常使用 JSON,也支持 XML、HTML 等,JSON 因为其轻量级和易解析,成为事实上的标准。
- 轻量级: 相比 SOAP,开销小,性能更高。
-
适用场景:
- 公共 API(如微博、微信的开放平台 API)。
- 移动 App 后端服务。
- 现代化的 Web 应用前后端分离架构。
-
一个典型的 RESTful API 请求示例:
- 获取用户列表 (GET):
GET http://api.example.com/users - 获取特定用户 (GET):
GET http://api.example.com/users/123 - 创建新用户 (POST):
POST http://api.example.com/users(请求体中包含用户信息,通常是 JSON) - 更新用户 (PUT):
PUT http://api.example.com/users/123(请求体中包含更新后的完整用户信息) - 删除用户 (DELETE):
DELETE http://api.example.com/users/123
- 获取用户列表 (GET):
| 特性 | SOAP | REST |
|---|---|---|
| 本质 | 协议 | 架构风格 |
| 数据格式 | 严格使用 XML | 灵活,常用 JSON |
| 协议 | 可以是 HTTP, SMTP, TCP 等 | 几乎总是 HTTP |
| 状态 | 服务端可以有状态 | 无状态 |
| 复杂度 | 高,重量级 | 低,轻量级 |
| 工具 | 需要专门的 SOAP 工具箱 | 直接使用 HTTP 客户端即可 |
如何创建和调用 WebService?
这里我们以目前更流行、更简单的 RESTful WebService 为例,使用 Java 和 Spring Boot 框架进行演示。
1 使用 Java 和 Spring Boot 创建 RESTful WebService
步骤 1:创建 Spring Boot 项目 使用 Spring Initializr 创建一个新项目。
- Project: Maven Project
- Language: Java
- Spring Boot: 选择一个稳定版本 (如 2.7.x 或 3.x.x)
- Project Metadata:
- Group:
com.example - Artifact:
demo-webservice - Packaging: Jar
- Java: 8 或更高
- Group:
- Dependencies: 添加
Spring Web依赖。
步骤 2:编写代码 Spring Boot 会自动配置好 Web 环境,我们只需要创建一个 Controller 来处理 HTTP 请求。
src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
src/main/java/com/example/demo/HelloController.java
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// @RestController 是 @Controller 和 @ResponseBody 的结合
// 表示这个类中的所有方法返回的数据都直接作为 HTTP 响应体返回
@RestController
@RequestMapping("/api") // 为所有请求添加一个前缀 /api
public class HelloController {
// @GetMapping 表示处理 HTTP GET 请求
// value = "/hello" 定义了具体的请求路径
@GetMapping("/hello")
public String sayHello() {
return "Hello, WebService World!";
}
// {name} 是一个路径变量,URL 中的值会自动绑定到方法参数上
@GetMapping("/greet/{name}")
public String greetUser(@PathVariable String name) {
return "Hello, " + name + "!";
}
}
步骤 3:运行项目
右键点击 DemoApplication.java -> Run,Spring Boot 会启动一个内嵌的 Tomcat 服务器,默认运行在 8080 端口。
步骤 4:测试WebService
打开浏览器或使用命令行工具(如 curl),访问我们创建的接口。
-
访问
http://localhost:8080/api/hello- 浏览器会显示:
Hello, WebService World! curl命令:curl http://localhost:8080/api/hello
- 浏览器会显示:
-
访问
http://localhost:8080/api/greet/Alice- 浏览器会显示:
Hello, Alice! curl命令:curl http://localhost:8080/api/greet/Alice
- 浏览器会显示:
恭喜!你已经成功创建并运行了一个最简单的 RESTful WebService。
2 使用 Postman 调用 WebService
对于更复杂的请求(如 POST、带请求体的请求),专业的 API 测试工具如 Postman 是必不可少的。
-
下载并安装 Postman。
-
创建一个 GET 请求:
- 选择
GET方法。 - 在 URL 输入框中输入:
http://localhost:8080/api/hello - 点击 "Send" 按钮。
- 在 "Body" 标签页下方,你会看到响应结果:
Hello, WebService World!。
- 选择
-
创建一个 POST 请求(示例): 假设我们想创建一个用户,需要发送一个包含用户信息的 JSON 对象。
- 选择
POST方法。 - URL 输入:
http://localhost:8080/api/users(你需要先在 Controller 中添加对应的处理方法)。 - 切换到
Body标签页。 - 选择
raw和JSON格式。 - 在文本框中输入 JSON 数据:
{ "username": "john_doe", "email": "john.doe@example.com" } - 点击 "Send",服务器会处理这个请求并返回创建成功的用户信息(通常包含新用户的 ID)。
- 选择
WebService 的核心相关技术
-
XML (eXtensible Markup Language):
- 一种标记语言,用于存储和传输数据。
- 特点是标签自定义,结构严谨,适合描述复杂的数据结构。
- 在 SOAP 中是强制的数据交换格式。
-
JSON (JavaScript Object Notation):
- 一种轻量级的数据交换格式。
- 易于人阅读和编写,也易于机器解析和生成。
- 基于 JavaScript 语法,但现在已成为所有语言都支持的标准。
- 在 REST 中是绝对主流的数据交换格式。
-
WSDL (Web Services Description Language):
- 一个 XML 文件,用于描述 WebService 的功能。
- 它就像 WebService 的“说明书”或“契约”,告诉客户端:这个服务叫什么名字?有哪些方法?每个方法需要什么参数?返回什么类型的数据?如何访问它?
- 主要用于 SOAP 服务。
-
UDDI (Universal Description, Discovery, and Integration):
- 一个基于 XML 的注册中心,用于发布和发现 WebService。
- 可以把它想象成“WebService 的黄页”,企业可以将自己的 WebService 发布到 UDDI 注册中心,其他企业则可以在这里查找并使用它们。
- UDDI 的使用已大大减少,很多服务通过文档或直接沟通来发布。
WebService 的优缺点
优点:
- 跨平台和跨语言集成: 最大的优势,解决了不同技术栈系统之间的通信问题。
- 松耦合: 客户端和服务端是独立的,可以独立升级和部署,只要接口契约不变。
- 标准化: 基于开放标准,避免了厂商锁定。
- 可复用性: 功能被封装成服务,可供多个应用调用。
缺点:
- 性能开销: 特别是 SOAP,基于 XML 的文本传输,解析速度比二进制慢,且数据量大。
- 复杂性: SOAP 协议本身非常复杂,学习曲线陡峭。
- 无状态性(REST): 对于需要维护会话状态的复杂应用,REST 的无状态特性会增加开发的复杂性(需要使用 Token、Cookie 等机制来模拟状态)。
- 缓存能力(REST): 虽然 HTTP 协议支持缓存,但需要开发者正确设计才能利用好,否则可能导致数据不一致。
总结与学习路径
WebService 是一种实现系统间通信的核心技术,虽然 REST 因其简单、高效和与 Web 的高度契合,已成为当前 Web API 开发的主流选择,但 SOAP 在需要强契约、高安全性和可靠性的企业级应用中仍有其一席之地。
学习路径建议:
- 打好基础: 深入理解 HTTP 协议(方法、状态码、Header)、JSON 和 XML,这是所有 WebService 的基石。
- 掌握 REST:
- 理解 REST 的核心概念(资源、URI、HTTP 方法)。
- 选择一个现代框架进行实践,如 Java (Spring Boot)、Python (Django REST framework / Flask)、Node.js (Express.js)。
- 学会使用 Postman 等 API 测试工具。
- 了解 SOAP:
- 了解 SOAP 的基本结构和 WSDL 的作用。
- 尝试使用一个 SOAP 框架(如 Java 的 JAX-WS)创建一个简单的服务,感受其与 REST 的不同。
- 深入高级主题:
- API 安全性: 学习 OAuth2、JWT 等认证授权机制。
- API 版本控制: 如何在不破坏旧客户端的情况下更新 API。
- API 文档: 学习使用 Swagger/OpenAPI 自动生成和维护 API 文档。
- 服务网格: 了解 Istio、Linkerd 等微服务治理技术。
从 REST 开始学习是当前最有效、最符合行业趋势的路径,祝你学习顺利!
