)
后端文档教程【免费下载链接】system-design-101Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.项目地址https://gitcode.com/GitHub_Trending/sy/system-design-101点击查看免费下载本指南以 system-design-101 仓库中 API 架构风格对比速查 为核心骨架系统梳理当前最主流的六种 API 架构风格——SOAP、REST、GraphQL、gRPC、WebSocket 与 Webhook。读完本文你将掌握每种风格的数据格式、底层协议、通信模型与典型适用场景能够在系统设计面试和真实架构选型中快速判断这个场景该用哪种 API 风格并知道如何在本仓库中进一步查阅每种风格的原理级资料。一、六种主流风格概览原速查文档明确给出本文覆盖当前最流行的六种 API 架构风格SOAP——基于 XML 的严格契约式消息协议REST——基于 HTTP 的资源化架构风格GraphQL——客户端自定义查询的图式 API 语言gRPC——基于 HTTP/2 与二进制编码的高性能 RPC 框架WebSocket——全双工长连接的实时通信协议Webhook——事件驱动的服务间 HTTP 回调正如仓库中 SOAP vs REST vs GraphQL vs RPC 一文所述随着时间推移不同的 API 架构风格相继出现每种风格都有自己的数据交换标准化模式。理解它们各自的标准化方式是正确选型的前提。二、SOAP严格契约的 XML 消息协议SOAPSimple Object Access Protocol是最早被大规模采用的 API 风格之一属于六种风格中契约化程度最高的方案。核心特征消息体使用 XML 编码通过 SOAP Envelope 封装请求与响应依赖 WSDL 等契约文档预先定义接口结构与数据类型调用方与服务端必须严格对齐传输层通常走 HTTP/HTTPS也可承载于 SMTP 等其他协议之上具备 WS-Security 等一整套企业级安全与事务扩展规范。典型场景金融、电信、政企等对契约、审计与安全合规要求极高的系统间集成。其代价是 XML 冗长、解析开销大、契约变更成本高因此在内部微服务通信与移动端场景中逐渐让位于更轻量的风格。三、REST以资源为中心的 HTTP 架构风格RESTRepresentational State Transfer是当今 Web 领域应用最广泛的 API 风格。仓库中的 REST API 速查 将其核心内容归纳为六大 REST 设计基本原则HTTP 方法、协议、版本化等关键组件以及分页、过滤与端点设计等实战细节。核心特征以资源为中心通过 URL 表达资源、HTTP 方法表达操作GET / POST / PUT / DELETE 等无状态通信每个请求携带完整上下文便于水平扩展数据格式以 JSON 为主也支持 XML对客户端友好、调试成本低借助 HTTP 状态码表达语义配合分页page/limit、过滤filter等约定解决大数据量查询。典型场景面向公网的 CRUD 类 Web API、前后端分离应用、第三方开放平台。REST 的表达能力在复杂的多资源关联查询与实时场景下会显得力不从心这也是 GraphQL、gRPC 等风格出现的原因。四、GraphQL客户端主导的查询语言GraphQL 由 Facebook 开源解决的核心痛点是 REST 的过度获取与请求爆炸客户端可以在一段查询中精确声明需要的字段与关联数据。核心特征单一端点客户端通过 Schema 定义的查询Query、变更Mutation与订阅Subscription获取数据客户端按需取字段减少冗余传输一个请求可聚合多个资源服务端提供强类型 Schema天然具备可发现性与自文档化能力。仓库内的真实案例LinkedIn 的 GraphQL 实践 展示了一个完整的企业级落地流程分三步编辑与测试查询客户端开发者编写查询并与后端服务联调注册查询提交查询到查询注册表query registry并将路由元数据一并登记生产使用查询随客户端代码一起发布路由元数据用于流量路由层将请求导向正确的服务集群运行期缓存已注册的查询一条示例查询会先访问 identity 服务获取成员信息再访问 organization 服务获取公司信息。值得注意的工程取舍是LinkedIn并未部署 GraphQL 网关原因有二——避免引入额外的一跳网络开销以及避免单点故障SPOF。典型场景BFFBackend for Frontend层、数据面广且字段组合多变的移动端应用、需要聚合多个下游服务的场景。代价是服务端缓存与限流复杂度上升、查询可控性需要额外治理如查询注册表与复杂度分析。五、gRPCHTTP/2 之上的高性能 RPCgRPC 是面向微服务内部通信的高性能远程过程调用RPC框架。仓库中 gRPC 工作原理 给出了完整的数据流说明RPC 之所以被称为远程调用是因为它让部署在不同服务器上的服务能够相互通信而从调用方视角看它就像一次本地函数调用。核心特征使用 Protocol Buffersproto定义 IDL自动生成客户端 stub 与服务端骨架代码基于 HTTP/2 传输支持头部压缩、多路复用与双向流式通信消息体经过二进制编码相比 JSON 显著减小体积并降低序列化开销。调用链路以订单服务调用支付服务为例客户端发起一次 REST 调用请求体通常为 JSON订单服务作为 gRPC 客户端接收该请求将其转换后向支付服务发起 RPC 调用gRPC 把客户端 stub 编码为二进制格式并交给底层传输层gRPC 通过 HTTP/2 在网络上发送数据包——由于二进制编码与网络优化原文档指出 gRPC 的传输速度可达 JSON 方案的数倍量级支付服务gRPC 服务端从网络接收数据包、解码后调用服务端应用逻辑结果从服务端应用返回再次编码并送入传输层订单服务接收数据包、解码把结果返回给客户端应用。典型场景微服务间高吞吐内部调用、低延迟的流式数据交换如实时订阅、音视频控制面、多语言异构服务互通。相对短板是浏览器端支持受限、调试不如 REST 直观一般不建议直接暴露给公网客户端。六、WebSocket全双工实时通信WebSocket 解决的是HTTP 服务器无法主动向浏览器发起连接这一根本限制。仓库中的 轮询、SSE 与 WebSocket 对比 把实时方案分为两类浏览器承担主要工作短轮询浏览器反复重试直到拿到最新数据与长轮询HTTP 服务器在数据到达前不返回响应浏览器与服务器协同WebSocket 或 SSEServer-Sent Events。连接建立后服务器都能直接推送最新数据区别在于SSE 是单向的浏览器不能再向服务器发新请求而WebSocket 是全双工的浏览器可以持续发送新请求。核心特征通过 HTTP Upgrade 握手升级为持久 TCP 连接全双工双向通信服务端可主动推送浏览器可实时上行消息为帧化二进制/文本通信延迟远低于轮询。典型场景在线聊天如 Slack 消息的旅程 一类的实时消息系统、实时协作编辑、行情推送、在线游戏与直播互动。代价是需要维护长连接状态对连接管理与横向扩展如连接网关、心跳保活要求较高。七、Webhook事件驱动的服务端回调Webhook 与前五种请求-响应风格不同它是一种事件通知模式当源系统发生特定事件时主动向预先注册的 URL 发起 HTTP 回调把事件数据推送给订阅方。仓库中 轮询 vs Webhook 与 API 协议演进2023 均将其列为最流行的 API 形态之一。核心特征方向反转由服务端生产者发起订阅方只需提供回调端点基于普通 HTTP POST实现成本低、与现有基础设施天然兼容天然适合异步事件流无需订阅方主动轮询。典型场景支付回调支付结果通知、Git 仓库的 Push/PR 事件、CI/CD 构建状态通知、消息队列消费后触发的下游动作等。工程上必须处理的三件事回调重试与幂等防止重复投递、签名验签防止伪造回调、回调端点的可用性保障。八、六种风格横向对比速查维度SOAPRESTGraphQLgRPCWebSocketWebhook数据格式XMLJSON/XMLJSON查询语言Protocol Buffers二进制二进制/文本帧JSON 等HTTP POST 体底层协议HTTP(S)/SMTP 等HTTP/HTTPSHTTP/HTTPSHTTP/2TCP经 HTTP UpgradeHTTP/HTTPS通信方向请求-响应请求-响应请求-响应含订阅请求-响应 双向流全双工长连接服务端主动回调契约/定义WSDL强契约无强制契约OpenAPI 可选Schema强类型proto IDL强契约无协议级约定无事件格式约定状态管理有状态/无状态均可无状态无状态无状态有状态长连接无状态回调典型场景企业/金融集成公网 CRUD、开放平台BFF、字段灵活聚合微服务内部高性能调用聊天、行情、协作事件通知、支付回调主要代价冗长、契约变更成本高过度获取、多请求聚合难缓存/限流复杂度高浏览器支持受限、调试不便连接管理复杂重试幂等与安全验签九、选型决策要点面对一个具体的系统设计问题时可以沿着以下顺序快速收敛通信方向如果服务端需要随时主动推送、且客户端也要实时上行聊天、协作编辑优先WebSocket只需服务端单向推送SSE 是更轻的替代。事件通知如果需求是某个事件发生后通知下游系统而不是调用接口拿数据选Webhook。调用方与性能微服务内部的低延迟、高吞吐调用优先gRPC面向公网浏览器端的业务 API优先REST或GraphQL。数据面复杂度客户端字段组合多变、需要聚合多个服务考虑GraphQL标准 CRUD 与资源化管理REST 足够。合规与契约金融、政企等要求强契约、强审计的场景SOAP仍是成熟选项。十、在本仓库中继续深入六种风格在 system-design-101 仓库中均有对应的高质量指南建议按需精读REST API 速查REST 六大原则、HTTP 方法、版本化、分页过滤REST API 工作原理 与 REST API vs GraphQLREST 与 GraphQL 的取舍细节gRPC 工作原理 与 什么是 gRPCgRPC 完整数据流与原理LinkedIn 的 GraphQL 实践 与 GraphQL 落地模式企业级落地流程轮询 / SSE / WebSocket 对比实时通信三方案原理轮询 vs Webhook事件通知模式细节2023 API 协议演进全景六种协议与各自的收益、挑战综述API 设计速查跨风格的通用 API 设计规范把本文的对比维度与上述指南的原理细节结合起来你就能在系统设计面试中面对任意实时推送 / 服务间通信 / 开放平台 API类问题时给出有理有据的风格选型结论。赞分享后端文档教程【免费下载链接】system-design-101Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.项目地址https://gitcode.com/GitHub_Trending/sy/system-design-101点击查看免费下载相关推荐Umi-OCR 免费离线 OCR 工具完整指南截图、批量图片与 PDF 识别一步到位Umi OCR 免费离线 OCR 工具完整指南截图、批量图片与 PDF 识别一步到位 你是否遇到过这样的情况手里是一份扫描版 PDF能看到字却复制不出或OCR桌面应用System Design 101 的 API 安全速查表从 HTTPS 到 RBAC 的六层防护实践System Design 101 的 API 安全速查表从 HTTPS 到 RBAC 的六层防护实践 导读 本文以 a cheatsheet to buil后端文档教程Fault-Tolerant Systems 设计速查System Design 101 的六大容错原则Fault Tolerant Systems 设计速查System Design 101 的六大容错原则 本文以 System Design 101 仓库中的后端文档教程上一篇Parabolic插件权限管理控制扩展的访问范围下一篇pure sh bible性能调优清单提升脚本速度的关键步骤创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考