常见的 API 设计风格

在软件开发中,常见的 API 设计风格主要有以下几种,每种风格适用于不同的场景和需求:


1. RESTful API (主流)

特点

  • 基于 HTTP 协议,使用标准方法(GET/POST/PUT/DELETE)
  • 资源导向(URI 表示资源,如 /users
  • 无状态、可缓存、统一接口
  • 通常返回 JSON/XML

适用场景

  • 公开的 Web 服务(如 GitHub API)
  • 前后端分离架构
  • 需要简单、易理解的接口

示例

http 复制代码
GET /api/users/123

2. RPC(Remote Procedure Call)

特点

  • 强调"动作"而非资源(如 /deleteUser
  • 通常使用 POST 方法(所有操作通过 POST 发送)
  • 协议无关(可通过 HTTP、TCP 等实现)

变种

  • JSON-RPC:轻量级,基于 JSON
  • gRPC:Google 开发的高性能二进制协议(基于 HTTP/2)
  • XML-RPC:传统 SOAP 的前身

适用场景

  • 内部微服务通信(如 gRPC)
  • 需要高性能的场景
  • 操作导向的系统(如银行转账)

示例

json 复制代码
POST /rpc
{
  "method": "deleteUser",
  "params": {"id": 123},
  "id": 1
}

3. GraphQL (新兴)

特点

  • 客户端自定义查询字段
  • 单一端点(通常 /graphql
  • 强类型系统
  • 减少过度获取(Over-fetching)数据

适用场景

  • 复杂数据关系的系统(如社交网络)
  • 需要灵活查询的客户端(如移动端)
  • 多数据源聚合

示例

graphql 复制代码
query {
  user(id: 123) {
    name
    posts(limit: 5) {
      title
    }
  }
}

4. SOAP (传统)

特点

  • 基于 XML 的协议
  • 严格的 WSDL 规范
  • 内置安全/事务支持
  • 通常通过 HTTP POST 传输

适用场景

  • 企业级系统(如银行、政府)
  • 需要 ACID 事务的场景
  • 遗留系统集成

示例

xml 复制代码
POST /soap
<Envelope>
  <Body>
    <GetUser>
      <Id>123</Id>
    </GetUser>
  </Body>
</Envelope>

5. WebSocket API

特点

  • 全双工实时通信
  • 保持长连接
  • 适合高频数据推送

适用场景

  • 实时聊天应用
  • 股票行情推送
  • 在线游戏

示例

javascript 复制代码
// 客户端代码
socket.send(JSON.stringify({action: "join", room: "news"}));

6. Webhook

特点

  • 反向 API(服务端主动调用客户端)
  • 事件驱动模型
  • 通常用于异步通知

适用场景

  • 支付结果回调
  • CI/CD 流水线触发
  • 第三方服务集成(如 Slack 机器人)

示例

http 复制代码
POST /callback
Content-Type: application/json
{
  "event": "payment_success",
  "order_id": "12345"
}

风格对比表

风格 协议 数据格式 性能 灵活性 学习成本 典型应用
RESTful HTTP JSON/XML 公开 Web API
RPC/gRPC 任意 二进制 微服务内部通信
GraphQL HTTP JSON 可变 复杂数据查询
SOAP HTTP/SMTP XML 企业级系统
WebSocket WS/WSS 任意 实时应用
Webhook HTTP JSON/XML - 事件通知

如何选择 API 风格?

  1. 公开 API → RESTful 或 GraphQL
  2. 内部高性能通信 → gRPC
  3. 实时双向通信 → WebSocket
  4. 企业级集成 → SOAP(仅限遗留系统)
  5. 事件驱动架构 → Webhook + RESTful

现代系统常组合使用多种风格,例如:

  • RESTful 提供基础 CRUD
  • GraphQL 处理复杂查询
  • gRPC 处理微服务间通信
  • Webhook 实现异步通知
相关推荐
前端白袍18 小时前
代码规范:RESTful API 全面介绍
后端·restful·代码规范
福大大架构师每日一题2 天前
ragflow v0.25.4 版本更新:RESTful API 数据源连接器、Agent 标签管理、Widget 持久化、GPT-5.4 模型支持全面升级
网络·gpt·restful
ZengLiangYi2 天前
用 ChatCrystal 学 Fastify:从零搭建 REST API
restful·express
taocarts_bidfans3 天前
Taoify开放接口全解析:RESTful架构下,跨境开发者多系统对接实操指南
大数据·架构·restful·跨境电商·独立站
清水白石0084 天前
在 RESTful、RPC 与事件驱动之间做选择:高频内部调用与审计回放场景下的架构取舍
rpc·架构·restful
weixin199701080165 天前
[特殊字符] RESTful API 接口规范详解:构建高效、可扩展的 Web 服务(附 Python 源码)
前端·python·restful
码以致用9 天前
FastAPI 从入门到实践:构建规范的 RESTful API 服务
后端·restful·fastapi
若阳安好9 天前
【备忘录】正则表达式
后端·正则表达式·restful
AIFQuant11 天前
贵金属 API 避坑:黄金/白银行情接口常见陷阱(数据漂移、断点、延迟)
开发语言·python·websocket·金融·restful·贵金属
想你依然心痛13 天前
HarmonyOS 6(API 23)实战:打造“看见设计“的AR工业设计评审系统——基于Face AR情绪反馈 + Body AR手势操控的沉浸光感协作平台
ar·restful·harmonyos·悬浮导航·沉浸光感