所有文章 > 日积月累 > 如何使用 Apigee 管理 GraphQL API
如何使用 Apigee 管理 GraphQL API

如何使用 Apigee 管理 GraphQL API

在过去的二十年中,REST API 已成为企业数据和后端向外部、合作伙伴及内部应用程序开放的轻量级且灵活的标准。Google Cloud 的 Apigee 作为 API 管理领域的领导者,允许用户管理 REST API —— 定义速率限制、强制执行身份验证和授权、阻止试图滥用 API 的客户端,并确保 API 在更新时无缝运行。

GraphQL 正在迅速崛起,成为构建开发人员友好且灵活的 API 的范例。它支持应用程序开发人员从后端数据源准确请求所需的数据。随着 REST 和 GraphQL 作为强大的 API 选项并存,API 提供商面临着构建和管理下一代 API 的挑战。通过此次发布,Apigee 实现了同时支持 REST 和 GraphQL,使开发人员无需在两者之间做出选择 —— 可以在堆栈中同时添加 GraphQL,并利用 REST 中的现有投资。

Apigee 在其丰富的策略套件中添加了新的 GraphQL 策略,允许控制流量、提升性能并加强安全性,无需编写任何代码或修改后端服务。通过将 GraphQL 策略添加到在 Apigee 中创建的代理中,开发人员可以验证 GraphQL 查询和响应是否符合特定架构,然后将此策略链接到标准 Apigee 代理的预流程中,以对后端 API 执行其他验证和管理功能。

Apigee 与 StepZen 合作提供这些 GraphQL 功能。StepZen 是一个企业级 GraphQL 提供商,基于低代码构建块和连接器,旨在加速 API 开发。在本文中,将使用一个可从 GitHub 克隆的项目(包含基于 StepZen 构建的 GraphQL API)来演示该策略的工作原理。

高层架构

高层架构

我们的场景有什么作用?

我们的场景是电子商务个性化。单个 GraphQL 端点连接多个 API 并通过 Apigee 进行代理。设想一个电子商务体验,能够返回用户所在的城市以及以用户当地货币计算的价值 3 美元(USD)的商品成本。只需几个步骤,即可通过单一的 GraphQL 端点查询连接多个 API。GraphQL 端点受到 Apigee GraphQL 策略的保护。

Apigee 如何提供帮助

Apigee 检查查询是否符合架构,确保 API 密钥有效,并收集有关 GraphQL 调用的分析。借助 Apigee 的 API 产品和 GraphQL 支持,能够添加配额,甚至限制对某些 GraphQL 操作的访问。

这种简化的设置针对单一 GraphQL 模式进行验证。此外,通过利用 Apigee 对流的支持,可以为不同用户提供不同版本的架构。能够完全阻止对模式的请求,同时仍允许查询。最后,在开发者门户中发布对 GraphQL 端点的访问权限,使以自助服务方式使用 API 的开发者能够订阅并获取唯一凭据以访问新端点。

StepZen 如何提供帮助

StepZen 对后端执行 GraphQL 调用。具体来说,StepZen:

  • 调用 api.ip-api.com 根据 IP 地址获取用户的城市、国家和币种。
  • 使用第一次调用中的货币信息,依据当前汇率从货币兑换 API api.frankfurter.com 获取指定数量和货币价值的商品成本。

以下是说明该场景的 GraphQL 请求和响应示例:

GraphQL 查询:

{
location(ip: "8.8.8.8") {
city
continent
country
countryCode
priceInCountry(amount: 100, from: "EUR")
}
}

GraphQL 响应:

{
"data": {
"location": {
"city": "Ashburn",
"continent": "North America",
"country": "United States",
"countryCode": "US",
"priceInCountry": 114.44
}
}
}

上述查询在单一请求中检索位置信息和货币信息,调用两个 REST API 生成适当的响应。StepZen 架构使用货币转换 API 将 priceInCountry 字段添加到位置响应中。开发者无需自行组合这些 API,可根据需求选择检索的字段,从而调整响应以满足特定需求。

由于 StepZen 和 Apigee 都支持 API 管理,能够自动化为 StepZen 端点创建 Apigee 代理的过程。创建了一个开源实用工具来完成此任务!若未拥有 StepZen 帐户,实用工具将提供一个帐户。该工具部署 StepZen 架构并自动为其构建 Apigee 代理。代理配置为需要 API 密钥才能调用,并根据 StepZen 架构自动验证 GraphQL 请求。

让我们启动并运行您的环境

