准备工作
- 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
- 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
- 在屏幕左上角,点击开始实验即可开始
Enables the Cloud Run API and creates the App Engine app
/ 10
Deploy the backend service
/ 10
Create a service account for the Apigee API proxy
/ 10
Create the Apigee proxy
/ 10
Enable use of the Google Cloud Geocoding API
/ 20
Create a shared flow to call the Geocoding API
/ 20
Add the ATM's address when retrieving a single ATM
/ 20
Google Cloud 的 Apigee API Platform 可为现有 API 添加新功能,对现有应用进行现代化改造。
在本实验中,您将在 Cloud Run 上部署一个后端服务。该后端服务实现了一个 REST API,用于在 Firestore 数据库中存储和检索银行数据(客户、账号、ATM 和交易)。您需要创建一个 Apigee API 代理,用于代理后端服务。您还将创建一个可从外部服务检索并缓存内容的共享流。然后,您从 API 代理调用该共享流,并使用 JavaScript 代码修改 API 响应。
在本实验中,您将学习如何执行以下任务:
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
您也可以在“实验详细信息”窗格中找到“用户名”。
点击下一步。
复制下面的密码,然后将其粘贴到欢迎对话框中。
您也可以在“实验详细信息”窗格中找到“密码”。
点击下一步。
继续在后续页面中点击以完成相应操作:
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
点击 Google Cloud 控制台顶部的激活 Cloud Shell 。
在弹出的窗口中执行以下操作:
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID
gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
输出:
输出:
gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
在此任务中,您将在 Cloud Run 上部署一个后端服务。
该服务将为 SimpleBank 实施一个 API。此 API 是一个简单的银行系统演示,其中包含客户、账号、交易和 ATM。SimpleBank 服务使用 Node.js 构建,数据存储在 Firestore 中。代码会打包到 Docker 容器中,此容器会被部署到 Cloud Run。
如需克隆包含 SimpleBank 服务代码的代码库,请在 Cloud Shell 中运行以下命令:
创建指向工作目录的软链接:
如需切换到包含 REST 后端的目录,请运行以下命令:
如需更新配置文件中的区域设置,请运行以下命令:
项目初始化脚本 init-project.sh 会在项目内启用 API。部署 Cloud Run 服务需要用到这些 API。
该服务的数据库将使用原生模式 Firestore。一个项目可以托管一个以原生模式或 Datastore 模式运行的 Firestore 数据库。此脚本将创建原生模式 Firestore 数据库。
如需查看 init-project.sh 脚本运行的命令,请输入以下命令:
该脚本可启用 API 并创建原生模式 Firestore 数据库。
如需运行该脚本,请输入以下命令:
点击检查我的进度,验证已完成以下目标:
服务初始化脚本 init-service.sh 会创建一个名为 simplebank-rest 的服务账号。此服务账号用作 Cloud Run 服务的身份。系统为服务账号授予角色 roles/datastore.user,该角色允许服务读取和更新 Firestore 中的数据。
最佳做法是,为所创建的服务各创建一个服务账号,并根据最小权限原则向该账号授予权限。根据此原则,账号应仅拥有执行其特定功能所需的权限。
如需查看 init-service.sh 脚本运行的命令,请输入以下命令:
该脚本会创建服务所用的服务账号,并向该服务账号添加角色。
如需运行该脚本,请输入以下命令:
部署脚本 deploy.sh 使用当前目录中的代码构建 simplebank 服务应用,并使用 simplebank-rest 服务账号将该服务部署到 Cloud Run。每次更新应用代码时,都会运行部署脚本。
该服务部署为需要经过身份验证才能访问,因此,如果没有有效的 OpenID Connect 身份令牌,您将无法调用该服务。
在 Cloud Shell 中,如需查看 deploy.sh 脚本运行的命令,请输入以下命令:
该脚本会构建 simplebank-grpc 服务并将其部署到 Cloud Run。
如需将脚本部署到 Cloud Run,请输入以下命令:
点击检查我的进度,验证已完成以下目标:
如需验证服务是否可运行,请发出调用该服务的 curl 请求:
用于设置 RESTHOST 变量的命令将使用 gcloud 检索 simplebank-rest Cloud Run 服务的主机名。然后,该变量会添加到 .bashrc 文件中,这样一来,如果 Cloud Shell 重启,系统就会重新加载 RESTHOST 变量。
GET /_status 命令只会返回一个 JSON 响应,表明 API 已上线且运行正常。在此调用中,您使用 gcloud auth print-identity-token 为登录到 Cloud Shell 的用户获取了 Open ID Connect 身份令牌。您已登录并拥有 Project Owner 角色,该角色拥有的权限非常广泛。
如需验证服务可以写入 Firestore,可发出一个创建客户的 curl 请求:
POST /customers 命令用于创建客户。lastName、firstName 和 email 均为必需的参数。邮箱必须是唯一的,用作客户的标识符。客户记录会存储在 Firestore 中。
如需验证该服务可以从 Firestore 读取数据,可发出 curl 请求来检索您刚刚创建的客户:
GET /customers/ 命令可从 Firestore 中检索客户记录。
如需将一些额外的示例数据加载到 Firestore 中,请输入以下命令:
此 gcloud 命令将使用 Firestore 导入/导出功能,将客户、账号和 ATM 的数据导入到数据库中。
如需检索 ATM 列表,请运行以下 curl 命令:
如需检索单个 ATM,请运行以下 curl 命令:
该请求将按名称检索 ATM,响应结果将包含 ATM 的纬度和经度,但不包含地址:
在后续任务中,您将使用 Apigee 和 Geocoding API 将地址添加至检索特定 ATM 时返回的响应中。
在此任务中,您将创建一个Apigee API 代理,此代理将作为后端服务的表层。API 代理将使用一个服务账号,以便向 Cloud Run 服务提供 OpenID Connect 身份令牌。
如需创建可供 Apigee API 代理使用的服务账号,请输入以下命令:
gcloud 命令会创建一个名为 apigee-internal-access 的服务账号,您的 Apigee 代理在调用后端服务时将使用该账号。
如需授予允许访问该服务的角色,请输入以下命令:
此 gcloud 命令会向服务账号授予 simplebank-rest Cloud Run 服务的 roles/run.invoker 角色,从而允许该服务账号调用该服务。
如需检索后端服务的网址,请使用以下命令:
请保存此网址,它将在创建 API 代理时用到。
点击检查我的进度,验证已完成以下目标(系统可能要延迟一小段时间才能检测到所授予的角色):
如需打开 Apigee 控制台,请执行以下操作:
Apigee,然后点击搜索结果中的 Apigee API Management。Apigee 控制台会随即打开,着陆页会显示指向常用位置的快捷链接。
Apigee 现在已固定到导航菜单中。
在导航菜单中,依次选择代理开发 > API 代理。
如需使用代理向导创建新代理,请点击 +创建。
您将为后端服务创建反向代理。
对于 Proxy template(代理模板),依次选择 General template > Reverse proxy (Most common)(常规模板 > 反向代理 [最常见])。
指定以下有关代理详情的内容:
| 属性 | 值 |
|---|---|
| 代理名称 | bank-v1 |
| 基本路径 | /bank/v1 |
| 目标(现有 API) | 后端网址 |
目标应为任务中之前检索到的后端网址,该网址应如下所示:
点击下一步。
将 Deploy (optional)(部署 [可选])设置保留默认值,然后点击创建。
在 Cloud Shell 中,粘贴并运行以下一组命令:
此系列命令使用 Apigee API 来判断 Apigee 运行时实例何时完成创建,以及 eval 环境何时完成附加。
等待实例准备就绪。
当屏幕上显示文本 ***ORG IS READY TO USE*** 时,表示实例已准备就绪。Apigee 组织 (org) 可能在您开始实验前就已经创建好了,因此您不一定需要等待实例创建完成。
如果您正在等待组织准备就绪,可以了解有关 Apigee 的详细信息、探索 Apigee X 架构,或了解 API 和 API 代理。
在导航菜单中,依次选择代理开发 > API 代理,然后点击 bank-v1。
点击部署。
对于环境,选择 eval。
对于服务账号,指定服务账号的邮箱:
点击部署,然后点击确认。
等待 eval 部署状态显示代理已部署。
Apigee 组织中的 eval 环境可以使用主机名 eval.example.com 进行调用。此主机名的 DNS 条目已在您的项目中创建,并且会解析为 Apigee 运行时实例的 IP 地址。此 DNS 条目是在专用区域中创建的,这意味着它仅在内部网络中可见。
Cloud Shell 不在内部网络中,因此 Cloud Shell 命令无法解析此 DNS 条目。项目中的虚拟机 (VM) 可以访问专用区域 DNS。系统自动创建了名为 apigeex-test-vm 的虚拟机。您可以使用此机器调用 API 代理。
在 Cloud Shell 中,打开与测试虚拟机的 SSH 连接:
第一个 gcloud 命令用于检索测试虚拟机的可用区,第二个命令用于打开与虚拟机的 SSH 连接。
如果系统提示您进行授权,请点击授权。
对于 Cloud Shell 中提出的每个问题,点击 Enter 键或 Return 键来指定默认输入。
您的登录身份为项目所有者,因此允许通过 SSH 连接到此机器。
您的 Cloud Shell 会话现在正在虚拟机内运行。
在 eval 环境中调用已部署的 bank-v1 API 代理:
-k 选项会告知 curl 跳过 TLS 证书的验证。在此实验中,Apigee 运行时使用的是自签名证书,而不是由受信任的证书授权机构 (CA) 创建的证书。
-k 选项来绕过证书验证。
系统会返回“403 Forbidden”状态代码,并显示一条错误消息,指出您的客户端无获取相应网址的权限。发送至后端服务的请求已被拒绝,因为客户端未在请求中提供必需的令牌。API 代理正在以正确的身份运行,但您仍需要强制将 OpenId Connect 身份令牌随请求一起发送。
返回 bank-v1 代理,然后点击开发标签页。
在代理的左侧菜单中,点击目标端点 > 默认部分中的 PreFlow。
找到以下代码(您的网址将有所不同):
前往 HTTPTargetConnection 部分,在网址下方添加如下所示的“身份验证”部分:
将 AUDIENCE 替换为“HTTPTargetConnection”部分中的已有网址值。现在,您的代码应如下所示,不同的是网址部分和 Audience 元素中将填入您自己的具体网址:
点击保存,然后点击另存为新修订版本。
点击部署。
对于环境,使用 eval。
对于服务账号,指定服务账号的邮箱:
点击部署,然后点击确认。
点击概览标签页,然后等待 eval 部署状态显示为新修订版本已部署。
点击检查我的进度,验证已完成以下目标:
如果您的 SSH 登录已超时,请在 Cloud Shell 中运行以下命令以重新建立连接:
在虚拟机内重新运行状态命令:
您现在应该会看到一个成功的 (200) 响应,类似于以下示例:
此响应表示 API 代理正在成功调用后端服务。
输入命令 exit 以退出 SSH 会话并返回到 Cloud Shell。
在此任务中,您将启用 Geocoding API,该 API 将在您的 API 代理中使用,从而实现在 SimpleBank 服务检索 ATM 时向响应添加地址信息。
在 Cloud Shell 中,运行以下命令来启用 Geocoding API:
接下来,您将创建一个可以访问 Geocoding API 的 API 密钥。
如需创建 API 密钥,请运行以下命令:
gcloud 命令会创建能够向 Geocoding API 发送请求的 API 密钥。通过提供 --format 参数,您可以选择响应中的 keyString 字段,并将其存储在 API_KEY shell 变量中。然后,API_KEY 变量会存储在 Cloud Shell 的 .bashrc 文件中。
点击检查我的进度,验证已完成以下目标:
如需检索特定纬度和经度的地理编码信息,请运行以下 curl 命令:
此命令会调用 Geocoding API,并提供 API 密钥和所需的纬度和经度。响应将包含一个结果数组,每个结果都包含一个格式化的地址。在您的 API 代理中,您将使用第一个结果的格式化地址,以便在检索单个 ATM 的详细信息时向 API 响应添加地址。
在此任务中,您将创建可调用 Google Geocoding API 的共享流。借助共享流,您可以将政策和资源组合成一个流,供多个 API 代理或其他共享流使用。
共享流将使用以下模式:
我们数据库中的 ATM 数量有限,且 ATM 的纬度和经度不会发生变化。为避免过度调用 Geocoding API,系统会缓存检索到的地址,并使用纬度和经度作为缓存键。如果缓存中未含有指定纬度和经度的地址,系统将调用 Geocoding API,并将返回的地址存储在缓存中。
get-address-for-location,然后点击创建。如果地址之前已缓存,LookupCache 政策将检索该地址。
在共享流的左侧菜单中,点击共享流部分中的默认。
在 sharedflows/default.xml 窗格中,点击 Add policy step(添加政策步骤)()。
选择创建新政策。
对于 Select policy(选择政策),依次选择流量管理 > Lookup Cache(查询缓存)。
在“详细信息”部分,指定以下内容:
| 属性 | 值 |
|---|---|
| 名称 | LC-LookupAddress |
| 显示名称 | LC-LookupAddress |
点击添加,然后点击 LC-LookupAddress。
政策已添加到流中,并且政策的配置 XML 会显示在流下方的窗格中。
验证窗格中是否包含 LookupCache 配置,然后将 LookupCache 配置替换为:
该政策会在 AddressesCache 中查找与指定纬度和经度匹配的条目,如果找到,则将该值分配给变量 address(地址)。
Service Callout 政策将调用 Google Geocoding API。
在共享流的左侧菜单中,点击共享流部分中的默认。
在 sharedflows/default.xml 窗格中,点击 Add policy step(添加政策步骤)()。
选择创建新政策。
对于 Select policy(选择政策),依次选择扩展程序 > Service Callout(服务调用)。
在“详细信息”部分,指定以下内容:
| 属性 | 值 |
|---|---|
| 名称 | SC-GoogleGeocode |
| 显示名称 | SC-GoogleGeocode |
保持 HTTP 目标字段不变,点击添加,然后点击 SC-GoogleGeocode。
验证窗格中是否包含 ServiceCallout 配置,然后将 ServiceCallout 配置替换为:
此政策使用 geocoding.latitude、geocoding.longitude 和 geocoding.apikey 变量调用 Geocoding API。API 调用响应存储在 calloutResponse 变量中。
ExtractVariables 政策将从 Google Geocoding API 响应中提取格式化地址。
在共享流的左侧菜单中,点击共享流部分中的默认。
在 sharedflows/default.xml 窗格中,点击 Add policy step(添加政策步骤)()。
选择创建新政策。
对于 Select policy(选择政策),依次选择中介 > Extract Variables(提取变量)。
在“详细信息”部分,指定以下内容:
| 属性 | 值 |
|---|---|
| 名称 | EV-ExtractAddress |
| 显示名称 | EV-ExtractAddress |
点击添加,然后点击 EV-ExtractAddress。
验证窗格中是否包含 ExtractVariables 配置,然后将 ExtractVariables 配置替换为:
此政策使用 JSONPath 从 calloutResponse 消息 JSON 载荷的第一个结果中提取 formatted_address。该地址存储在 geocoding.address 变量中。
PopulateCache 政策会将地址存储到缓存中。
在共享流的左侧菜单中,点击共享流部分中的默认。
在 sharedflows/default.xml 窗格中,点击 Add policy step(添加政策步骤)()。
选择创建新政策。
对于 Select policy(选择政策),依次选择流量管理 > PopulateCache。
在“详细信息”部分,指定以下内容:
| 属性 | 值 |
|---|---|
| 名称 | PC-StoreAddress |
| 显示名称 | PC-StoreAddress |
点击添加,然后点击 PC-StoreAddress。
验证窗格中是否包含 PopulateCache 配置,然后将 PopulateCache 配置替换为:
该政策使用与 LookupCache 政策相同的纬度和经度键片段,以相同的顺序将 address 变量中的值存储到 AddressesCache 中。ExpirySettings/TimeoutInSec 设置规定了存储的数据将缓存 3600 秒(即 1 小时)。
如果在缓存中找到了特定纬度和经度的地址(缓存命中),则无需使用并应跳过 ServiceCallout、ExtractVariables 和 PopulateCache 政策。
在共享流的左侧菜单中,点击共享流部分中的默认。
“代码”窗格包含默认流,其中列出了已附加的四项政策:
每个“步骤”都会指定已附加的政策。“名称”用于指定所附加政策的名称。您还可以添加“条件”元素,以指定一个布尔值条件,用于确定是否应执行相应政策。
回顾一下任务开始时的共享流模式。当地址查找成功时,无需调用服务或将数据存储回缓存中。在这种情况下,应跳过第二步到第四步政策。
LookupCache 政策会设置一个变量,用于表明是否在缓存中找到了相应项。如果变量 lookupcache.{policyName}.cachehit 为 false,则表示未找到相应项。第二步到第四步的政策应仅在未实现缓存命中时执行。
对于第二步到第四步中的每一步,请在“步骤”元素中添加以下条件:
添加所有条件后,共享流应如下所示:
点击保存。
点击部署。
对于环境,使用 eval。
将“服务账号”留空,然后依次点击部署和确认。
共享流使用 API 密钥调用 Geocoding API,因此不需要服务账号。
如需测试共享流,只能通过从 API 代理调用该共享流。
点击检查我的进度,验证已完成以下目标:
在此任务中,您需要向 API 代理添加 FlowCallout 政策,以调用刚刚创建的共享流。在您检索特定 ATM 时,API 代理必须从 Cloud Run 服务响应中提取纬度和经度,并调用共享流来检索相应地址。然后,JavaScript 政策会将地址添加到 API 响应中。
属性集可用于存储不过期的数据,这些数据可从 API 代理中轻松访问。属性集值将包含 API 密钥。
在左侧导航菜单中,依次选择代理开发 > API 代理。
点击 bank-v1,然后选择开发标签页。
在代理的左侧菜单中,点击资源部分中的添加资源 ()。
在资源类型下拉菜单中,选择Property Set(属性集)。
对于资源名称,指定 geocoding.properties,然后点击添加。
在 geocoding.properties 窗格中,添加以下属性:
将 <APIKEY> 替换为您在任务 3 中创建的 API_KEY。
您可以在 Cloud Shell 中使用以下命令检索 API_KEY:
您的 geocoding.properties 文件应如下所示:
在代理的左侧菜单中,点击 Proxy endpoints(代理端点)部分中的默认。
在 proxy-endpoints/default.xml 窗格中,点击 Proxy endpoint: default(代理端点:默认)旁边的 Add conditional flow(添加条件流)()。
在“Add conditional flow”(添加条件流)对话框中,指定以下值:
| 属性 | 值 |
|---|---|
| 流名称 | GetATM |
| 描述 | 检索单个 ATM |
| 条件类型 | 选择“路径”和“动词” |
| 路径 | /atms/{name} |
| 动词 | 选择 GET(获取) |
将“目标网址”留空。
点击添加。
API 代理由多个流组成。每个流都提供了一个位置,用于以步骤的形式附加政策。下方显示了 API 代理的图表:
只有在条件为 true 时,系统才会运行条件流配置。对于此条件流,proxy.pathsuffix 变量必须匹配 /atms/{name} 格式,并且 request.verb 变量必须为 GET(获取)。
您要将一些政策附加到 GetATM 条件流,以便这些政策仅执行 GET /atms/{name} 请求。政策必须在调用后端服务后执行,因此必须附加到“Proxy Endpoint Response”(代理端点响应)条件流中。
在 Proxy endpoint: default(代理端点:默认)流的响应部分中,点击 GetATM 右侧的 Add Policy Step(添加政策步骤)()。
选择创建新政策。
对于 Select policy(选择政策),依次选择中介 > Extract Variables(提取变量)。
在“详细信息”部分,指定以下内容:
| 属性 | 值 |
|---|---|
| 名称 | EV-ExtractLatLng |
| 显示名称 | EV-ExtractLatLng |
点击添加,然后点击 EV-ExtractLatLng。
验证窗格中是否包含 ExtractVariables 配置,然后将 ExtractVariables 配置替换为:
此政策将从后端服务的 GET /atms/{name} JSON 响应中提取纬度和经度。IgnoreUnresolvedVariables 元素被设为 true,这意味着即使响应中找不到经纬度,处理过程也会继续。
在 Proxy endpoint: default(代理端点:默认)流的响应部分中,点击 GetATM 右侧的 Add Policy Step(添加政策步骤)()。
选择创建新政策。
对于 Select policy(选择政策),依次选择扩展 > FlowCallout。
在“详细信息”部分,指定以下内容:
| 属性 | 值 |
|---|---|
| 名称 | FC-GetAddress |
| 显示名称 | FC-GetAddress |
| 共享流 | 选择 get-address-for-location |
| 条件 | latitude != null AND longitude != null |
如果未检索到 ATM 的纬度或经度,则无法确定地址,因此相应政策步骤会被跳过。
点击添加,然后点击 FC-GetAddress。
验证窗格中是否包含 FlowCallout 配置,然后将 FlowCallout 配置替换为:
此政策可将纬度、经度和 apikey 变量设置为共享流参数,并调用该共享流。共享流可设置 geocoding.address 变量。
在 Proxy endpoint: default(代理端点:默认)流的响应部分中,点击 GetATM 右侧的 Add Policy Step(添加政策步骤)()。
选择创建新政策。
对于 Select policy(选择政策),依次选择扩展程序 > JavaScript。
在“详细信息”部分,指定以下内容:
| 属性 | 值 |
|---|---|
| 名称 | JS-AddAddress |
| 显示名称 | JS-AddAddress |
| JavaScript 文件 | 选择“创建新资源” |
在“添加资源”部分,指定以下内容:
| 属性 | 值 |
|---|---|
| 来源 | 选择“创建新文件” |
| 资源名称 | addAddress.js |
点击添加,然后选择 addAddress.js。
对于条件,指定 latitude != null AND longitude != null。
点击添加,然后点击 JS-AddAddress。
在代理的左侧菜单中,点击资源 > jsc 部分中的 addAddress.js。
addAddress.js 代码的代码窗格为空。
添加以下 JavaScript 代码以将地址添加到响应中:
此代码会将 JSON 响应载荷解析为对象,向该对象添加地址字段,将该对象转换回 JSON 字符串,然后将其存储在响应中。
使用 try/catch 代码块是为了防止从 JavaScript 政策中抛出异常。如果未能捕获到异常,则系统会引发故障,导致 API 代理处理中止。
在代理的左侧菜单中,点击 Proxy endpoints > default(代理端点 > 默认)部分中的 GetATM。
“代码”窗格包含“Get ATM”流,其中列出了已附加的三项政策,第二项和第三项政策附带条件:
点击保存,然后点击另存为新修订版本。
点击部署。
对于环境,使用 eval。
对于服务账号,指定服务账号的邮箱:
点击部署,然后点击确认。
点击概览标签页,然后等待 eval 部署状态显示为新修订版本已部署。
点击检查我的进度,验证已完成以下目标:
在 Cloud Shell 中,打开与测试虚拟机的 SSH 连接:
使用以下命令调用 bank-v1 代理并检索所有 ATM:
由于请求未使用 GET /atms/{name} 流,因此响应不包含地址。
检索单个 ATM:
此响应现在包含已在 API 代理中添加的地址:
在本实验中,您在 Cloud Run 上部署了后端服务。您创建了一个可代理后端服务的 Apigee API 代理。您创建了一个共享流,用于从外部服务检索内容并将其缓存。您从 API 代理调用了该共享流,并使用 JavaScript 代码修改了 API 响应。
本手册的最后更新时间:2024 年 7 月 16 日
本实验的最后测试时间:2024 年 7 月 16 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
一次一个实验
确认结束所有现有实验并开始此实验