网易首页 > 网易号 > 正文 申请入驻

使用 API 网关链接 API 请求

0
分享至

了解如何使用开源 API 网关处理应按顺序调用的客户端请求,该网关将 API 工作流分解为更易于管理的步骤。

随着需要集成的 API 数量的增加,管理 API 交互的复杂性变得越来越具有挑战性。通过使用API 网关,我们可以创建一系列 API 调用,将 API 工作流程分解为更小、更易于管理的步骤。例如,在在线购物网站中,当客户搜索商品时,平台可以向商品搜索 API 发送请求,然后向商品详情 API 发送请求以检索有关商品的更多信息。在本文中,我们将为Apache APISIX API 网关创建一个自定义插件,以处理应按顺序调用的客户端请求。

什么是链接 API 请求,我们为什么需要它?

链接 API 请求(或管道请求,或顺序 API 调用)是软件开发中使用的一种技术,用于管理 API 交互的复杂性,其中软件需要多次 API 调用才能完成一项任务。它类似于批处理请求处理,您将多个 API 请求组合成一个请求,然后将它们作为批处理发送到服务器。虽然它们看起来很相似,但管道请求涉及向服务器发送单个请求,触发一系列 API 请求以定义的顺序执行. 序列中的每个 API 请求都可以修改请求和响应数据,一个 API 请求的响应将作为输入传递给序列中的下一个 API 请求。当客户端需要执行一系列必须按特定顺序执行的相关 API 请求时,管道请求会很有用。

在管道的每个步骤中,我们都可以在将响应数据传递到下一步之前对其进行转换或操作。这在需要将数据返回给客户端之前对其进行规范化或转换过滤掉敏感数据的情况下很有用。它可以帮助减少整体延迟。例如,一个 API 调用可以在另一个 API 等待响应时调用,从而减少完成工作流所需的总时间。

Apache APISIX 的自定义管道请求插件

API 网关可以是实现此功能的正确位置,因为它可以拦截所有客户端应用程序请求并将它们转发到预期目的地。我们将使用Apache APISIX,因为它是一种流行的开源 API 网关解决方案,带有大量内置插件。但是,在撰写当前博文时,APISIX 还没有对管道请求插件的官方支持。通过了解APISIX 的自定义插件开发功能,我们决定引入一个可以提供相同功能的新插件。GitHub 上有一个 repo,其中包含用Lua 编程语言编写的源代码和pipeline-request 插件的描述。

使用此插件,您可以指定应按顺序调用的上游 API 列表,以处理单个客户端请求。每个上游 API 都可以修改请求和响应数据,并且来自一个上游 API 的响应作为输入传递给管道中的下一个上游 API。管道可以在路由配置中定义,您还可以在管道执行 API URL 时定义它们的顺序。

让我们通过一个例子来了解这个插件的用法。假设您有两个 API——一个发出 GET/credit_cards请求以检索信用卡信息,另一个在 POST 请求正文中接收先前的响应数据/filter,然后在返回之前过滤掉敏感数据(例如信用卡号和到期日期)对客户端的响应。因为信用卡 API 端点返回不应暴露给未授权方的敏感信息。下图说明了整体数据流:

  1. 当客户端向 API 网关的信用卡 API 端点请求检索所有信用卡信息时,API 网关转发请求以从信用卡后端服务检索信用卡数据。
  2. 如果请求成功并返回信用卡数据,则它传递给管道中的下一步安全服务
  3. 当从安全服务接收到过滤后的响应时,它将组合的响应返回给客户端。
管道请求插件演示

对于此演示,我们将利用GitHub 上另一个准备好的演示项目,您可以在其中找到本教程中使用的所有curl 命令示例,运行 APISIX 并启用自定义插件,而无需使用Docker compose .yml 文件进行额外配置。

先决条件
  1. Docker用于安装容器化的etcd和APISIX。
  2. curl用于向 APISIX Admin API 发送请求。您还可以使用Postman等简单工具与 API 进行交互。
第 1 步:安装并运行 APISIX 和 etcd

在 fork/clone项目docker compose up后,您可以通过从项目根文件夹运行来轻松安装 APISIX 和 etcd 。您可能会注意到文件中指定了一个卷。这将安装本地目录* * 我们的文件与自定义插件实现作为只读卷在 docker 容器中的路径。这允许在运行时将自定义插件添加到 APISIX(此设置仅适用于使用 docker 运行 APISIX 的情况)。./custom-plugins:/opt/apisix/plugins:rodocker-compose.yml./custom-pluginspipeline-request.lua/opt/apisix/plugins

