AIP-123 资源类型

embedded/2025/1/22 16:13:34/
编号123
原文链接AIP-123: Resource types
状态批准
创建日期2019-05-12
更新日期2019-05-12

大多数API发布了用户可以创建、获取和操作的 资源 (主要是名词)。API可以合理的、自由的命名资源类型(在AIP要求的范围内),只要保证在API内的唯一性。这意味着不同API可能(需要)使用相同的类型名字。例如Memcache和Redis API都希望使用 Instance 作为类型名字。

然而在将API和资源关联起来时,拥有全局唯一的类型名字变得非常重要。此外,像Kubernetes或GraphQL这样的工具需要与来自多个供应商的API进行交互。

术语

在下面的指南中,我们使用以下术语:

  • 服务名字 :在服务配置中定义的名字。这通常(但不一定)与用户调用服务的主机名(例如 pubsub.googleapis.com )一致 。它相当于Kubernetes中的API组。
  • 类型 :在API中的类型名字,例如protobuf消息的名字。相当于Kubernetes中的对象。

指南

API 必须 为每个资源定义资源类型,并遵从模式 {服务名字}/{类型} 。类型名字 必须 满足:

  • 与所属API类型名字一致。
  • 以大写字母开头。
  • 只包含字母和数字。
  • 使用名词单数形式。
  • 使用PascalCase(UpperCamelCase)风格。

示例

资源类型的例子包括:

  • pubsub.googleapis.com/Topic
  • pubsub.googleapis.com/Subscription
  • spanner.googleapis.com/Database
  • spanner.googleapis.com/Instance
  • networking.istio.io/Instance

资源类型注解

API 应该 使用 google.api.resource 作为每个资源类型的注解:

// A representation of a Pub/Sub topic.
message Topic {option (google.api.resource) = {type: "pubsub.googleapis.com/Topic"pattern: "projects/{project}/topics/{topic}"singular: "topic"plural: "topics"};// Name and other fields...
}
  • 模式 必须 与资源名字相对应。
  • 模式变量(大括号内的段) 必须 使用 snake_case ,且 不得 使用 _id 后缀。
  • 模式变量 必须 符合格式 [a-z][_a-z0-9]*[a-z0-9] 。
  • 模式变量 必须 在模式内只出现一次。(例如 projects/{abc}/topics/{abc} 是无效的,这是要求标识符只出现一次的必然结论。)
  • 使用多模式的资源 必须 保持顺序:新模式 必须 添加到列表末尾,现有模式 不得 删除或重新排列,避免破坏客户端库的向后兼容性。
  • 单数 必须 是类型的camelCase。
    • 模式变量 必须 是资源类型的单数形式,例如表示 Topic 资源标识的模式变量名为 {topic} 。
  • 复数 必须 是单数(camelCase)的复数形式。
    • 模式集合标识符段 必须 与资源的复数形式一致,内嵌集合除外。

模式唯一性

如果资源定义了多个模式,这些模式 必须 相互唯一,唯一性定义为在删除所有资源标识路径段,留下所有分隔符( / )后,字符完全相同。

因此,以下两个模式 不得 在同一资源中使用:

  • user/{user}
  • user/{user_part_1}~{user_part_2}

理由

类型和消息名字对齐

除了简单的模式-资源一致性对齐之外,许多消费者还受益于类型和消息名字一致性。消费者查找起来更简单,客户端库也一样,而且还能带来用户体验一致性,因为面向资源的代码与生成的消息代码的名字是对齐的,生成的参考文档和资源消息文档也是对齐的……

单数和复数

明确定义资源的单数和复数形式,可以让客户端确认在代码和文档中应当使用的正确拼写。

camelCase可以转换为其他常见的资源名字风格,如PascalCase和snake_case。

修订记录

  • 2025-01-09 :对齐资源类型和消息名字。
  • 2024-08-07 :添加多模式顺序兼容性要求。
  • 2023-09-19 :禁止模式变量重复。
  • 2023-05-06 :添加单数和复数要求。
  • 2023-01-28 :明确资源类型名字指南。
  • 2022-10-28 :添加模式变量格式指南。
  • 2020-05-14 :添加模式唯一性要求。
  • 2019-12-05 :添加模式指南。
  • 2019-07-17 :完善示例中的注解。

http://www.ppmy.cn/embedded/156090.html

相关文章

Chromium 132 编译指南 Mac 篇(四)- 获取源代码

1. 引言 在 Chromium 132 的开发之旅中,获取源代码是一个至关重要的里程碑。本文将引导您完成这一关键步骤,为后续的编译和开发工作奠定坚实的基础。无论您是出于学习目的还是计划开发自己的浏览器项目,掌握获取 Chromium 源码的方法都是一项…

LoadBalancer负载均衡服务调用

LoadBalancer LoadBalancer(负载均衡器)是Spring Cloud中的一个关键组件,用于在微服务架构中实现服务请求的负载均衡。它的主要作用是将客户端的请求分发到多个服务实例上,以提高系统的可用性、性能和容错能力。通过LoadBalancer&…

Go项目实战-让自定义Error支持Go的errors.Is判定以及原型模式的应用

经过前面三节高代码强度的学习,相信大家都已经有点累了,本节我们不着急继续“赶路”,休息片刻!我们换个轻松点的话题,聊一聊咱们项目定制化Error--AppError 怎么支持Go语言的 errors.Is 判定,以及项目预定义…

c# PDF文件合并工具

界面 主要用于发票PDF文件的合并。经常出差要报销的很有用。 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System…

ucharts 使用

1.使用 ucharts 在微信小程序中 层级过高 导致布局错乱 添加&#xff1a;canvas2d true 发布到线上即可 开启后本地看到的话会混乱 但线上没问题 我看百度上搜的 说再加一个canvasId"myCanvasId" 要随便写一个 id <qiun-data-chartstype"ring":opts&…

【Nacos】健康检查机制(附实操案例)

目录 Nacos的两种健康检查机制服务实例类型注意事项实操演示 Nacos的两种健康检查机制 Nacos作为一个服务注册中心&#xff0c;需要感知服务的状态&#xff0c;才能为服务调用方提供良好的服务&#xff0c;而它自身提供了两种健康检查机制&#xff1a; 客户端主动上报机制&am…

【Postgres_Python】使用python脚本批量创建和导入多个PG数据库

之前批量创建和导入数据库分为2个python脚本进行&#xff0c;现整合优化代码合并为一个python脚本&#xff0c;可同步实现数据库的创建和数据导入。之前的文章链接&#xff1a; 【Postgres_Python】使用python脚本批量创建PG数据库 【Postgres_Python】使用python脚本将多个.S…

【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件

心血来潮&#xff0c;看到电视机顶盒满天飞的广告&#xff0c;想改造一下家里的电视盒子&#xff0c;学一下网上的人刷机&#xff0c;但是一切都不知道怎么开始&#xff0c;虽然折腾了一天&#xff0c;以失败告终&#xff0c;还是做点刷机笔记。 0.我的机器 年少不会甄别&…