前端扫盲:什么是API网关?为什么它有用?

API 通常被称为应用程序从后端服务访问数据和业务逻辑的前门。API 本质上是一个软件向其他人或程序提供的接口,允许他们与该软件进行交互。

在创建 API 时,需要选择编程语言(Java、Python、PHP 等)来编写 API 逻辑,还需要将 API 部署到服务器上,并监控 API,以确保基础设施有足够的能力处理大量请求。

API网关将这些步骤抽象出来,你不需要编写太多代码,也不用担心管理底层基础设施,你只需要创建客户端可以发送请求的API端点。

主要的云提供商都提供完全托管的API网关服务:

  • AWS API 网关
  • GCP API网关
  • Azure API管理

本文将解释为什么应该使用 API 网关,它们是如何工作的,我们将查看实际应用中的 API 网关示例。

我们将介绍的内容:

文章目录

    • 1.为什么要使用API网关?
    • 2.API网关的工作原理
      • 2.1 请求验证
      • 2.2 授权和认证
      • 2.3 速率限制
      • 2.4 请求路由
      • 2.5 请求和响应转换
    • 3.真实世界的例子
    • End

1.为什么要使用API网关?

在这里插入图片描述

API网关(API Gateway)是一种完全托管的服务,它使开发人员能够更轻松地创建、发布、维护、监控和保护几乎任何规模的API。

在云计算环境中,“完全管理”是指服务的维护和管理责任由云提供商负责,这意味着底层基础设施、软件更新、安全、可扩展性、可用性和灾难恢复都由云提供商管理。

这种抽象主要让开发人员的工作变得更容易,因为他们只需专注于开发服务,而不必担心管理它。

在这种情况下,这种抽象的代价是灵活性的损失,大多数云提供商提供的API网关对每秒处理的请求数量(RPS)有一个硬限制。

使用 API 网关等托管服务的云成本也较高,必须与从头开始构建 API 所需的较高开发人员天数(开发人员数量 * 工作天数)进行权衡。

为了真正理解使用 API Gateway 的好处,让我们来看看设计、编写和部署传统 API 所需遵循的步骤:

步骤1:定义需求和范围

  • 了解目标用户或系统的需求。
  • 确定API将公开的数据和功能。

步骤2:设计API

  • 定义API端点和方法(GET、POST、PUT、DELETE)。
  • 设计请求和响应格式(通常是 JSON 或 XML)。
  • 指定API将与之交互的数据模型和资源。
  • 计划错误处理和状态代码。

步骤3:开发API

  • 选择编程语言和框架。
  • 按照设计阶段定义的 API 端点进行实现。
  • 根据需要与数据库或其他服务集成。
  • 确保安全实践得到实施,如输入验证和速率限制。

步骤4:部署API

  • 选择托管解决方案(云提供商,现场服务器)。
  • 设置部署环境。
  • 将 API 部署到服务器。

步骤5:监控和维护API

  • 监控 API 的正常运行时间、性能和错误。
  • 定期更新API以修复错误和补丁安全漏洞

使用 API 网关,您主要需要关注步骤 1、步骤 2 和步骤 3 的部分内容,其他步骤大多被抽象出来并由 API 网关处理。

使用 API 网关的主要原因是简化开发和维护 API 的过程。

2.API网关的工作原理

API网关同时做很多事情。

为了理解 API 网关的工作原理,我们来打个比方。

API网关就像maître d’(法语,意思是领班服务员),maître d’通常出现在高档餐厅,尽管这是一个正在慢慢消失的职业。

领班是客人和餐厅员工之间的联络人,负责:

  1. 问候和安排座位:领班通常是客人到达餐厅时遇到的第一个人。他们热情地欢迎客人,询问预订情况,并协助客人就座,考虑到偏好和特殊要求。
  2. 预订:领班负责管理预订,确保桌子被有效分配。他们跟踪可用的桌子和预订时间,做出必要的调整以满足客人的需求。
  3. 管理等待时间:在繁忙时期,领班通过提供预计等待时间和提供替代方案,如在酒吧或等候区为客人安排座位,来管理客人的等待时间。
  4. 解决问题:如果客人用餐期间出现任何问题或顾虑,领班应及时介入并解决问题,确保客人满意。
  5. 处理特殊要求:如果客人有特殊要求或饮食限制,领班会将这些信息传达给厨房,并确保客人的需求得到满足。

简而言之,领班是餐厅里一个拥有多种才能和职责的人,从下面的图片中,我们可以看到领班是如何作为顾客和他们可能需要的沟通者。

领班是顾客和他们可能需要的任何东西之间的沟通者

API网关的工作方式类似,它充当客户机与其可能需要访问的许多服务之间的通信器。