第 2 步:使用 Pipeline-Request 插件创建第一个路由

APISIX 运行后,我们使用 cURL 命令将 HTTP PUT 请求发送到 APISIX Admin API/routes端点以创建我们的第一个侦听 URI 路径的路由/my-credit-cards。

curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/1' \ --header 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \ --header 'Content-Type: application/json' \ --data-raw '{ "uri":"/my-credit-cards", "plugins":{ "pipeline-request":{ "nodes":[ { "url":"https://random-data-api.com/api/v2/credit_cards" }, { "url":"http://127.0.0.1:9080/filter" } ] } } }'

配置的重要部分是“插件”部分,它指定“管道请求”插件应该用于此 API 路由。插件配置包含一个“节点”数组,它定义了应该在管道中执行的 API 请求的顺序。您可以在那里定义一个或多个 API。在这种情况下,管道由两个节点组成:第一个节点向https://random-data-api.com/api/v2/credit_cards ****API发送请求以检索信用卡数据,第二个节点节点向位于http://127.0.0.1:9080/filter的本地 API 发送请求,以从信用卡信息中过滤掉敏感数据。第二个 API 将只是一个使用serverless-pre-function 的无服务器函数APISIX 插件。它充当后端服务来修改来自第一个 API 的响应。

第 3 步:使用无服务器插件创建第二个路由

接下来,我们配置一个 ID 为 2 的新路由,用于处理对/filter管道中端点的请求。它还启用无服务器预函数APISIX 的现有插件,我们在其中指定应由插件执行的 Lua 函数。此函数只是从先前的响应中检索请求正文,替换信用卡号字段,并保持响应的其余部分不变。最后,它将当前响应主体设置为修改后的请求主体,并将 HTTP 200 响应发送回客户端。您可以修改此脚本以满足您的需要,例如使用解码后的主体执行进一步的处理或验证。

curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/2' \ --header 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \ --header 'Content-Type: application/json' \ --data-raw ' { "uri": "/filter", "plugins":{ "serverless-pre-function": { "phase": "access", "functions": [ "return function(conf, ctx) local core = require(\"apisix.core\") local cjson = require(\"cjson.safe\")-- Get the request body local body = core.request.get_body() -- Decode the JSON body local decoded_body = cjson.decode(body) -- Hide the credit card number decoded_body.credit_card_number = \"****-****-****-****\" core.response.exit(200, decoded_body); end" ] } } }'

第 4 步:测试设置

现在是测试整体配置的时候了。使用以下 curl 命令,我们向端点发送 HTTP GET 请求http://127.0.0.1:9080/my-credit-cards

curl http://127.0.0.1:9080/my-credit-cards

我们在第二步中配置了相应的路由来使用pipeline-request带有两个节点的插件,这个请求将触发管道从端点检索信用卡信息https://random-data-api.com/api/v2/credit_cards,使用端点过滤掉敏感数据http://127.0.0.1:9080/filter,并将修改后的响应返回给客户端。查看输出:

{ "uid":"a66239cd-960b-4e14-8d3c-a8940cedd907", "credit_card_expiry_date":"2025-05-10", "credit_card_type":"visa", "credit_card_number":"****-****-****-****", "id":2248 }

如您所见,它将请求正文中的信用卡号(实际上,它是链中第一个 API 调用的响应)替换为星号。

概括

到目前为止,我们了解到我们的 Apache APISIX API 网关自定义管道请求插件允许我们将一系列 API 调用定义为特定顺序的管道。我们还可以将这个新插件与现有插件结合使用,为我们的 API 端点启用身份验证、安全性和其他 API 网关功能。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
破案了,追到3分,基德为何叫暂停?赛后回应,谁注意东契奇反应

破案了,追到3分,基德为何叫暂停?赛后回应,谁注意东契奇反应

东球弟
2024-06-14 09:32:11
跟谁学的?单场16次摊手!东契奇成了NBA最大的笑话

跟谁学的?单场16次摊手!东契奇成了NBA最大的笑话

篮球教学论坛
2024-06-14 10:59:12
央视表扬!17岁天才少女,中专生打败800多名世界名校学生!偏科,不知道埋没了多少天才!

央视表扬!17岁天才少女,中专生打败800多名世界名校学生!偏科,不知道埋没了多少天才!

来电娱乐
2024-06-14 11:25:58
越抛越多,中国已减持5526亿美债,倘若全都抛光,结果会咋样?

越抛越多,中国已减持5526亿美债,倘若全都抛光,结果会咋样?

