AIP-132 标准方法:List
编号 | 132 |
---|---|
原文链接 | AIP-132: Standard methods: List |
状态 | 批准 |
创建日期 | 2019-01-21 |
更新日期 | 2022-06-02 |
在许多API中,通常会向集合URI(例如 /v1/publishers/1/books
)发出GET请求,获取集合中资源的列表。
面向资源设计(AIP-121)提供List方法,遵循这一模式,也。这些接口接受上级集合(以及可能的一些其他参数),返回与输入匹配的应答列表。
指南
API 必须 为资源提供List方法,除非资源是单例。List方法的目的是从有限集合(通常是一个集合,除非操作支持跨集合读取)中返回数据。
List方法使用以下模式:
rpc ListBooks(ListBooksRequest) returns (ListBooksResponse) {option (google.api.http) = {get: "/v1/{parent=publishers/*}/books"};option (google.api.method_signature) = "parent";
}
- 接口名字 必须 以单词List开头,其余部分 应当 是目标资源的复数形式。
- 请求和应答消息 必须 与接口名字一致,带有
Request
和Response
后缀。 - HTTP动词 必须 是
GET
。 - 目标资源集合 应当 映射到URI路径。
- 集合的上级资源 应当 称为
parent
, 应当 是URI路径中唯一的变量。所有剩余参数 应当 映射到URI查询参数。 - 集合标识符(例子中的
books
) 必须 是字面字符串。
- 集合的上级资源 应当 称为
- 必须 省略
google.api.http
注解的body
键。 - 如果目标资源不是顶级资源, 应当 只有一个
google.api.method_signature
注解,值为parent
。如果目标资源是顶级资源, 应当 不适用google.api.method_signature
注解,或者只有一个值为""
的google.api.method_signature
注解。
请求消息
List方法实现了一个常见的请求消息模式:
message ListBooksRequest {// The parent, which owns this collection of books.// Format: publishers/{publisher}string parent = 1 [(google.api.field_behavior) = REQUIRED,(google.api.resource_reference) = {child_type: "library.googleapis.com/Book"}];// The maximum number of books to return. The service may return fewer than// this value.// If unspecified, at most 50 books will be returned.// The maximum value is 1000; values above 1000 will be coerced to 1000.int32 page_size = 2;// A page token, received from a previous `ListBooks` call.// Provide this to retrieve the subsequent page.//// When paginating, all other parameters provided to `ListBooks` must match// the call that provided the page token.string page_token = 3;
}
- 必须 包含一个上级域,除非目标资源是顶级资源。上级域的名字 应当 是
parent
。- 域 应当 注解为必需域。
- 域 必须 标识目标资源的资源类型。
- 必须 在所有List请求消息中设定支持分页的
page_size
和page_token
域。更多信息请参考AIP-158。page_size
域的注释 应当 记录最大允许值,以及省略(或设置为0)时的默认值。如果需要,API 可以 声明服务器将选择合理的默认值。默认值 可以 在将来发生改变。- 如果用户提供的值大于最大允许值,API 应当 将该值强制设定为最大允许值。
- 如果用户提供了负值或其他无效值,API 必须 发送
INVALID_ARGUMENT
错误。
- 必须 包含在所有List请求消息中包含
page_token
域。 - 请求消息 可以 包含与List方法相关的常见设计模式的域,例如
string filter
和string order_by
。 - 请求消息 不得 包含任何其他必需域, 不应 包含其他可选域,本AIP或其他AIP中要求的除外。
注意: 对于任何有权限查询集合的用户,List方法 应当 返回相同结果。Search方法在这方面的要求比较宽松。
应答消息
List方法实现了一个常见的应答消息模式:
message ListBooksResponse {// The books from the specified publisher.repeated Book books = 1;// A token, which can be sent as `page_token` to retrieve the next page.// If this field is omitted, there are no subsequent pages.string next_page_token = 2;
}
- 应答消息 必须 包含一个重复域,对应于目标资源。且 不应 包含任何其他重复域,另外AIP(例如AIP-217)中要求的除外。
- 应答 应当 包括完整资源数据,除非有充分理由(参考AIP-157)。
- 所有列表应答消息 必须 包含支持分页的
next_page_token
域。如果存在后续分页, 必须 设置这个域;如果应答表示最后一页, 不得 设置此域。更多信息请参考AIP-158。 - 消息 可以 包含一个
int32 total_size
(或int64 total_size
)域,表示集合中的资源数量。- 该值 可以 是一个近似值(此时域 应当 明确记录这一点)。
- 如果使用过滤功能,
total_size
域 应当 反映过滤后集合的大小。
排序
List方法 可以 允许客户端设定排序规则;此时请求消息 应当 包含 string order_by
域。
- 域列表值 应当 使用逗号分隔例如:
"foo,bar"
。 - 默认采用升序排列。要使用降序排列,需要添加一个
" desc"
后缀。如"foo desc, bar"
。 - 语法中的冗余空格没有意义。
"foo, bar desc"
、" foo , bar desc "
和"foo,bar desc"
是等价的。 - 子域用
.
字符指定,例如foo.bar
或address.street
。
注意: 只有存在明确需求时,才设置排序规则。总有机会设置排序规则,但删除排序是一种破坏性变更。
过滤
List方法 可以 允许客户端设置过滤规则;此时请求消息 应当 包含 string filter
域。过滤功能在AIP-160详细介绍。
注意: 只有存在明确需求时才设置过滤规则。总有机会设置过滤规则,但删除过滤规则是一种破坏性变更。
标记为已删除的资源
一些API需要“软删除”资源,将它们标记为已删除或待删除(并有选择的在将来清除)。
这样的API 不应 默认在List请求中包含已删除的资源。使用软删除的API 应当 在List请求中包含 bool show_deleted
域,在域设置时,包含已删除的资源。
错误
参考错误,特别是何时使用 PERMISSION_DENIED 和 NOT_FOUND 错误。
进一步阅读
- 关于分页的详细信息,请参考AIP-158。
- 关于列出多个上层集合的资源,请参考AIP-159。
修订记录
- 2023-03-22 修改指南措辞,提及AIP-159。
- 2023-03-17 对齐AIP-122,让
Get
成为 必须 。 - 2022-11-04 将错误指南汇总到AIP-193。
- 2022-06-02 修改关于后缀的描述,消除多余的“-”。
- 2020-09-02 添加关于过滤规则的AIP的链接。
- 2020-08-14 添加关于权限拒绝场景的错误指南。
- 2020-06-08 添加关于返回完整资源的指南。
- 2020-05-19 删除用文档记录排序行为的要求。
- 2020-04-15 添加关于List权限的指南。
- 2019-10-18 添加关于注释的指南。
- 2019-08-01 将示例从“shelves”改为“publishers”,提供更好的资源所有权示例。
- 2019-07-30 添加用文档记录排序行为的指南。
- 2019-05-29 明确禁止在标准方法中使用任意域。
相关文章:
AIP-132 标准方法:List
编号132原文链接AIP-132: Standard methods: List状态批准创建日期2019-01-21更新日期2022-06-02 在许多API中,通常会向集合URI(例如 /v1/publishers/1/books )发出GET请求,获取集合中资源的列表。 面向资源设计(AIP…...

CSAPP学习:前言
前言 本书简称CS:APP。 背景知识 一些基础的C语言知识 如何阅读 Do-做系统 在真正的系统上解决具体的问题,或是编写和运行程序。 章节 2025-1-27 个人认为如下章节将会对学习408中的操作系统与计算机组成原理提供帮助,于是先凭借记忆将其简单…...
【统计的思想】假设检验(二)
假设检验是根据人为设定的显著水平,对被测对象的总体质量特性进行统计推断的方法。 如果我们通过假设检验否定了零假设,只是说明在设定的显著水平下,零假设成立的概率比较小,并不是说零假设就肯定不成立。如果零假设事实上是成立…...
KNN算法学习实践
1.理论学习 原文链接 ShowMeAI知识社区 2.案例实践 假如一套房子打算出租,但不知道市场价格,可以根据房子的规格(面积、房间数量、厕所数量、容纳人数等),在已有数据集中查找相似(K近邻)规格…...

数据可视化的图表
1.折线图反映了一段时间内事物连续的动态变化规律,适用于描述一个变量随另一个变量变化的趋势,通常用于绘制连续数据,适合数据点较多的情况。 2.散点图是以直角坐标系中各点的密集程度和变化趋势来表示两种现象间的相关关系,常用于显示和比较数值。当要在不考虑时间…...

动手学深度学习-卷积神经网络-3填充和步幅
目录 填充 步幅 小结 在上一节的例子(下图) 中,输入的高度和宽度都为3,卷积核的高度和宽度都为2,生成的输出表征的维数为22。 正如我们在 上一节中所概括的那样,假设输入形状为nhnw,卷积核形…...

【JS|第28期】new Event():前端事件处理的利器
日期:2025年1月24日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方…...

Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)
目录 前言1. 基本知识2. Demo3. 实战代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全&am…...