API网关充当客户机和它们可能需要访问的许多服务之间的中间人

让我们更详细地研究一下API网关能做什么。

2.1 请求验证

这包括检查传入的请求,以确认它们在转发到后端服务之前符合预定义的标准。

这可能包括检查请求的结构、验证数据类型、确保存在所需的参数,以及根据模式验证查询参数、头和请求体。

通过这样做,API网关作为第一道防线,防止格式不规范或恶意请求到达后端系统。

用餐厅的比喻,这类似于在餐厅门口等待迎接客人的领班,但记住,这是一个高档餐厅,所以领班要确保客人的着装符合餐厅的着装规范 —— 类似于根据预定义的模式验证传入的 API 请求。

2.2 授权和认证

身份验证是验证发出请求的用户或服务的身份的过程,通常通过用户名和密码、令牌或 API 密钥等凭据进行验证。

通过身份验证后,授权将决定已通过身份验证的实体有权访问或执行哪些资源或操作。

API网关通常与身份提供者集成,并支持各种身份验证和授权机制,如OAuth、JWT、API密钥等。它们确保只有合法的、授权的请求才能通过后端服务。

身份验证关注的是“谁”,而授权关注的是“权限”。

对于迎接客人进入餐厅的领班来说,身份验证涉及到客人证明他们就是自己所说的那个人,通常是通过出示某种形式的身份证件,其中的照片可以与他们的脸匹配。

授权将涉及检查他们是否有预约,也就是说他们有权进入餐厅点餐。

2.3 速率限制

速率限制涉及到控制用户或服务在指定时间范围内可以发出的请求数量,通常定义为每秒请求数量的限制(RPS)。

速率限制有助于避免后端服务的过载,确保它们仍然可用。速率限制也被用作成本控制策略的一部分,因为您将为发送到 API 网关的每个请求付费。

API网关可以根据访问的用户、服务或端点实施不同的速率限制策略。

以我们的餐厅类比为例,想象一下我们的餐厅里有客人,他们都经过了验证、认证和授权进入餐厅。但是这些客人特别饥饿和口渴,不断点餐和饮料。在某个时刻,这对餐厅来说变得难以管理。厨师和服务员过度劳累,没有能力接受任何新的订单,盘子和餐具都用完了,厨房里的食物也快用完了。

主厨可以介入并限制顾客的订单数量,例如,限制每小时可以点的主菜或葡萄酒的数量,限额限制可以确保餐厅不会超负荷,仍然能够为新顾客服务。

2.4 请求路由

API 网关根据 URL 路径、HTTP 方法、标头或查询参数等各种条件管理传入请求到适当后端服务的路由。它是微服务架构不可或缺的一部分,其中不同的服务处理 API 的不同部分。

回到我们之前的餐厅比喻,根据客人的目的,领班会将他们引向合适的人或地方——用餐者引向服务员,只想喝酒的客人引向吧台,询问预订餐厅活动的人引向活动协调员。

2.5 请求和响应转换

这涉及到在请求和响应通过 API 网关时对其进行修改。

对于请求,这可能意味着添加、删除或修改头部、重写 URL,甚至更改请求体。对于响应,这可能涉及更改状态代码、修改头部或转换体。

这种功能允许 API 网关作为一个中介,可以转换请求和响应,以满足客户机和后端服务的需求。

后端服务也可以执行这种请求和响应转换。关于哪个组件(API网关或后端服务)进行转换的决定是主观的。但是,API网关通常是一个理想的地方,以最小的努力集中这种转换,而不是在每个后端服务中进行自定义转换。

例如,如果餐厅的客人不耐麸质,那么他们的订单就必须改变,以确保餐点不含任何麸质。

这种订单转换的逻辑可以通过领班在把订单发给主厨之前明确地指出哪些食材应该被排除在菜单之外来实现,也可以在厨房里通过领班简单地告诉主厨客人点了一道无麸质菜肴,并让他相应地修改订单来实现。

3.真实世界的例子

微服务架构是一种开发软件的方法,它将大型应用程序分解为更小的、独立的组件,称为微服务。每个微服务都是一个自包含的单元,在更广泛的应用程序中具有特定的功能或责任。

下图显示了一个基本的电子商务应用程序的简单微服务架构。

电子商务网站微服务架构中使用的API网关

  • 客户端:这些是与电子商务平台交互的不同客户端。它们可以是移动应用程序、网页浏览器或任何其他第三方应用程序。
  • API网关:作为所有类型客户机的单一入口点,它根据请求的性质(与用户相关、与产品相关、与订单相关)将请求路由到适当的微服务。
  • 服务:这些是电子商务网站特定的微服务示例。每个服务处理业务逻辑的不同方面,如用户配置文件、产品目录和订单处理。
  • 数据库:每个微服务都有自己的专用数据库,确保数据隔离和服务独立性。

