【问题标题】:Are the gcloud output formats (specifically, the JSON for each command) documented?是否记录了 gcloud 输出格式(特别是每个命令的 JSON)?
【发布时间】:2021-12-29 13:19:30
【问题描述】:

我正在尝试通过gcloud--format json 格式使用可识别TypeScript 的JavaScript 环境(SLIME) 编写gcloud 工具的脚本。脚本集成运行良好,但对于每个命令,我想使用 TypeScript 功能来约束预期的返回类型,并正在权衡如何以及是否要这样做。现在,我不得不手动检查 JSON 输出,以确定命令发出的属性是什么,值是什么——输出的形状是什么。

  1. 但我希望我不必这样做。 gcloud 工具返回的 JSON 值是否存在现有的 TypeScript 声明文件?
  2. 如果必须,我希望我可以生成 TypeScript 声明文件。 gcloud 工具返回的响应形状是否有任何机器可读的定义?如果这很重要,我对--format json 特别感兴趣,但我怀疑它确实如此。我怀疑所有格式都是从一个规范结构生成的; documentation 建议将这些称为“资源”,但我无法确定资源格式的位置,甚至每个命令返回的资源都可能记录在案。
  3. 如果无法生成 TypeScript 声明文件,是否有任何人类可读的文档可以指定来自 gcloud 工具的 JSON 响应的形状?还是对每个命令进行反复试验是唯一的方法?

【问题讨论】:

  • 我建议您尝试将自己限制在一个问题上,因为有时这可能是关于 SO 问题的一个挑剔的话题,但我可以看到它们都是相关的,所以我会尽力回答将它们放在这些 cmets 中,然后在您觉得该主题已得到充分解释时将其整理为答案。 1)不是在 GCP 的一端,至少不是公开的,据我所知。 2)Resource 是一个通用术语,如果您在 GCP 文档中查找它,它可以专门指文件夹和 iam-policies;存在 Protobufs,您可能会感兴趣。 3) 是与否,我会在下一条评论中解释
  • 3) 我不确定是否可以生成声明文件,但我相信我们有来自 gcloud 工具的 JSON 响应的人类可读版本,因为响应是相同的与API中的那些一样。这意味着它存在,但您必须查看您可能想要做出的每个响应的相关 API,这并不理想。根据我的经验,JS SDK 往往是最容易导航的,尽管您的体验可能不同
  • 如果您阅读发行说明,您会发现 CLI 每周都有很多变化。每个版本发布后你打算做什么?添加了新功能,有些是固定的,有时会删除一个功能。 JSON 已记录在案,但您正在查看记录数以千计的 API 方法。你的目标值得称道,但在现实世界中并不实用,除非你有一个团队致力于此。要感受一下,请尝试记录 Compute Engine 插入实例 API,还有数百个同样复杂的 API。
  • @JohnHanley 如果这是真的,我的选项 3 将是不可能的,但这就是我提出选项 2(和/或选项 1)的原因——如果每个版本发布时,可以运行脚本可以重新生成和更新 TypeScript,它既有助于前向开发,也有助于捕捉由重大变化引起的潜在回归。
  • Google 记录了底层 REST API,但 CLI 命令通常是多个 API 调用。这就是为什么我建议您使用一个 Compute Engine API 来了解您的目标的复杂性。如果我要建造一座摩天大楼,我会先学会钉几个钉子。

标签: typescript gcloud


【解决方案1】:

gcloud .... --log-http 将向您展示底层 HTTP 方法。

APIs Explorer 允许您通过任何 API|服务搜索 HTTP 方法。它记录了请求和响应类型。

Google 为每个 API|服务提供的 SDK 包含资源的特定语言实现,因此您无需为受支持的语言重新创建这些。虽然支持 JavaScript,但我不确定 TypeScript 是否特别支持。

与大多数服务相关联的 Discovery 文档和许多服务的最新 gRPC Protobuf 定义应该也提供了一种获取 TypeScript 定义的方法。

如果可以,请使用现有的 SDK。我将寻找从这些中获取 TypeScript 定义的方法。如果 Google 尚未提供这些,那么它是合理的要求。

Google 提供多种类型的客户端库:

  1. 原来的和 Google 范围内的(每个 Google 服务)都有所谓的API Client Libraries。在 Google 对 JavaScript SDK for the API Client Libraries 的复制中,有对 TypeScript types 的引用。
  2. 对于 Google Cloud(仅限),有 Google Cloud Client Libraries。对于 JavaScript(Google 使用 Node.JS),有一个可用的惯用库(与等效 API 客户端库的主要区别)库的 comprehensive list,并且在发布 TypeScript 类型时有一个 issue(我没有读过它)为他们。
  3. 最后(!?)Google 越来越多地发布其服务的底层协议缓冲区定义(请参阅名称有些混乱的 Google APIs 存储库)。 Google 在内部使用 protobufs,并且 protobufs 越来越多地直接或通过 gRPC Transcoding 及其 API 公开。我不确定您将如何获得 TypeScript 类型(直接从原型;或通过转码)。

【讨论】:

  • 谢谢,我已经用过很多这样的东西了,所以我认为--log-http 部分对我来说是关键——我没有想到尝试将 CLI 绑定回来到“普通”的 Google API(我有更多的使用经验)。我试试看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2018-07-08
  • 2011-02-12
  • 2011-02-03
相关资源
最近更新 更多