确保在 Apigee 中的帐户拥有足够的权限来创建和部署代理、API 产品、开发者、应用程序及属性集。

  1. 克隆仓库:
   git@github.com:apigee/stepzen.git
  1. 切换到刚刚克隆的目录,然后运行以下命令:
   ./apizenSetup -o <your_org> -e <your_env> -t $(gcloud auth print-access-token) -i $(gcloud auth print-identity-token) -z

尽管该脚本支持多种可选参数(详见仓库的自述文件),但默认情况下只需指定:

  • -o <您的 Apigee 组织/项目名称>
  • -e <您的环境名称>
  • -t <gcloud 令牌,需具备部署和创建所需 Apigee 工件的权限>
  • -i <gcloud 生成的身份令牌> StepZen 使用这些参数生成单一但唯一的 StepZen 帐户。
  • -z 为可选项,若提供,脚本将输出 StepZen 凭据,便于后续使用 StepZen 工具。 脚本运行多个步骤并实时输出进度,包括:
  • 调用 StepZen 端点获取帐户详细信息
  • 创建或更新 Apigee PropertySet 以存储 StepZen 凭据
  • 部署已配置为南向目标的 Apigee API 代理(依赖于前述属性集)
  • 使用凭据创建或更新开发者、API 产品和应用程序以保护端点 脚本完成后,将显示示例 curl 命令(见下文)并显示在安装过程中创建的 API 密钥。 若提供 -z 选项,脚本将输出 StepZen 帐户、管理密钥和 API 密钥。务必妥善保存这些信息,确保其安全。可将这些详细信息保存为 YAML 文件(实际输出为 YAML 格式),以便稍后与 StepZen 工具一起使用。

测试端点

脚本完成后,将看到示例 curl 命令,如下所示:

curl -X POST 'https://<apigee_environment_host>/graphql/stepzample?apikey=<APIKEY>' \
-H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' \
--compressed -d @gql-query.json

curl 命令引用名为 gql-query.json 的文件,该文件包含上述示例中的相同 GraphQL 查询。运行此 curl 命令将生成与示例中完全相同的输出。可根据需要更新文件中的查询,或复制并创建自定义查询文件。

将 Google 地图添加到 API

为了获得更多功能,接下来将 Google 地图集成到此 API 中。电子商务应用程序现在能够向用户显示最近的实体店,用户可在其中提取在线订单并决定是否选择送货或提货。

  1. 获取 API 密钥: 需要一个 API 密钥才能从 StepZen 调用 Google Maps API。按照此处的说明获取一个:Google Maps Platform 入门。
  2. 配置示例架构: 存储库中已为您准备了一个示例架构。导航至 StepZen Maps Sample 文件夹,将文件 config.yaml.sample 重命名为 config.yaml
  3. 编辑配置文件: 编辑 config.yaml 文件,将 <apikey> 替换为获取的密钥。
   configurationset:
- configuration:
name: google-maps
key: <apikey>
  1. 运行脚本: 使用新的 StepZen 架构运行脚本。该脚本将找到并重用先前创建的 StepZen 帐户。
   ./apizenSetup -o <your_org> -e <your_env> -t $(gcloud auth print-access-token) -i $(gcloud auth print-identity-token) -S stepzen-maps-example -m maps
  1. 测试新设置: 现在,使用类似之前的 curl 命令测试新设置,指向存储在 stepzen-maps-example 目录中的 GraphQL 查询。更新 curl 命令中的 apikey 和主机名,如下所示:
   curl -X POST 'https://<apigee_environment_host>/graphql/stepzample?apikey=<APIKEY>' \
-H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' \
--compressed -d @stepzen-maps-example-gql-query.json

执行的查询如下:

   query MyQuery {
location(ip: "8.8.8.8") {
findNearby(keyword: "Target") {
name
vicinity
}
city
countryCode
regionName
}
}

查询说明:

对于通过 Google DNS 进行的初始位置查询返回的任何 IP,查询将查找相对于纬度/经度最近的目标位置。随后,将其传递给嵌入的 findNearby,作为从初始查找中解析出的纬度和经度。StepZen 使用 Google Maps API 及在配置架构时提供的密钥执行该操作。

结合查询 api-ip-api.com 的能力,能够增强用户体验,并在单一 GraphQL 查询中获取作为目标商店的最近物理商店位置。(假设用于取货体验,但可根据需求尝试其他商店。)

原文链接:How to manage your GraphQL APIs with Apigee

#你可能也喜欢这些API文章!