AIP-123 资源类型

news2025/1/22 9:39:28
编号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.coloradmin.cn/o/2280284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASP.NET Blazor部署方式有哪些?

今天我们来说说Blazor的三种部署方式,如果大家还不了解Blazor,那么我先简单介绍下Blazor Blazor 是一种 .NET 前端 Web 框架,在单个编程模型中同时支持服务器端呈现和客户端交互性: ● 使用 C# 创建丰富的交互式 UI。 ● 共享使用…

渗透测试--攻击常见的Web应用

本文章咱主要讨论,常见Web应用的攻击手法,其中并不完全,因为Web应用是在太多无法囊括全部,但其中的手法思想却值得我们借鉴,所以俺在此做了记录,希望对大家有帮助!主要有以下内容: 1…

Spring Boot自动配置原理:如何实现零配置启动

引言 在现代软件开发中,Spring 框架已经成为 Java 开发领域不可或缺的一部分。而 Spring Boot 的出现,更是为 Spring 应用的开发带来了革命性的变化。Spring Boot 的核心优势之一就是它的“自动配置”能力,它极大地简化了 Spring 应用的配置…

PHP同城配送小程序

🚀 同城极速达——您生活中的极速配送大师 📱 一款专为现代都市快节奏生活量身打造的同城配送小程序,同城极速达,集高效、便捷、智能于一身,依托ThinkPHPGatewayWorkerUniapp的强大架构,巧妙融合用户端、骑…

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…

RabbitMQ集群安装rabbitmq_delayed_message_exchange

1、单节点安装rabbitmq安装延迟队列 安装延迟队列rabbitmq_delayed_message_exchange可以参考这个文章&#xff1a; rabbitmq安装延迟队列-CSDN博客 2、集群安装rabbitmq_delayed_message_exchange 在第二个节点 join_cluster 之后&#xff0c;start_app 就会报错了 (CaseC…

蓝桥与力扣刷题(73 矩阵置零)

题目&#xff1a;给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&…

华为E9000刀箱服务器监控指标解读

美信监控易内置了数千种常见设备监测器&#xff0c;能够监测超过20万项指标。这些指标涵盖了从硬件设备到软件系统&#xff0c;从网络性能到安全状态等各个方面。如下基于美信监控易——IT基础监控模块&#xff0c;对华为E9000刀箱服务器部分监控指标进行解读。 一、华为E9000…

【0x04】HCI_Connection_Request事件详解

目录 一、事件概述 二、事件格式及参数 2.1. HCI_Connection_Request 事件格式 2.2. BD_ADDR 2.3. Class_Of_Device 2.4. Link_Type 三、主机响应 3.1. ACL链接类型 3.2. SCO或eSCO链接类型 四、应用场景 4.1. 设备配对场景 4.2. 蓝牙文件传输场景 4.3. 蓝牙物联网…

PIC单片机设置bootloader程序和app程序地址方法

在调试bootloader和app程序的时候通常都需要设置程序的偏移地址&#xff0c;下面就总结一下使用MPLAB X IDE 设置程序地址的方法。 打开bootloader工程 工程上单击鼠标右键&#xff0c;选择Properties,打工工程属性窗口。 此时会打开项目属性对话框 左边类别选择XC8 Line…

10_异步加载场景前打开加载窗口

首先要在资源加载场景时 先加载LoadingWnd 加载窗口 逻辑上是 1.先加载 加载窗口LoadingWnd 2.在加载场景的同时 显示加载进度 3.最后在加载完成时关闭 加载窗口LoadingWnd 4.打开 登录窗口LoginWnd 如果想控制 窗口类Wnd.cs 需要创建Wnd.cs脚本 创建一个文件夹UIWindow用来…

博客之星2024年度-技术总结:技术探险家小板的一年的征程

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 技术探险家的新一年征程 2.0 数据库管理与优化&#xff1a;MySQL 的魔法森林 2.1 穿越基础概念的迷雾 2.2 实践应用&#xff1a;成为森林的主人 2.3 性能调优&…

用于牙科的多任务视频增强

Multi-task Video Enhancement for Dental Interventions 2022 miccai Abstract 微型照相机牢牢地固定在牙科手机上&#xff0c;这样牙医就可以持续地监测保守牙科手术的进展情况。但视频辅助牙科干预中的视频增强减轻了低光、噪音、模糊和相机握手等降低视觉舒适度的问题。…

Linux应用编程(五)USB应用开发-libusb库

一、基础知识 1. USB接口是什么&#xff1f; USB接口&#xff08;Universal Serial Bus&#xff09;是一种通用串行总线&#xff0c;广泛使用的接口标准&#xff0c;主要用于连接计算机与外围设备&#xff08;如键盘、鼠标、打印机、存储设备等&#xff09;之间的数据传输和电…

学习golang语言时遇到的难点语法

作者是java选手&#xff0c;实习需要转go&#xff0c;记录学习go中遇到的一些与java不同的语法。 defer defer特性 1. 关键字 defer 用于注册延迟调用。 2. 这些调用直到 return 前才被执。因此&#xff0c;可以用来做资源清理。 3. 多个defer语句&#xff0c;按先进…

cocosCreator动态调整pageView下面的标记indicator

pageView是我们在开发过程中经常使用到的一个组件&#xff0c;但是之前很少去动态修改过该属性的indicator,一般都是使用的默认的。今天产品要求实现一个动态效果&#xff0c;就是当页面左滑或者右滑时&#xff0c;下面的标记也会有一个左右滑动的效果(不知道怎么描述合适&…

C语言进阶习题【1】指针和数组(4)——指针笔试题4

笔试题7&#xff1a;下面代码输出是是什么&#xff1f; #include <stdio.h> int main() {char *a[] {"work","at","alibaba"};char**pa a;pa;printf("%s\n", *pa);return 0; }分析 代码结果 笔试题8&#xff1a;下面代码输…

服务化架构 IM 系统之应用 MQ

在微服务化系统中&#xff0c;存在三个最核心的组件&#xff0c;分别是 RPC、注册中心和MQ。 在前面的两篇文章&#xff08;见《服务化架构 IM 系统之应用 RPC》和《服务化架构 IM 系统之应用注册中心》&#xff09;中&#xff0c;我们站在应用的视角分析了普适性的 RPC 和 注…

【Rabbitmq】Rabbitmq高级特性-发送者可靠性

Rabbitmq发送者可靠性 发送者重连发送者确认1.开启确认机制2.ReturnCallback3.ConfirmCallback MQ的可靠性数据持久化交换机持久化队列持久化消息持久化 Lazy Queue 总结其他文章 Rabbitmq提供了两种发送来保证发送者的可靠性&#xff0c;第一种叫发送者重连&#xff0c;第二种…

【技术总结类】2024,一场关于海量数据治理以及合理建模的系列写作

目录 1.今年的创作路线 2.先说第一条线 2.1.由日志引出的海量文本数据存储和分析问题 2.2.监控以及监控的可视化 2.3.数据量级再往上走牵扯出了大数据 2.4.由大数据牵扯出的JAVA线程高级内容 3.第二条线&#xff0c;也是2025要继续的主线 1.今年的创作路线 今年的写作内…