涛涛生活搞笑
2024-06-13 20:52:15
陈梦已经失去巴黎单打资格,为什么这么说?一点原因说明问题

陈梦已经失去巴黎单打资格,为什么这么说?一点原因说明问题

体坛狗哥
2024-06-14 09:56:45
绝了,姆总还未加盟!皇马内讧,1.4亿巨星不让步,或与巴黎互换

绝了,姆总还未加盟!皇马内讧,1.4亿巨星不让步,或与巴黎互换

阿泰希特
2024-06-14 15:29:01
银行女职员表白副行长,原来两人是真爱

银行女职员表白副行长,原来两人是真爱

梦马笔谈
2024-06-14 19:48:51
深夜,知名车企声明:已报案!发生了什么?

深夜,知名车企声明:已报案!发生了什么?

每日经济新闻
2024-06-13 00:05:09
收视率全国第一,《新闻联播》花24秒强推,央视这部黑马大剧炸了

收视率全国第一,《新闻联播》花24秒强推,央视这部黑马大剧炸了

糊咖娱乐
2024-06-12 11:39:56
四川一副局长任上被查,官方通报!其90后下属3天前刚被查

四川一副局长任上被查,官方通报!其90后下属3天前刚被查

鲁中晨报
2024-06-14 20:35:34
早日康复!陈奕迅打网球中暑晕倒,下巴缝合30针,伤口深至见骨

早日康复!陈奕迅打网球中暑晕倒,下巴缝合30针,伤口深至见骨

娱乐白名单
2024-06-13 12:24:10
华为回应最大牛肉进口商:造谣,莫塞尔主要服务员工及家属

华为回应最大牛肉进口商:造谣,莫塞尔主要服务员工及家属

鞭牛士
2024-06-14 11:13:07
泽连斯基拒绝普京

泽连斯基拒绝普京

环球时报新闻
2024-06-14 22:06:50
美国向俄发出严厉警告:即刻撤走你们在南佛罗里达海域的船只!

美国向俄发出严厉警告:即刻撤走你们在南佛罗里达海域的船只!

林林爱天堂
2024-06-14 06:42:03
宝马终于打响“价格战”!媲美奥迪Q5,从近30万降到16万,剑指比亚迪

宝马终于打响“价格战”!媲美奥迪Q5,从近30万降到16万,剑指比亚迪

隔壁说车老王
2024-06-14 15:06:37
求求导演来趟凡间吧,年代剧尽是月薪一千戴38万耳环的“穷人”了

求求导演来趟凡间吧,年代剧尽是月薪一千戴38万耳环的“穷人”了

糊咖娱乐
2024-06-13 18:53:01
如果台湾提出回归条件:社会制度不变,军队保留,大陆会同意吗?

如果台湾提出回归条件:社会制度不变,军队保留,大陆会同意吗?

莫将离
2024-06-13 22:33:08
期限只剩最后2天!菲律宾救兵到了,3艘055舰应对,歼16已挂实弹

期限只剩最后2天!菲律宾救兵到了,3艘055舰应对,歼16已挂实弹

影孖看世界
2024-06-13 20:47:29
2出2进!皇马重建,回归433阵型,贝林厄姆失宠,4.7亿三叉戟亮相

2出2进!皇马重建,回归433阵型,贝林厄姆失宠,4.7亿三叉戟亮相

邮轮摄影师阿嗵
2024-06-14 16:45:25
马苏的魅力,她真的好美!

马苏的魅力,她真的好美!

冷却爱情
2024-05-15 15:37:16
2024-06-14 22:50:44
墨谈科技
墨谈科技
业务数码玩家.无聊的博主
2983文章数 565关注度
往期回顾 全部

科技要闻

马斯克重获信任 豪言特斯拉市值超10个苹果

头条要闻

山东17岁高考生不慎落水 疑被渔网困住溺水身亡

头条要闻

山东17岁高考生不慎落水 疑被渔网困住溺水身亡

体育要闻

我们为什么还爱欧洲杯?

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

“石油美元”协议走向终结 影响几何?

汽车要闻

提供100/240kW双电机版本车型 乐道L60实车曝光

态度原创

本地
数码
时尚
手机
教育

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

数码要闻

LG 推出 G4 系列 OLED 电视新品:65 英寸 23999 元

少女和熟女,都被这件单品“硬控”了!

手机要闻

4999元起!赵明:荣耀Magic V Flip定价行业前所未有 一定会加速折叠屏普及

教育要闻

小学生勇敢吐槽学校饭菜质量遭教育 官方介入调查引热议

无障碍浏览 进入关怀版