不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

Q:Web Service 格式对应传输格式和通信协议

Posted on 2025-06-18 10:56  三年三班王小朋  阅读(13)  评论(0)    收藏  举报

以下是常见的 Web Service 格式,以及它们常用的 传输格式(数据格式) 和使用的 通信协议 的详细对比:

一、常见 Web Service 格式及其传输格式

Web Service 格式数据格式(传输格式)使用的协议特点
SOAP XML HTTP / SMTP / TCP 基于 XML,强调结构化和安全性,适合企业级系统集成
RESTful JSON / XML / x-www-form-urlencoded / HTML / TEXT HTTP 轻量、灵活、无状态,广泛用于现代 Web API
XML-RPC XML HTTP 较老的远程过程调用协议,已被 JSON-RPC 取代
JSON-RPC JSON HTTP 简洁高效,适合轻量级 RPC 场景
gRPC Protocol Buffers (Protobuf) HTTP/2 高性能、支持双向流、压缩效率高,适用于微服务
GraphQL JSON HTTP 查询语言,允许客户端精确控制请求的数据结构

二、详细介绍

1. SOAP(Simple Object Access Protocol)

  • 数据格式:XML
  • 协议:HTTP、SMTP、TCP 等
  • 特点:
    • 结构严格,标准化程度高;
    • 支持 WSDL(Web Services Description Language)描述接口;
    • 支持 WS-* 协议族(如安全、事务等);
    • 性能较重,适合企业级系统。

📌 示例 SOAP 请求体:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <m:GetStockPrice xmlns:m="http://example.com/stock">
      <m:StockName>IBM</m:StockName>
    </m:GetStockPrice>
  </soap:Body>
</soap:Envelope>

2. RESTful

  • 数据格式:JSON(最常用)、XML、x-www-form-urlencoded、HTML、TEXT
  • 协议:HTTP(S)
  • 特点:
    • 无状态;
    • 使用标准 HTTP 方法(GET、POST、PUT、DELETE);
    • URL 表示资源;
    • 易于开发、调试和维护;
    • 是目前主流 Web API 架构。

📌 示例 JSON 请求体:

{
  "username": "admin",
  "password": "123456"
}

📌 示例表单提交(x-www-form-urlencoded):

username=admin&password=123456

3. XML-RPC

  • 数据格式:XML
  • 协议:HTTP
  • 特点:
    • 比 SOAP 更简单;
    • 已逐渐被 JSON-RPC 替代;
    • 适合小规模远程调用。

📌 示例 XML-RPC 请求:

<?xml version="1.0"?>
<methodCall>
  <methodName>sample.add</methodName>
  <params>
    <param><value><i4>5</i4></value></param>
    <param><value><i4>7</i4></value></param>
  </params>
</methodCall>

4. JSON-RPC

  • 数据格式:JSON
  • 协议:HTTP
  • 特点:
    • 类似 XML-RPC,但使用 JSON;
    • 支持批量请求和异步响应;
    • 轻量、易解析;
    • 适合游戏、嵌入式系统等场景。

📌 示例 JSON-RPC 请求:

{
  "jsonrpc": "2.0",
  "method": "add",
  "params": [5, 7],
  "id": 1
}

5. gRPC

  • 数据格式:Protocol Buffers(Protobuf)
  • 协议:HTTP/2
  • 特点:
    • Google 开发,高性能;
    • 支持多种语言;
    • 支持四种调用方式:一元调用、服务器流、客户端流、双向流;
    • 适用于大规模分布式系统、微服务架构。

📌 Protobuf 定义示例:

syntax = "proto3";

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

service HelloService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

6. GraphQL

  • 数据格式:JSON
  • 协议:HTTP
  • 特点:
    • 查询语言;
    • 允许客户端指定所需字段;
    • 减少过度获取或欠获取数据;
    • 适合前后端分离项目。

📌 示例 GraphQL 请求:

query {
  user(id: "1") {
    name
    email
    posts {
      title
    }
  }
}

三、总结对比表

格式数据格式协议是否适合复杂业务是否推荐现代使用主要应用场景
SOAP XML HTTP/SOAP ❌(过时) 传统企业系统
RESTful JSON/XML/Form HTTP ✅ 推荐 Web API、移动端接口
XML-RPC XML HTTP ❌(过时) 旧系统兼容
JSON-RPC JSON HTTP     游戏、轻量级服务调用
gRPC Protobuf HTTP/2 ✅ 推荐 微服务、高性能通信
GraphQL JSON HTTP ✅ 推荐 前后端解耦、精准查询

🎯 如何选择?

你的需求推荐 Web Service 格式
简单 REST API RESTful(JSON)
实时通信、双向流 gRPC
移动端 + 后台 RESTful 或 GraphQL
企业内部系统对接 SOAP 或 gRPC
轻量级 RPC 调用 JSON-RPC
需要减少网络请求次数 GraphQL