AIP-124 资源关联

devtools/2025/1/22 13:38:45/
编号124
原文链接AIP-124: Resource association
状态批准
创建日期2020-03-20
更新日期2020-03-20

有时无法用常规的树结构清晰表达API资源的层次结构。例如,一个资源可能与两个另外的资源类型之间存在多对一关系。或者一个资源可能与另一个资源类型存在多对多关系。

指南

资源 必须 至多有一个规范上级,并且 List 请求 不得 要求使用两个不同的“上级”才能工作。

数个多对一关联

如果资源与多个资源类型存在多对一关系, 必须 从中选择至多一个作为规范上级。资源 可以 通过其他域关联另外的资源。

message Book {// The resource name pattern for Book indicates that Publisher is the// canonical parent.option (google.api.resource) = {type: "library.googleapis.com/Book"pattern: "publishers/{publisher}/books/{book}"};// The resource name for the book.string name = 1 [(google.api.field_behavior) = IDENTIFIER];// The resource name for the book's author.string author = 2 [(google.api.resource_reference) = {type: "library.googleapis.com/Author"}];
}

在以这种方式列出具有多重关联的资源时,RPC 必须 按照AIP-132要求,将 string parent 域作为必需域,并且 不得 添加其他的必需参数。RPC 应当 按照AIP-160要求,包含 string filter 域,允许用户按其他资源关联进行过滤。

注意: 资源引用域 必须 与被引用资源的 name 域具有相同的资源名字格式。

多对多关联

相比数据库领域,多对多关联在API中较为少见,部分原因是它们难以在网络接口层面建模和表现。

API 可以 包含多对多关系, 应当 使用包含资源名字列表的重复域,遵守AIP-144中描述的重复域原则。

message Book {option (google.api.resource) = {type: "library.googleapis.com/Book"pattern: "publishers/{publisher}/books/{book}"};string name = 1 [(google.api.field_behavior) = IDENTIFIER];// The resource names for the book's authors.repeated string authors = 2 [(google.api.resource_reference) = {type: "library.googleapis.com/Author"}];
}

注意: 有关重复域的更多信息,包括如何处理常见问题(如原子变更),请参考AIP-144。

如果重复域的使用受到限制,或者需要为关联提供更多元数据,API 可以 使用子资源为多对多关系建模,子资源可以具有两个一对多关联。

message BookAuthor {// The resource pattern for BookAuthor indicates that Book is the// canonical parent.option (google.api.resource) = {type: "library.googleapis.com/BookAuthor"pattern: "publishers/{publisher}/books/{book}/authors/{book_author}"};// The resource name for the book-author association.string name = 1 [(google.api.field_behavior) = IDENTIFIER];// The resource name for the author.string author = 2 [(google.api.resource_reference) = {type: "library.googleapis.com/Author"}];// Other fields...
}

注意: 只有在需要为关系提供额外的元数据,或者重复域的使用受到限制的情况下,才建议使用子资源为资源间关联建模。

修订记录

  • 2021-04-07 :明确资源引用域使用与被引用资源的 name 域相同的资源名字格式。

http://www.ppmy.cn/devtools/152611.html

相关文章

k8s namespace绑定节点

k8s namespace绑定节点 1. apiserver 启用准入控制 PodNodeSelector2. namespace 添加注解 scheduler.alpha.kubernetes.io/node-selector3. label node 1. apiserver 启用准入控制 PodNodeSelector vim /etc/kubernetes/manifests/kube-apiserver.yaml spec:containers:- co…

Next.js 实战 (十):中间件的魅力,打造更快更安全的应用

什么是中间件? 在 Next.js 中,中间件(Middleware)是一种用于处理每个传入请求的功能。它允许你在请求到达页面之前对其进行修改或响应。 通过中间件,你可以实现诸如日志记录、身份验证、重定向、CORS配置、压缩等任务…

使用Docker构建Node.js应用的详细指南

引言 Docker平台允许开发者将应用程序打包并运行为容器。容器是一个在共享操作系统上运行的隔离进程,提供了一种比虚拟机更轻量级的替代方案。尽管容器并不是新事物,但它们提供的好处——包括进程隔离和环境标准化——随着越来越多的开发者使用分布式应…

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

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

C#语言的函数实现

C#语言的函数实现详解 C#是一种功能强大的编程语言,以其易于学习和强大的功能而备受欢迎。在C#中,函数(或称为方法)是构建程序的基本单位,它们可以封装特定的功能和逻辑。本文将详细讲解C#语言中函数的概念、定义、调…

ScratchLLMStepByStep:训练自己的Tokenizer

1. 引言 分词器是每个大语言模型必不可少的组件,但每个大语言模型的分词器几乎都不相同。如果要训练自己的分词器,可以使用huggingface的tokenizers框架,tokenizers包含以下主要组件: Tokenizer: 分词器的核心组件,定义了分词的整个流程,包括标准化、预分词、模型分词、…

C语言小任务——1000以内含有9的数字

步骤 第一步:分类 含有九的可能的情况: 个位有9,十位有9,百位有9,而根据组合数,我们可以得出,一共有7种情况,分别是 9##,#9#,##9, 99#,9#9,#…

Web3 游戏周报(1.13 - 1.19)

回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【1.13–1.19】Web3 游戏行业动态 索尼区块解决方案实验室 (Sony BSL) 宣布其以太坊 L2 区块链 Soneium 主网上线。Hyve Labs 融资 275 万美元,推动 Web3 游戏基础设…