FastAPI 手写网关系列(1)——API网关的定义与设计

API 网关提供跨一个或多个内部 API 的单一、统一的 API 入口点。网关通常提供:

  • 速率限制
  • 访问配额管理
  • 安全
  • 缓存
  • 路由
  • API 组成、处理和版本控制
  • API 健康分析

API 网关如何在微服务中工作

什么是微服务中的 API 网关?那么,在微服务架构中,API网关模式可以帮助解决一系列问题。网关位于微服务的边缘,管理在客户端应用程序和各种服务之间流动的 API 调用。

如果没有 API 网关,您就只能处理直接的客户端到微服务模式。这样的实现可能会变得非常混乱,而且速度非常快。最终,您会对多个微服务端点进行多个客户端调用,并且客户端应用程序和微服务的耦合方式由于涉及的复杂性层而阻碍了微服务的任何类型的演变。你实际上正在扼杀创新。

通过[微服务网关和访问模式],您可以在客户端和服务之间放置一个软件应用程序(网关)。然后,客户端调用流经 API 网关,网关将它们路由到各种微服务,包括根据需要将调用分解为针对不同服务的不同请求。响应也流经网关。

这种结构具有一系列优势,包括:

  • 防止向外部客户暴露内部问题
  • 为您的微服务增加一层安全保障
  • 支持混合通信协议
  • 降低微服务复杂性
  • 微服务模拟和虚拟化的范围

我们将在下面更详细地探讨这些内容。

微服务 API 网关的优势

微服务架构中 API 网关的优势有很多。让我们看看一些主要好处。

防止将内部问题暴露给外部客户*

API 网关将外部公共 API 与内部微服务 API 分开,允许添加微服务和更改边界。其结果是能够随着时间的推移重构微服务并调整其大小,而不会对外部绑定的客户端产生负面影响。它还通过为所有微服务提供单一入口点,向客户端隐藏服务发现和版本控制详细信息。

这是微服务架构中 API 网关的主要优势之一。它为您提供了自由和灵活性来更改"幕后"所需的内容,从小型服务调整到根本性更改 - 所有这些都不会影响客户端。

为您的微服务添加额外的安全层

API 网关通过提供额外的保护层来防止 SQL 注入、XML 解析器漏洞和拒绝服务 (DoS) 攻击等攻击媒介,从而帮助防止恶意攻击。

鉴于此类攻击日益复杂,任何企业都不能忽视它们。从服务中断到声誉受损,涉及的金额巨大;添加额外的安全层是有意义的。

启用对混合通信协议的支持

虽然面向外部的 API 通常提供基于 HTTP 或 REST 的 API,但内部微服务可能会从使用不同的通信协议中受益。协议可能包括[ProtoBuf]或可能与 SOAP、JSON-RPC 或 XML-RPC 的系统集成。API 网关可以跨这些不同的协议提供基于 REST 的外部统一 API,允许团队选择最适合内部架构的 API。

降低微服务复杂性

微服务有一些常见的问题,例如:使用 API 令牌进行授权、访问控制实施和速率限制。这些问题中的每一个都会要求每个服务都实现它们,从而增加微服务的开发时间。API 网关将从您的代码中消除这些问题,使您的微服务能够专注于手头的任务。

当授权和身份验证通过 API 网关进行控制时,管理起来尤其容易。这种设置还意味着您可以清楚地监督谁访问了什么以及何时访问------这在各种情况下都可以派上用场。

API网关设计

github: github.com/tracydzf/fl...

代码仅供学习参考,适用于感兴趣者

  • 思维导图
  • 整体流程
相关推荐
monkey_meng41 分钟前
【Rust中的迭代器】
开发语言·后端·rust
余衫马44 分钟前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng1 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
paopaokaka_luck5 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
码农小旋风7 小时前
详解K8S--声明式API
后端
Peter_chq7 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml47 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~7 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616887 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
睡觉谁叫~~~8 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust