当前位置: 首页 > article >正文

常见的 API 设计风格

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


1. RESTful API (主流)

特点

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

适用场景

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

示例

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)
  • 需要高性能的场景
  • 操作导向的系统(如银行转账)

示例

POST /rpc
{"method": "deleteUser","params": {"id": 123},"id": 1
}

3. GraphQL (新兴)

特点

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

适用场景

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

示例

query {user(id: 123) {nameposts(limit: 5) {title}}
}

4. SOAP (传统)

特点

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

适用场景

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

示例

POST /soap
<Envelope><Body><GetUser><Id>123</Id></GetUser></Body>
</Envelope>

5. WebSocket API

特点

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

适用场景

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

示例

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

6. Webhook

特点

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

适用场景

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

示例

POST /callback
Content-Type: application/json
{"event": "payment_success","order_id": "12345"
}

风格对比表

风格协议数据格式性能灵活性学习成本典型应用
RESTfulHTTPJSON/XML公开 Web API
RPC/gRPC任意二进制微服务内部通信
GraphQLHTTPJSON可变复杂数据查询
SOAPHTTP/SMTPXML企业级系统
WebSocketWS/WSS任意实时应用
WebhookHTTPJSON/XML-事件通知

如何选择 API 风格?

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

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

  • RESTful 提供基础 CRUD
  • GraphQL 处理复杂查询
  • gRPC 处理微服务间通信
  • Webhook 实现异步通知

相关文章:

常见的 API 设计风格

在软件开发中&#xff0c;常见的 API 设计风格主要有以下几种&#xff0c;每种风格适用于不同的场景和需求&#xff1a; 1. RESTful API (主流) 特点&#xff1a; 基于 HTTP 协议&#xff0c;使用标准方法&#xff08;GET/POST/PUT/DELETE&#xff09;资源导向&#xff08;UR…...

Google-A2A协议全面解析:一文掌握Agent-to-Agent协议的核心与应用

前言&#xff1a; 在当今人工智能技术飞速发展的时代&#xff0c;智能体&#xff08;Agent&#xff09;已悄然融入我们生活的各个角落。无论是个人智能助手&#xff0c;还是企业的自动化工具&#xff0c;各类AI代理的应用愈发广泛。但目前这些智能体之间大多处于孤立状态&…...

Linux-服务器添加审计日志功能

#查看audit软件是否在运行(状态为active而且为绿色表示已经在运行) systemctl start auditd #如果没有在运行的话,查看是否被系统禁用 (audit为0表示被禁用) cat /proc/cmdline | grep -w "audit=0" #修改/etc/default/grub里面audit=0 改为audit=1 #更新GRUB…...

基于机器视觉的多孔零件边缘缺陷检测(源码C++、opencv、凸包、凸缺陷检测)

&#x1f451;主页&#xff1a;吾名招财 &#x1f453;简介&#xff1a;工科学硕&#xff0c;研究方向机器视觉&#xff0c;爱好较广泛… ​&#x1f4ab;签名&#xff1a;面朝大海&#xff0c;春暖花开&#xff01; 基于机器视觉的多孔零件边缘缺陷检测&#xff08;源码C、ope…...

汇川PLC通信

汇川PLC通信协议及读写 引言 汇川PLC&#xff08;Programmable Logic Controller&#xff0c;可编程逻辑控制器&#xff09;广泛应用于工业自动化领域。汇川PLC支持多种通信协议&#xff0c;包括Modbus、Ethernet/IP、PPI等。本文将详细介绍汇川PLC的通信协议&#xff0c;并通…...

如何使用AI辅助开发CSS3 - 通义灵码功能全解析

一、引言 CSS3 作为最新的 CSS 标准&#xff0c;引入了众多新特性&#xff0c;如弹性布局、网格布局等&#xff0c;极大地丰富了网页样式的设计能力。然而&#xff0c;CSS3 的样式规则繁多&#xff0c;记忆所有规则对于开发者来说几乎是不可能的任务。在实际开发中&#xff0c…...

MySQL入门:数据表的创建

​今天我们来介绍一下除HTML外的另一种语言&#xff1a;MySQL语言&#xff1b; MySQL&#xff1a;即一种用于管理和处理关系数据库的标准语言。要用于执行查询、更新、管理数据库中的数据以及定义和操作数据库结构。 接下来我会逐一介绍它的作用以及其中数据表&#xff0c;数据…...