【Spring】Spring启示录
目录 前言 一、示例程序 二、OCP开闭原则 三、依赖倒置原则DIP 四、控制反转IOC 总结 前言 在软件开发的世界里,随着项目的增长和需求的变化,如何保持代码的灵活性、可维护性和扩展性成为了每个开发者必须面对的问题。传统的面向过程或基于类的设计…...

ospf动态路由配置,cost路径调整,ospf认证实验
一、实验拓扑如图: 接口ip配置网络 :10.17.12.* 10.17.13.* ,10.17.23.* 回环接口配置分别为 10.0.1.1 ,10.0.1.2,10.0.1.3对应三台路由器 ar1配置接口ip interface GigabitEthernet0/0/0 ip address 10.17.12.1…...
在Rust应用中访问.ini格式的配置文件
在Rust应用中访问.ini格式的配置文件,你可以使用第三方库,比如 ini 或 config. 下面是一个使用 ini 库的示例,该库允许你读取和解析.ini文件。 使用 ini 库 添加依赖 首先,你需要在你的 Cargo.toml 文件中添加 ini 库的依赖&am…...
批量处理多个模型的预测任务
#!/bin/bash# 检查是否传入必要的参数,若未传入参数则打印用法并退出 if [ "$#" -lt 1 ]; thenecho "用法: $0 <file_path>"echo "示例: $0 /home/aistudio/work/PaddleSeg/city/cityscapes_urls_extracted.txt"exit 1 fi# 读取…...
Java 编程初体验
Java学习资料 Java学习资料 Java学习资料 一、引言 在当今数字化的时代,编程已然成为一项极具价值的技能。而 Java 作为一门广泛应用于企业级开发、移动应用、大数据等众多领域的编程语言,吸引着无数初学者投身其中。当我们初次踏入 Java 编程的世界&…...
element-plus 的table section如何实现单选
如果是单选那么全新的按钮应该隐藏或者不可编辑的状态。但是我没找到改变成不可编辑的方法,只能采取隐藏 <template><!-- 注意要包一层div根元素,否则css样式可能会不生效,原因不详 --><div><el-table ref"proTab…...

