准备工作
- 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
 - 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
 - 在屏幕左上角,点击开始实验即可开始
 
Proxy the Cloud Translation API
/ 20
Change the API request and response
/ 20
Add API key verification and quota enforcement
/ 20
Add message logging
/ 20
Rewrite a backend error message
/ 20
在实验室挑战赛中,我们会为您提供一个场景和一系列任务。您将使用从课程的各个实验中学到的技能自行确定如何完成这些任务,而不是按照分步说明进行操作。自动评分系统(显示在本页面中)会提供有关您是否已正确完成任务的反馈。
在您参加实验室挑战赛期间,我们不会再教授新的 Google Cloud 概念知识。您需要拓展所学的技能,例如通过更改默认值和查看并研究错误消息来更正您自己所犯的错误。
要想获得满分,您必须在该时间段内成功完成所有任务!
我们建议已完成利用 Apigee X 开发和保护 API 课程中各个实验的学员参加此实验室挑战赛。准备好接受挑战了吗?
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
您是 Cymbal Shops(一家全国性零售商)的云工程师。Cymbal Shop 专注于全球销售,并已将翻译服务确定为帮助拓展全球业务的关键工具。您负责创建第一版的翻译 API。
您应该掌握了完成这些任务所需的技能和知识,所以我们不会提供分步指南。
您需要在项目的 Apigee 组织中创建一个新的 Apigee API 代理及其他资源。请仔细阅读每个任务说明,然后创建所需的功能。
保存对 API 代理的更改时,您可能会遇到 Could not save new revision 错误。如果您使用“保存”下拉菜单按钮 (),然后选择“另存为新修订版本”,应该就能看到一条错误消息,说明哪些内容无效。
Cymbal Shops 已决定使用 Google Cloud 的 Translation API 作为其 API 代理的后端服务。
要求:
apigee-proxy 的服务账号,并为其授予 Logging > Logs Writer 角色。https://translation.googleapis.com/language/translate/v2)。https://www.googleapis.com/auth/cloud-translation。如果脚本返回 ORG IS READY TO USE,您便可以继续执行后续步骤。
Apigee 组织中的 eval 环境可以使用主机名 eval.example.com 进行调用。此 DNS 条目仅在内部网络中可用,因此您必须使用为您创建的虚拟机。
如果系统提示您进行授权,请点击授权。对于 gcloud 命令中提出的每个问题,点击 Enter 或 Return 键来指定默认输入。
成功完成任务 1 后,以下 curl 命令应该能进行文本翻译:
得到的响应应如下所示:
点击检查我的进度以验证是否完成了以下目标:
Cymbal Shops 希望创建一个与 Translation API 提供的接口不同的 API。您需要修改两个 Translation API 调用。
第一个调用是为了检索有效语言的列表。
Cloud Translation API 请求:
Cloud Translation API 响应:
translate-v1 请求:
translate-v1 响应:
API 代理必须将 GET 替换为 POST,移除“data”和“languages”响应字段,并从属性集中获取目标语言代码。访问令牌已由任务 1 中的 Authentication 部分自动添加。
第二个调用是为了将文本翻译成指定语言。
Cloud Translate API 请求:
Cloud Translate API 响应:
translate-v1 请求:
translate-v1 响应:
API 代理必须通过“lang”查询参数获取目标语言,并更改传入文本和翻译后文本的字段名称。您可以选择省略 translate-v1 请求中的“lang”查询参数,在这种情况下,目标语言将通过属性集中的属性获取。
要求:
在 API 代理中,创建一个名为 language.properties 的属性集。该属性集应包含两个属性:值为 es 的“output”和值为 en 的“caller”。“caller”属性将用于在列出语言时指定目标语言(即用于“name”字段的语言)。如果未提供“lang”查询参数,“output”属性将指定要使用的默认目标语言。
在代理端点中,为 POST / 资源创建路径和动词条件流,并将其命名为 translate。
在代理端点中,为 /languages 资源创建路径(无动词)条件流,并将其命名为 getLanguages。(请勿添加动词。您需要把请求的动词从 GET [用于代理的输入] 修改为 POST [后端所需的动词]。如果您在条件中添加了动词,流程中的响应政策将不会执行,因为 request.verb 不再等于 GET。)
创建一个名为 AM-BuildTranslateRequest 的 AssignMessage 政策,以便创建 translate 条件流中要用到的后端请求。
该政策应包含以下内容:
一个带有模板的 AssignVariable,用于创建稍后将在记录消息中使用的变量。名为 text 的变量应使用 jsonPath 消息模板函数从请求中提取 text 字段。
应使用 firstnonnull 消息模板函数来创建名为 language 的变量。如果存在“lang”查询参数,此变量应包含该参数;如果未指定“lang”查询参数,则此变量应包含语言属性集中用于指定目标语言的“output”属性。
应使用 Set 部分来设置后端服务所需的 JSON 载荷。该载荷将使用您创建的两个变量。
[AssignTo] 元素应使用现有的请求消息。
AssignMessage 政策中的 AssignVariable 部分应如下所示:
AM-BuildTranslateResponse 的 AssignMessage 政策,以使用 Translation API 响应为调用方创建响应。该政策应包含以下内容:
包含 jsonPath 模板的 AssignVariable,以创建名为 translated 的变量,以便从 Translation API 响应中提取“translatedText"字段。提示:用于提取此字段的 JSONPath 表达式为 $.data.translations[0].translatedText。
将“createNew”设置为 true。
新的 JSON 载荷将使用“translated”变量。
AssignMessage 政策中的 AssignVariable 部分应如下所示:
AM-BuildLanguagesRequest 的 AssignMessage 政策,以创建 getLanguages 条件流中使用的后端请求。该政策应包含以下内容:
使用 Set 为后端请求设置正确的 HTTP 方法和载荷。
语言属性集中的“caller”属性应该用于后端载荷的“target”字段。
将“createNew”设置为 true。
将后端请求载荷的内容类型设置为 application/json。
AssignMessage 政策中的 AssignVariable 部分应如下所示:
JS-BuildLanguagesResponse 的 JavaScript 政策,为调用者创建响应。JavaScript 代码应使用以下步骤:response.content 变量。response.content 替换为第 3 步中的 JSON。您的 JavaScript 代码应如下所示:
语言列表:
翻译成指定语言(德语):
翻译成默认语言(西班牙语):
点击检查我的进度以验证是否完成了以下目标:
应该只让已获批准的应用访问此 API,因此您需要添加 VerifyAPIKey 政策以及配额政策来限制请求数量。
要求:
创建名称和显示名称均为 translate-product 的 API 产品。此 API 产品应具有公开访问权限,会自动批准访问请求,并且可在 eval 环境中使用。
向 translate-product API 产品添加一项操作。该操作应允许访问 translate-v1 代理,并使用 / 路径,该路径允许访问任何请求,包括 /。允许的方法为 GET 和 POST。添加每 1 分钟 10 个请求的操作配额设置。
创建一位邮箱为 joe@example.com 的开发者。您可以选择使用自己的名字、姓氏和用户名。
创建一个名为 translate-app 的应用,并为其启用 translate-product API 产品。您需要将其与您的 joe@example.com 开发者相关联。
向代理端点 preflow 添加一个名为 VA-VerifyKey 的 VerifyAPIKey 政策。API 密钥应为每个请求所必需,且应使用 Key 标头发送。
向代理端点 preflow 添加名为 Q-EnforceQuota 的配额政策。
该政策应包含以下步骤:
日历。该日历类型需要 StartTime 元素。UseQuotaConfigInAPIProduct 以使用 API 产品的配额,如果 API 产品未指定配额设置,则默认配额为每小时 5 个请求。完成这些更改后,如果 Key 标头中未指定有效的 API 密钥,请求应该会返回错误。
失败(无 API 密钥):
失败(API 密钥无效):
成功(当 KEY 变量设置为有效的 API 密钥时,即 KEY=<从之前设置开发者应用的步骤中获取>):
点击检查我的进度以验证是否完成了以下目标:
为了解翻译服务的使用情况,MessageLogging 政策将记录每条翻译后的消息。
要求:
translate 条件流添加名为 ML-LogTranslation 的 MessageLogging 政策。该政策必须在 AM-BuildTranslateResponse 步骤之后执行。LogName 的值应为:
所记录消息的“contentType”应为 text/plain,消息内容应为:
此消息需要 AM-BuildTranslateRequest 和 AM-BuildTranslateResponse 政策中创建的“language”“text”和“translated”变量。
在 Google Cloud 控制台的日志记录页面中验证记录的消息。使用查询 logName : "translate" 可仅查看已翻译消息的日志。
成功添加 MessageLogging 政策后,使用以下 curl 命令:
该 curl 命令应该会创建包含以下内容的日志消息:
点击检查我的进度以验证是否完成了以下目标:
如果发送到 Translation API 的“target”参数无效,会返回 400 Bad Request 错误消息:
此错误消息会让调用者感到困惑,因此您需要重写该错误消息。
要求:
向 FaultRules 部分添加 FaultRule。应将此 FaultRule 的条件设置为:在 fault.name 为 ErrorResponseCode 时执行。
创建名为 AM-BuildErrorResponse 的 AssignMessage 政策,并将其附加到 FaultRule。使用以下政策配置:
附加好政策后,目标端点的 FaultRules 部分应如下所示:
如下所示的有效请求应该仍能正常运行:
如果语言查询参数无效(如下所示),系统应该会返回重写的错误消息:
点击检查我的进度以验证是否完成了以下目标:
在参加本实验室挑战赛的过程中,您展示了自己对 Apigee X API 开发和安全性的理解。
本自学实验是利用 Apigee X 开发和保护 API 挑战任务的组成部分。完成此技能徽章挑战任务可赢得上面的徽章,以表彰您取得的成就。您可以在简历和社交平台中分享自己的徽章,并使用 #GoogleCloudBadge 让大家知道您取得的这一成就。
此技能徽章挑战任务是 Google Cloud 的 API 开发者学习路线的组成部分。您可以报名参加部署和管理 Apigee X 挑战任务,以继续深入学习。
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
本手册的最后更新时间:2024 年 7 月 10 日
本实验的最后测试时间:2024 年 7 月 10 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
一次一个实验
确认结束所有现有实验并开始此实验