数据库的基本原则

数据库的核心原则 原子性与持久性&#xff1a;原子性&#xff08;Atomicity&#xff09;确保一个事务中的所有操作要么全部完成&#xff0c;要么完全不执行&#xff0c;不会出现部分完成的情况。持久性&#xff08;Durability&#xff09;则保证一旦事务提交成功&#xff0c;即…...

Rust 中的Relaxed 内存指令重排演示:X=0 Y=0 是怎么出现的?

&#x1f525; Rust 中的内存重排演示&#xff1a;X0 && Y0 是怎么出现的&#xff1f; 在并发编程中&#xff0c;我们经常会听说“内存重排&#xff08;Memory Reordering&#xff09;”这个术语&#xff0c;但它似乎总是只出现在理论或者别人口中的幻觉里。本文将通过…...

C++进程间通信开发实战:高效解决项目中的IPC问题

C进程间通信开发实战&#xff1a;高效解决项目中的IPC问题 在复杂的软件项目中&#xff0c;进程间通信&#xff08;Inter-Process Communication, IPC&#xff09;是实现模块化、提高系统性能与可靠性的关键技术之一。C作为一门高性能的编程语言&#xff0c;广泛应用于需要高效…...

FPGA-DDS技术的波形发生器

1.实验目的 1.1掌握直接数字频率合成&#xff08;DDS&#xff09;的基本原理及其实现方法。 1.2在DE2-115 FPGA开发板上设计一个可调频率的正弦波和方波发生器&#xff0c;频率范围10Hz~5MHz&#xff0c;最小分辨率小于1kHz。 1.3使用Quartus II进行仿真&#xff0c;并通过S…...

C#实现通过MQTT Broker——EMQX发布订阅消息及其认证、授权的安全配置操作

一、准备内容 MQTT的构成、使用场景、工作原理介绍-CSDN博客文章浏览阅读656次,点赞7次,收藏12次。MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议【适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境】它在物联网应用中…...

考研单词笔记 2025.04.15

addition n添加&#xff0c;增加&#xff0c;加法 additional a附加的&#xff0c;额外的 in addition 另外&#xff1b;除此之外&#xff1b;加之 augment v增加&#xff0c;增强&#xff0c;提高 explode v急剧增长&#xff0c;爆炸&#xff0c;爆发&#xff0c;迸发 gr…...

【双指针】三数之和(medium)

三数之和&#xff08;medium&#xff09; 题⽬描述&#xff1a;解法&#xff08;排序双指针&#xff09;&#xff1a;算法思路&#xff1a;C 算法代码&#xff1a;Java 算法代码&#xff1a;注&#xff1a;数组转列表 题⽬链接&#xff1a;15. 三数之和 题⽬描述&#xff1a; …...

【项目管理】第17章 项目干系人管理-- 知识点整理

项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 第6章 项目管理概论 4分第13章 项目资源管理 3-4分第7章 项目…...

视频融合平台EasyCVR可视化AI+视频管理系统,打造轧钢厂智慧安全管理体系

一、背景分析 在轧钢厂&#xff0c;打包机负责线材打包&#xff0c;操作人员需频繁进入内部添加护垫、整理包装、检修调试等。例如&#xff0c;每班产线超过300件&#xff0c;12小时内人员进出打包机区域超过300次。若员工安全意识薄弱、违规操作&#xff0c;未落实安全措施就…...

无参数RCE

无参数RCE&#xff08;Remote Code Execution&#xff0c;远程代码执行&#xff09; 是一种通过利用目标系统中的漏洞&#xff0c;在不直接传递用户可控参数的情况下&#xff0c;实现远程执行任意代码的攻击技术。与传统的RCE攻击不同&#xff0c;无参数RCE不依赖外部输入参数…...

鸿蒙开发中,@Extend、@Styles 和 @Builder 的区别

在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;Extend、Styles 和 Builder 是三种常用的装饰器&#xff0c;用于提升代码复用性和可维护性。以下是它们的详细介绍和示例&#xff1a; 1. Extend&#xff1a;扩展组件样式 说明&#xff1a; 功能&#xff1a;用于…...

C++ 智能指针底层逻辑揭秘:优化内存管理的核心技术解读

