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定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...