引言
Postman Flows 是一个使用 GUI 进行无代码 API 调用流程创建的服务。这篇文章我尝试使用 Flows 来构建将 Momento Topic 中的数据保存到 TiDB 的保存 API,因此想分享一些使用过程中的技巧等。
实现内容
将从 Momento Topics 配发的 JSON 数据保存到 TiDB 中。通过 Momento 使用 webhook 在数据发布时调用 API。保存到 TiDB 的过程是调用 TiDB 端提供的 API。简而言之,这类似于通过 Momento Topics 事件触发的 Lambda + API Gateway,但实际操作只是将接收到的 JSON 从左到右流转,因为入口和出口都是 REST API,所以使用 Postman 进行集中管理和测试会比较方便。
准备 - 将发送源 API 导入为 Postman 的集合
导入发送目标的 API 定义
如果将发送目标的 API 导入到 Postman 中,您可以利用 Postman 的变量定义,实现更灵活的处理(后续会详细介绍)。在这里,我们将读取 TiDB 的 API 定义。(关于 TiDB 端 API 的创建在此不作详述)
这个定义的形式是这样的,可以通过 OpenAPI 格式的 JSON 文件获取。
通过导入这个定义,您可以将其作为集合导入到自己的工作区中。
将发送目标 API 的各种参数变量化
将 API 调用时设置的请求参数、请求体和认证信息等设置为变量。本次调用的 API 没有请求参数,仅有请求体。认证信息使用摘要认证。
首先设置认证信息。认证信息在集合的顶层进行设置。在这里,我们使用 {{PUBLIC_KEY}} 和 {{PRIVATE_KEY}} 进行设置。在 Postman 中,变量的格式为 {{变量名}}。这些变量可以在 Flows 中以及通过多种方法进行设置。
对请求体使用变量进行定义。本次由于发送源和 JSON 的格式一致,因此决定直接使用发送源的 JSON,将其全部设置为变量。在具体的 API 的 body 标签下,选择 raw 并输入 {{rate_json}}。
完成以上步骤后,请保存。
设置环境变量
接下来,将之前定义的三个变量 {{PUBLIC_KEY}}、{{PRIVATE_KEY}} 和 {{rate_json}} 设置为环境变量。创建用于 API 测试的 TEST 环境和用于生产的 PROD 环境。在 TEST 环境中,将 JSON 字符串设置为 {{rate_json}},而在 PROD 环境中,由于直接使用调用源的 body,这部分就不需要设置了。
创建完成后,请务必保存。
创建好环境变量后,选择相应的环境并运行 API 测试。在 API 界面的右上角有一个环境选择下拉菜单。在这里选择所需的环境。
最后只需执行测试即可。请检查 header 和 body 是否正确设置,并在控制台中查看结果。可以通过环境选择下拉菜单旁边的 Environment Quick Look 来确认环境变量是否正确设置。
创建 Flows
设置 API 调用
在 Flows 中进行新建操作,在 Start 后立即添加 API 调用。在 API 调用的下拉菜单中,可以选择之前创建的 rate_jpn 集合。系统会自动识别 body 的变量定义,并以变量形式显示。在这时,可以选择环境,因此选择 PROD 环境。
JSON 转换
调用源 Momento 传递的 body 的 JSON 定义如下所示。您需要从中提取 text
的 JSON,并将其设置为 rate_json
。
{"cache": "momento-exchange","topic": "rate","event_timestamp": 1703245656262,"publish_timestamp": 1703245656262,"topic_sequence_number": 418,"token_id": "","text": "{\"best_bid\":6594882,\"best_ask\":6598048,\"orig_timestamp\":\"2023-12-22T11:47:36.1833839Z\",\"timestamp\":\"2023-12-22T11:47:36.250Z\"}"
}
在这里出现了一个小问题。虽然不确定是否故意如此,但 Momento 发送的 JSON 似乎被解释为文本。这可能是因为请求头中没有指定 Content-Type,导致调试时遇到了一些困难。我们需要将以文本形式传递的 body 转换为 JSON。为了实现这一处理,Postman Flows 提供了 Evaluate 块。
在这个块中,可以使用 FQL 这种简易语言编写表达式。在这里,我们将编写一个将输入转换为 JSON 的表达式。
- 拖动
rate_json
左侧的连线,选择 Evaluate 块,并将 Evaluate 块的输入连接到 Start。 - 在 Evaluate 块中设置变量
input
。路径可以为空。这样,整个 body 将被设置到input
变量中。 - 编写 FQL 表达式:
$jsonParse(input)
。 - 回到
rate_json
侧,将text
设置为rate_json
。
这样就完成了。
测试
为了调试,可以在 Start 和 API 调用的 Error 处设置 Log。传递给 Log 的输入将会输出到 input
中。 整体流程如下图所示。
点击左下角的 Webhook URL 预览按钮,打开 API 测试界面。在 Body 中设置测试用的 JSON 并执行测试。
也可以从 Flows 界面上查看执行结果。
此外,还可以在控制台中查看 API 调用和日志的内容。
发布
如果没有问题,点击 Webhook URL 下方的 Publish 按钮,即可将其部署到该 URL。可以从外部进行访问以进行确认。
总结
使用 Postman Flows 可以在无需编写代码的情况下创建涉及数据转换的 API 调用流程。此外,由于 Postman 平台的集成,您可以利用与 API 测试相同的变量,这大大提高了便利性。虽然这次是一个简单的示例,但通过使用块和 FQL 可以编写更复杂的转换,因此对于 API 集成开发非常有效。