目录 0.为什么需要智能指针&#xff1f; 1.智能指针的使用及原理 RAII&#xff1a; 智能指针的原理&#xff1a; 2.智能指针有哪些&#xff1f; std::auto_ptr std::unique_ptr std::shared_ptr std::weak_ptr 0.为什么需要智能指针&#xff1f; 想要回答这个问题&…...

Vue接口平台学习七——接口调试页面请求体

一、实现效果图及简单梳理 请求体部分的左边&#xff0c;展示参数&#xff0c;分text和file类型。 右边部分一个el-upload的上传文件按钮&#xff0c;一个table列表展示&#xff0c;一个显示框&#xff0c;用于预览选择的文件&#xff0c;点击可大图展示。 二、页面内容实现 …...

小程序css实现容器内 数据滚动 无缝衔接 点击暂停

<view class"gundongBox"><!-- 滚动展示信息的模块 --><image class"imgWid" :src"imgurlgundong.png" mode"widthFix"></image><view class"gundongView"><view class"container&qu…...

内存条装机,无法启动

1、i5-9600k,主板技嘉z390gamingx&#xff1a; ①、插满4条DDR4-2666&#xff0c;无法启动&#xff1b; ②、两条DDR4-2666&#xff0c;插在2、4或者1、3插槽&#xff0c;可以启动&#xff1b; ③、三条DDR4-2666&#xff0c;一条DDR4-2400&#xff0c;插满4个内存插槽&…...

【力扣】day1

文章目录 27.移除元素26. 删除有序数组的重复项 27.移除元素 26. 删除有序数组的重复项 我们仔细看一下这两道题的最后的返回值,为什么第一题返回slow 而第二题返回slow1 最后的返回值该如何返回绝对不是凭感觉,我们自己分析一下第一个slow,从0位置开始, 遇到val值就开始和fas…...

图像预处理-色彩空间补充,灰度化与二值化

一.图像色彩空间转换 1.1 HSV颜色空间 HSV颜色空间使用色调&#xff08;Hue&#xff09;、饱和度&#xff08;Saturation&#xff09;和亮度&#xff08;Value&#xff09;三个参数来表示颜色 一般对颜色空间的图像进行有效处理都是在HSV空间进行的&#xff0c;然后对于基本…...

linux如何用关键字搜索日志

在 Linux 系统中搜索日志是日常运维的重要工作&#xff0c;以下是几种常用的关键字搜索日志方法&#xff1a; 1. 基础 grep 搜索 bash 复制 # 基本搜索&#xff08;区分大小写&#xff09; grep "keyword" /var/log/syslog# 忽略大小写搜索 grep -i "error&…...

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换

原理解析 1. MySQL主从复制&#xff08;Master-Slave Replication&#xff09; 工作原理&#xff1a;MySQL主从复制通过二进制日志&#xff08;binary log&#xff09;来同步数据。主服务器记录所有更改操作到二进制日志中&#xff0c;从服务器读取这些日志并执行相应的SQL语…...

项目交接时信息遗漏,如何预防

项目交接时&#xff0c;信息遗漏可能导致任务延误、质量下降和团队混乱&#xff0c;因此&#xff0c;建立系统化的交接流程和使用专业的工具是防止信息遗漏的有效策略。交接过程中的信息丢失往往源自沟通不畅、文档不完整或者责任不明确等问题&#xff0c;这不仅影响项目的顺利…...

【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记

我是Mr.看海&#xff0c;我在尝试用信号处理的知识积累和思考方式做量化交易&#xff0c;应用深度学习和AI实现股票自动交易&#xff0c;目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 本篇要讲到量化的核心了——策略。说白了每个投资者…...

向量数据库Qdrant 安装 不使用docker

一、导读 环境&#xff1a;Ubuntu 24.04、Windows 10、WSL 2、Qdrant 1.13.4 背景&#xff1a;换了新工作&#xff0c;使用qdrant作为向量库&#xff0c;需要不使用docker安装 时间&#xff1a;20250415 说明&#xff1a;初入职&#xff0c;不了解&#xff0c;暂且记下 二、…...

微电网与分布式能源:智能配电技术的场景化落地

安科瑞顾强 随着数字化转型与能源革命的加速推进&#xff0c;电力系统正经历从传统模式向智能化、网络化方向的深刻变革。用户侧的智能配电与智能用电技术作为这一变革的核心驱动力&#xff0c;正在重塑电力行业的生态格局。本文将从技术架构、应用场景及未来趋势等维度&#…...