在这个例子中,API网关是:

  1. 确保每个客户的请求都经过验证
  2. 确保客户在进行一些操作(如订购或撰写产品评论)之前得到身份验证和授权
  3. 速率限制请求,以确保服务不会因发送大量请求的恶意行为而关闭。
  4. 根据不同的条件(如 URL 路径、HTTP 方法、头部或查询参数)将客户机请求路由到适当的后端服务。
  5. 处理请求和响应转换。例如,来自 Product Service 的响应可能具有复杂的格式和广泛的细节。API 网关将此响应转换为更适合移动应用程序的格式。这可能涉及简化数据,将其转换为更轻的格式,或仅提取移动应用程序所需的基本信息。

End

API网关是一种完全托管的服务,它使开发人员能够更轻松地创建、发布、维护、监控和保护几乎任何规模的API,由于是完全托管的,它抽象了管理和维护底层基础设施所需的工作——这由提供服务的云提供商处理。

API网关充当客户机和许多需要访问的服务之间的中间人,它处理请求验证、身份验证和授权、速率限制、请求路由和请求/响应转换。

它在微服务架构中特别有用,作为管理、处理和将传入请求路由到适当微服务的中心入口点,在简化客户端交互和为一组微服务提供中心接口方面发挥着至关重要的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ProjectFileManager 发布!项目文件管理效率提升10倍以上!

值此特别的新春假期,盛派网络在这里先祝大家新春安康!鼠年平安、幸福、发财、万事如意!也祝福疫区的同胞和医护人员平安度过这一段关键时期!延长的假期显然也为我们日常工作带来了一些障碍,为了能够利用工具进一步提高…

简历中能熟练使用计算机怎么写,过了计算机二级,可以在简历里写“熟练掌握Excel”吗?...

原标题:过了计算机二级,可以在简历里写“熟练掌握Excel”吗?咨询/快消/互联网/四大/投行PEVC/券商绝大多数岗位都会要求“熟练掌握Excel”而尽管绝大多数同学“实际水平根本达不到工作要求”但是每一位同学都敢在简历上放一句薛定谔的「熟练掌…

.Net Core 认证系统之基于Identity Server4 Token的JwtToken认证源码解析

介绍JwtToken认证之前,必须要掌握.Net Core认证系统的核心原理,如果你还不了解,请参考.Net Core 认证组件源码解析,且必须对jwt有基本的了解,如果不知道,请百度.最重要的是你还需要掌握identity server4的基本用法,关于identity server4因为涉及到两个协议Oath2.0和openid conn…

【C# 调用 Go 语言】0x2 参数、返回值与类型转换

在上篇文章【C# 调用 Go 语言】0x1 Hello Golang 中,我们将 Golang 源码编译为动态链接库(dll),用 C# 调用 Golang 导出的方法并成功的看到了控制台的输出。本篇文章将对 C# 调用 Golang 方法做更详细的介绍,涉及如何…

《ASP.NET Core 微服务实战》-- 读书笔记(第1章 、第2章)

译者序微服务设计方法清晰定义了各个开发团队的业务边界,微服务框架以不同方式实现了服务之间的协作与集成。.NET Core 作为全新的 .NET 技术,它不仅完全开源、跨平台,更面向云原生开发进行了大量细致的优化。它完全模块化,不依赖…

html缩进标签quote,HTML blockquote 标签

HTML 标签标签同样是对文本进行引用,不同的是该标签引用的是长文本。标签内的内容会自动有缩进。实例定义一个摘自另一个源的块引用:For 50 years, WWF has been protecting the future of nature. The worlds leading conservation organization, WWF w…

使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务

真没想到大过年还在家里写代码写文章,本来还打算自驾半个月没想出现这情况。在这里祝福全国同胞在新的一年里身体健康!希望阳光天气早日照射在这片土地上,给人带来新一年的希望!NetBenchmark是针对网络服务压测的开源组件&#xf…

如何使用Serilog.AspNetCore记录ASP.NET Core3.0的MVC属性

这是Serilog系列的第三篇文章。第1部分-如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出第2部分-Serilog高级玩法之用Serilog记录所选终结点附加属性第3部分-使用Serilog.AspNetCore记录MVC属性(本文)第4部分-从Serilog请求记录中排除运行…

广东省计算机媒体大赛,广东省大学生计算机设计大赛

