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定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
