在当今快节奏的世界中,各种服务和系统之间的无缝集成变得越来越重要。
将这些服务整合在一起时,安全性也同样重要。因此,有意义地设计应用程序至关重要,这样可以最大程度地减少不同系统之间的摩擦。
本文重点讨论客户端和其他后端服务之间的通信 - 无论是无服务器功能还是第三方 API。
无论您是开发人员、架构师还是技术爱好者,本教程都将为您提供建立强大且可扩展的 API 网关的知识和技能,从而简化客户端和后端服务之间的通信。
基础知识的简要回顾****
在我们深入研究并了解 AWS HTTP API 简化 API 集成流程的潜力之前,让我们快速回顾一下基本术语。
很多人可能了解什么是 API 和代理网关。也就是说,当我们深入研究这些概念并试图理解本质细节和差异时,事情可能会变得有点令人生畏。
API(应用程序编程接口)是一种抽象,允许两个程序相互通信。API 可以是 API 服务提供商以包或端点的形式公开的方法,通过该端点可以传输信息(REST API)。
代理网关是将传入请求转发到目标 URI 的网关,而常规网关在客户端和服务器之间来回发送信息。
代理网关也是屏蔽目标 URI 和 API 密钥的好方法,否则如果直接从前端(浏览器)进行网络调用,这些目标 URI 和 API 密钥就会暴露。
HTTP API 与 REST API—— 有什么区别?****
从技术上讲,不存在“HTTP API”——这是 AWS 特有的。
在 AWS 上创建 API 网关时,您可以创建 HTTP API 或 REST API。两者之间的区别在于后者在设计 API 时提供了更大的灵活性,例如每个客户端的节流、请求验证、私有端点等。
为什么选择 HTTP API 而不是 REST API ?****
如上所述,与 HTTP API 相比,REST API 提供了更多的灵活性和细粒度的配置来设置 API。那么您为什么要使用 HTTP API?
其实,这并不总是关于有很多选项可供选择的灵活性——除非要求是具体的,否则这通常会在选择正确的选项集时增加噪音。
另一方面,HTTP API 带有有限的配置选项,这有助于您以最少的决策构建 API。
HTTP API 的另一个优点是,它允许您将 JWT 授权者添加到网关,这是 REST API 中不存在的。
如果您在应用程序中使用第三方身份验证系统,则使用 JWT 授权程序来保护您的 API 端点是有意义的。
最后,HTTP API 比 REST API 更便宜。
看看显着特征,您应该选择两者中的哪一个完全取决于您的要求。但模糊地说,HTTP API 对于小型、非业务关键型应用程序来说是一个不错的选择。
如何创建 HTTP 代理网关并与目标 URI 集成****
是时候动手了。
导航到您的 AWS 控制台并搜索 “ API Gateway” 。
在 AWS 控制台找到 API 网关
单击“创建 API”将向您显示各种可用的 API 类型。单击 HTTP API 上的“构建”。
在 HTTP API 上选择“构建”
输入 API 名称,然后单击“审核并创建”。或者,您可以输入其他必需的配置信息,但暂时忽略它,因为我们将在下面详细介绍配置。
创建安全代理网关分为 3 个部分:
1. 定义路线
2. 添加集成
3. 附加授权者
让我们更详细地讨论每一项。
如何定义路线****
路由是与资源操作或目标 URI 相对应的路径端点。
通过在路由中定义路径变量,可以将动态值发送到路由。路径变量是通过在路径变量周围添加花括号来定义:/getmusic/{track}。
上面的路由中 {track} 是可以用任何值替换的路径变量。
一条路线可以有任意数量的路径变量。但是,重要的是要知道查询参数不能添加到路由定义中。
定义 API 代理网关的路由
还要确保为定义的路线选择适当的方法。为了简单起见,您可以考虑使用“GET”。
如何添加集成****
这可能是创建代理网关中最重要的步骤。
这里具有挑战性的部分是在传入和传出请求之间创建动态值的正确映射。令人惊讶的是,没有任何教程、文档或指南来解决这个问题,所以我希望这会有所帮助。
单击新定义的路由的方法后,您可以在右侧窗格中看到路由详细信息。
您可能会注意到该路线没有附加任何集成。单击“附加集成”,然后单击“创建并附加集成”。
创建并附加集成屏幕
在集成类型中,选择“HTTP URI”,因为我们的目标是创建一个代理网关,将请求转发到目标第三方 API。
从选项中选择“HTTP URI”
输入您的目标 URI 并选择与传入请求相同的方法,以便使用适当的方法转发请求。
注意:在目标 URI 中,您应该仅添加 API 的域,而不是带有查询参数的整个路径,因为这是我们将通过参数映射构建的内容。
例如,假设我们想按曲目名称获取曲目列表。
在这种情况下,您的输入端点可能是:
/getmusic/{track}
根据您使用的第三方 API,目标 URI 可能类似于:
api.musixmatch.com/ws/1.1/trac…
我们的目标是确保为track路径变量发送的值正确替换为传出请求的查询参数中的实际值。
奇怪的是,如果我们将目标 URI 定义为:api.musixmatch.com/ws/1.1/trac…
相反,文本字符串{track}按查询参数值的原样发送,无论您请求什么,都会获取相同的错误结果集。
为了避免这个陷阱,我们不在目标 URI 中定义完整路径。
继续,添加 API 的域部分,这应该api.musixmatch.com考虑上面的示例。
在集成详细信息部分下方,有一个参数映射规则,目前为空。单击“创建”开始添加映射规则。
接下来,将映射类型选择为“所有传入请求”,然后选择“添加新映射”。
为了创建映射规则,您需要了解以下三件事:
· 应该修改什么
· 应该如何修改
· 修改后的值应该是多少
应该修改什么?通常,所有 API 端点都会有一个以域部分为后缀的路径,例如v1/,这在我们的代理网关端点中是多余的。所以我们想从覆盖路径开始。
该值是静态类型化以符合 URI 路径的内容。
以上述API为例,其值应为:
/ws/1.1/track.search
URI 的动态部分是跟踪值,它是一个查询参数。
接下来,我们需要附加一个包含动态值的查询参数。
为此,单击“添加新映射”并选择querystring.<querystring_name>要修改的参数,然后选择“附加”。
在值输入字段中,输入$request.path.track传入{track}请求中的路径变量名称。
单击“创建”,现在您的 API 代理网关应该可以使用了。
您可以通过将查询字符串作为新映射附加到路径来类似地附加其他查询参数。例如,API 密钥通常作为查询参数发送。
此外,还可以在传出请求中发送标头和正文。
如何附加授权人****
尽管在测试 API 网关时附加授权者不是强制性的,但绝对建议在生产中保护它们。
如果您使用的是 Google Authenticator 等第三方身份验证服务或类似服务,HTTP API 网关提供了一种基于 JWT 令牌管理路由授权的简单方法。
从左侧菜单导航到“授权”页面,然后单击“创建并附加授权人”。默认情况下,“授权者类型”选择为 JWT。
键入所需的输入,例如名称、发行者 URL 和受众。值和格式因您碰巧使用的身份验证服务而异。例如,Google 身份验证的颁发者 URL 是securetoken.google.com/。
总结****
这篇文章的关键在于强调使用参数映射来构建路径,而不是直接在路由中定义它并期待奇迹发生。
我注意到的一个缺点是,当外出请求中定义了多个路径变量时,参数映射不起作用。因此,确保传出请求最多具有一个路径参数非常重要。
HTTP API 网关是一种使用最少配置设置代理/非代理网关的快速简便的方法。
就是这样,同学们!我希望这能帮助您获得一些有关创建 HTTP API 网关和使用参数映射构建路径的知识。与可能有兴趣阅读本文的朋友和熟人分享。