广东省大学生计算机设计大赛由广东省教育厅主办。比赛宗旨为进一步提高广东省高校计算机教学和信息技术与学科深度融合的水平,激发省内各高校各专业大学生学习计算机知识和技能的兴趣和潜能,提升大学生运用信息技术解决实际问题的综合实践能力&#xff0…

哈希表-拉链法及应用举例

哈希表存储结构: 1.开放寻址法 2.拉链法 哈希表的主要作用: 把一个较大(0-10^9 )的数据映射到较小(0-N(N一般为10^5 到 10^6))的数据 哈希函数:可以把一个从-10^19 到10^19 的中的一个数映射到0-10^5之间的一个数 1.哈希函数怎么写&#x…

各互联网公司延期上班一览

【延期上班,自我隔离】自从1月26日,国家颁布了延长春节假期的公告之后,互联网行业各公司也纷纷更新了自己的延期上班计划,如下表所示:可以看到,多数公司采取了在家办公的这种模式,还有些公司直接…

计算机系统占有率,微软继续领跑PC操作系统市场 Win10占有率突破25%

腾讯科技讯,据外媒报道,发布一年半之后,Windows 10的市场占有率终于跨过25%这一里程碑,这就意味着,如今世界上每四台电脑中就有一台运行Windows 10系统。Net Applications的数据显示,Windows 10发布后四周内…

递推求组合数

组合数计算公式&#xff1a; 递推公式&#xff1a; 代码模板&#xff1a; #include <iostream> using namespace std; const int N 1010; int c[N][N];int main() {int a,b;cin>>a>>b;//a在下&#xff0c;b在上for (int i 0;i<N;i)for (int j 0;j&…

微软发布 Power BI 2020 上半年发行计划

微软官方与日前发布了 Power BI 在2020上半年的发行计划。本文将在 2020.9 之前都有用&#xff0c;建议收藏查看。从今年开始&#xff0c;我们除了客观描述 Power BI 的特性外&#xff0c;还将加入大量主观观点态度和吐槽&#xff0c;不过不管怎么吐&#xff0c;都只能继续用&a…

AcWing 523. 组合数问题

组合数 Cmn 表示的是从 n 个物品中选出 m 个物品的方案数。  举个例子&#xff0c;从 (1, 2, 3) 三个物品中选择两个物品可以有 (1, 2), (1, 3), (2, 3) 这三种选择方法。  根据组合数的定义&#xff0c;我们可以给出计算组合数 Cmn 的一般公式&#xff1…

远程办公经验为0,如何将日常工作平滑过度到线上?

导语 | 受到疫情影响&#xff0c;很多企业开始考虑远程办公。近日&#xff0c;TVP群里的各位老师们对此话题展开了热烈讨论。TVP张善友老师作为一名创业者&#xff0c;也决定开启远程办公。本文是他对相关经验总结而得的方案&#xff0c;并列出了相关产品清单&#xff0c;希望对…

华为v30pro计算机在哪里,请问V30PRO的数据怎么转到电脑上

[分享交流]请问V30PRO的数据怎么转到电脑上26343电梯直达花粉199050253新学乍练发表于 2020-10-2 18:48:36来自&#xff1a;荣耀V30 Pro 5G最新回复 2020-10-2 19:18:00冷不悔独步江湖发表于 2020-10-2 18:50:59来自&#xff1a;荣耀V30 Pro 5G你所说的数据具体点&#xff0c;图…

伦斯勒理工大学计算机专业好申请吗,2020年伦斯勒理工学院申请难度

伦斯勒理工学院简介伦斯勒理工大学&#xff0c;中国教育部官方名称&#xff1a;仁斯利尔理工大学&#xff0c;英文原名Rensselaer Polytechnic Institute&#xff0c;简称RPI&#xff0c;为全美顶尖理工大学&#xff0c;美国东部高等学府&#xff0c;位于美国纽约州首府奥尔巴尼…

致 wuhan2020 开源社区全体成员的一封信

各位 wuhan2020 开源社区成员&#xff1a;2020年1月25日&#xff0c;春节&#xff0c;在这个特殊的日子&#xff0c;我们正式发起了《wuhan2020&#xff1a;武汉新型冠状病毒防疫开源信息收集平台》的开源项目&#xff0c;用开发者们的方式支援这场没有硝烟的战争。截至2020年1…

如何加入到 wuhan2020 开源项目,打赢这场没有硝烟的战争?

比尔盖茨2015年在 Ebola 爆发之后做的 TED 演讲前言这是比尔盖茨2015年在 Ebola 爆发之后做的 TED 演讲。他认为在未来几十年里&#xff0c;如果有什么东西可以杀掉上千万人&#xff0c;那更可能是个有高度传染性的病毒&#xff0c;而不是战争&#xff1b;不是导弹&#xff0c;…