04 常见接口类型与数据格式 - 认识接口的"语言"
🎯 本章目标:了解各种接口类型和数据格式,掌握JSON和XML的读写,为后续测试实战打下基础。
4.1 接口类型全景图
- HTTP/RESTful:最常用,JSON格式
- WebService/SOAP:企业级,XML格式
- RPC:微服务,Protobuf
- GraphQL:灵活查询,单一端点
- WebSocket:实时通信,双向推送
- 消息队列:异步解耦,Kafka/RabbitMQ
4.2 JSON 数据格式
什么是JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。
JSON数据类型
- 基本类型:字符串 "hello"、数字 123 / 3.14、布尔 true / false、null
- 复合类型:对象 {"key":"value"}、数组 1,2,3
JSON示例:用户信息
json
{
"id": 1,
"name": "张三",
"email": "zhangsan@example.com",
"isVip": true,
"balance": null,
"tags": ["developer", "tester"],
"address": {
"city": "北京",
"zipCode": "100000"
}
}
JSON vs JavaScript对象
| 特性 | JSON | JavaScript对象 |
|---|---|---|
| 键名 | 必须用双引号 | 可以不加引号 |
| 字符串 | 必须用双引号 | 单双引号都可以 |
| 末尾逗号 | 不允许 | 允许 |
| 注释 | 不支持 | 支持 |
| 方法 | 不支持 | 支持 |
JSONPath - JSON的"查询语言"
$.store.book[0].title → 获取第一本书的标题
$.store.book[*].author → 获取所有书的作者
$.store.book[?(@.price<10)] → 获取价格小于10的书
4.3 XML 数据格式
什么是XML
XML(eXtensible Markup Language,可扩展标记语言) 是一种标记语言,用于存储和传输数据。
XML结构
xml
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>1</id>
<name>张三</name>
<email>zhangsan@example.com</email>
<isVip>true</isVip>
<tags>
<tag>developer</tag>
<tag>tester</tag>
</tags>
<address>
<city>北京</city>
<zipCode>100000</zipCode>
</address>
</user>
JSON vs XML 对比
| 特性 | JSON | XML |
|---|---|---|
| 可读性 | 简洁 | 较冗长 |
| 解析速度 | 快 | 较慢 |
| 数据体积 | 小 | 大(有标签) |
| 注释 | 不支持 | 支持 |
| Schema验证 | JSON Schema | XSD |
| 适用场景 | Web API、移动App | 企业级、金融系统 |
4.4 SOAP 接口
什么是SOAP
SOAP(Simple Object Access Protocol) 是一种基于XML的协议,用于在网络上交换结构化的信息。
SOAP消息结构
xml
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/">
<soap:Header>
<!-- 认证信息等 -->
</soap:Header>
<soap:Body>
<getUserRequest>
<id>1</id>
</getUserRequest>
</soap:Body>
</soap:Envelope>
SOAP vs REST
| 特性 | SOAP | REST |
|---|---|---|
| 协议 | 严格协议 | 架构风格 |
| 数据格式 | 仅XML | JSON/XML/其他 |
| 传输层 | 多种协议 | 主要HTTP |
| 安全性 | WS-Security | HTTPS + Token |
| 缓存 | 不支持 | 支持 |
| 适用场景 | 金融、企业级 | Web、移动App |
4.5 GraphQL 接口
什么是GraphQL
GraphQL 是一种查询语言,允许客户端精确地请求所需的数据,避免过多或过少获取。
GraphQL vs REST
REST:GET /users/1 返回所有字段;GET /users/1/orders 需要第二次请求
GraphQL:一个查询获取 name、email 和 orders,只返回需要的字段
GraphQL查询示例
graphql
# 查询用户信息(只取需要的字段)
query {
user(id: 1) {
name
email
orders {
id
total
}
}
}
响应
json
{
"data": {
"user": {
"name": "张三",
"email": "zhangsan@example.com",
"orders": [
{"id": "1001", "total": 299},
{"id": "1002", "total": 599}
]
}
}
}
4.6 WebSocket 接口
什么是WebSocket
WebSocket 是一种在单个TCP连接上进行全双工通信的协议,支持服务器主动推送消息。
WebSocket vs HTTP
| 特性 | HTTP | WebSocket |
|---|---|---|
| 连接 | 短连接/长连接 | 长连接 |
| 通信方式 | 请求-响应 | 双向推送 |
| 实时性 | 轮询 | 实时 |
| 适用场景 | 普通API | 聊天、股票、游戏 |
WebSocket示例
javascript
// 建立连接
const ws = new WebSocket('wss://example.com/socket');
// 连接成功
ws.onopen = () => {
ws.send(JSON.stringify({type: 'subscribe', channel: 'prices'}));
};
// 接收消息
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('收到推送:', data);
};
4.7 数据格式转换工具
在线工具推荐
| 工具 | 用途 | 网址 |
|---|---|---|
| JSON格式化 | 美化JSON | jsonformatter.org |
| XML格式化 | 美化XML | xmlgrid.net |
| JSON转XML | 格式转换 | convertjson.com |
| Base64编解码 | 编码转换 | base64encode.org |
| URL编解码 | URL编码 | urlencoder.org |
4.8 本章小结
核心知识点
- JSON:轻量简洁,键值对结构,最常用
- XML:标签结构,企业级使用,SOAP基础
- GraphQL:灵活查询,按需获取,单一端点
- WebSocket:双向通信,实时推送,长连接
课后练习 📝
- 转换题 :将下面的JSON转换为XML格式:
{"users": [{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}]} - 分析题:什么场景适合用GraphQL而不是REST?
- 实践题:找一个公开的SOAP API(如天气服务),尝试构造一个SOAP请求。
4.9 下章预告
下一章我们将学习Postman,这是接口测试最常用的工具,从安装到精通!
"数据格式是接口的'语言',掌握它们,你就能读懂任何接口在说什么。"