【JavaEE进阶】图书管理系统 - 壹
目录 🌲序言 🌴前端代码的引入 🎋约定前后端交互接口 🚩接口定义 🍃后端服务器代码实现 🚩登录接口 🚩图书列表接口 🎄前端代码实现 🚩登录页面 🚩…...
牛客周赛 Round 77 题解
文章目录 A-时间表B-数独数组D-隐匿社交网络E-1or0 A-时间表 签到题 #include <bits/stdc.h> using namespace std;int main() {int a[6] {20250121,20250123,20250126,20250206,20250208,20250211};int n; cin >> n;cout << a[n - 1];return 0; }B-数独数…...

Mybatis配置文件详解
MyBatis通过XML或注解的方式将Java对象与数据库中的记录进行映射,极大地简化了数据访问层的开发。而在MyBatis的核心组成部分中,配置文件扮演着举足轻重的角色。它不仅定义了MyBatis的运行环境,还配置了数据源、事务管理、映射器等关键元素&a…...
《深度揭秘:TPU张量计算架构如何重塑深度学习运算》
在深度学习领域,计算性能始终是推动技术发展的关键因素。从传统CPU到GPU,再到如今大放异彩的TPU(张量处理单元),每一次硬件架构的革新都为深度学习带来了质的飞跃。今天,就让我们深入探讨TPU的张量计算架构…...
Java基础知识总结(二十二)--List接口
List本身是Collection接口的子接口,具备了Collection的所有方法。现在学习List体系特有的共性方法,查阅方法发现List的特有方法都有索引,这是该集合最大的特点。 List:有序(元素存入集合的顺序和取出的顺序一致),元素都…...

[STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器
一、定时器简介 STM32 中的定时器(TIM,Timer)是其最重要的外设之一,广泛用于时间管理、事件计数和控制等应用。 1.1 基本功能 定时功能:TIM定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...