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

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

  • 思维导图
  • 整体流程
相关推荐
Dear.爬虫5 分钟前
Golang中逃逸现象, 变量“何时栈?何时堆?”
开发语言·后端·golang
努力的小郑1 小时前
MySQL索引(三):字符串索引优化之前缀索引
后端·mysql·性能优化
IT_陈寒1 小时前
🔥3分钟掌握JavaScript性能优化:从V8引擎原理到5个实战提速技巧
前端·人工智能·后端
程序员清风2 小时前
贝壳一面:年轻代回收频率太高,如何定位?
java·后端·面试
考虑考虑2 小时前
Java实现字节转bcd编码
java·后端·java ee
AAA修煤气灶刘哥2 小时前
ES 聚合爽到飞起!从分桶到 Java 实操,再也不用翻烂文档
后端·elasticsearch·面试
爱读源码的大都督3 小时前
Java已死?别慌,看我如何用Java手写一个Qwen Code Agent,拯救Java
java·人工智能·后端
星辰大海的精灵3 小时前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
天天摸鱼的java工程师3 小时前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
一乐小哥3 小时前
一口气同步10年豆瓣记录———豆瓣书影音同步 Notion分享 🚀
后端·python