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...

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

  • 思维导图
  • 整体流程
相关推荐
bug菌26 分钟前
Java GUI编程进阶:多线程与并发处理的实战指南
java·后端·java ee
夜月行者2 小时前
如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
java·后端·ssm
Yvemil72 小时前
RabbitMQ 入门到精通指南
开发语言·后端·ruby
sdg_advance2 小时前
Spring Cloud之OpenFeign的具体实践
后端·spring cloud·openfeign
猿java3 小时前
使用 Kafka面临的挑战
java·后端·kafka
碳苯3 小时前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
kylinxjd3 小时前
spring boot发送邮件
java·spring boot·后端·发送email邮件
2401_857439696 小时前
Spring Boot新闻推荐系统:用户体验优化
spring boot·后端·ux
进击的女IT7 小时前
SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
java·spring boot·后端
一 乐8 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习