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开头,其余部分 应当 是目标资源的复数形式。
  • 请求和应答消息 必须 与接口名字一致,带有 RequestResponse 后缀。
  • 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_sizepage_token 域。更多信息请参考AIP-158。
    • page_size 域的注释 应当 记录最大允许值,以及省略(或设置为0)时的默认值。如果需要,API 可以 声明服务器将选择合理的默认值。默认值 可以 在将来发生改变。
    • 如果用户提供的值大于最大允许值,API 应当 将该值强制设定为最大允许值。
    • 如果用户提供了负值或其他无效值,API 必须 发送 INVALID_ARGUMENT 错误。
  • 必须 包含在所有List请求消息中包含 page_token 域。
  • 请求消息 可以 包含与List方法相关的常见设计模式的域,例如 string filterstring 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.baraddress.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 明确禁止在标准方法中使用任意域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68423.shtml

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

相关文章

Vue.js组件开发-Vue实现上传word模版打印设置自定义样式和布局

要使用 Vue 实现上传 Word 模板、打印并设置自定义样式和布局,可以借助一些工具和库来完成这个任务。 实现步骤 创建 Vue 项目:使用 Vue CLI 创建一个新的 Vue 项目。安装依赖:安装 docx-templates 库来处理 Word 模板,file-sav…

算法随笔_28:最大宽度坡_方法2

上一篇:算法随笔_27:最大宽度坡-CSDN博客 题目描述如下: 给定一个整数数组 nums&#xff0c;坡是元组 (i, j)&#xff0c;其中 i < j 且 nums[i] < nums[j]。这样的坡的宽度为 j - i。 找出 nums 中的坡的最大宽度&#xff0c;如果不存在&#xff0c;返回 0 。 示例 …

C++中函数返回值当引用

文章目录 一、概述二、返回值当引用的基本语法三、返回局部变量的引用四、返回引用的常见用途五、返回右值引用六、总结 一、概述 在 C 中&#xff0c;函数返回值当引用&#xff08;即返回引用&#xff09;是一个常见的编程技巧。它可以让你返回一个函数内部的局部变量或对象的…

10 款《医学数据库和期刊》查阅网站

在毕业设计过程中,需要查阅到关于医学的相关文献和图片作为参考,发现下面10款非常的好用,作为分享。 1. PubMed: PubMed 搜索关键词如“lung cancer CT images”或“lung cancer CT scan”。 Radiopaedia: https://radiopaedia.org/ 这是一个放射学专业网站,有大量肺癌的CT…

OpenCV:形态学梯度

目录 简述 1. 用图像运算和腐蚀实现形态学梯度 1.1 代码示例 1.2 运行结果 2. 形态学梯度接口 2.1 参数解释 2.2 代码示例 2.3 运行结果 3. 形态学梯度与边缘检测 4. 形态学梯度的应用场景 5. 注意事项 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 简述…

Java 大视界 -- Java 大数据在生物信息学中的应用与挑战(67)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

MySQL中InnoDB逻辑存储结构

在MySQL中&#xff0c;InnoDB是最常用的存储引擎之一&#xff0c;它具有高度的事务支持、行级锁、ACID特性以及自动崩溃恢复等特性。InnoDB的逻辑存储结构可以分为多个层次&#xff0c;下面是详细的解析。 1. 表空间 (Tablespace) InnoDB的物理存储结构以表空间为基础。表空间…

字符设备驱动模版-中断

字符设备驱动模版-中断 思维导图在线高清查看&#xff1a;https://www.helloimg.com/i/2025/01/27/679791b5257c0.png 修改设备树 1添加pinctrl节点 1创建对应的节点 在 iomuxc 节点的 imx6ul-evk 子节点下 2添加“fsl,pins”属性 3在“fsl,pins”属性中添加PIN配置信息 …

【SH】Windows禁用Alt+F4关机、重启、注销等功能,只保留关闭应用的功能

文章目录 组策略编辑器参考文档 组策略编辑器 亲测有效&#xff01; 1、按winr&#xff0c;输入gpedit.msc&#xff0c;回车。 2、找到》用户配置》管理模板》“开始”菜单和任务栏。 3、在右侧找到删除并阻止访问“关机”、“重新启动”、“睡眠”和“休眠”命令&#xff0c…

AndroidCompose Navigation导航精通2-过渡动画与路由切换

目录 前言路由切换NavControllerBackStackEntry过渡动画过渡原理缩放动画渐隐动画滑动动画动画过渡实战前言 在当今的移动应用开发中,导航是用户与应用交互的核心环节。随着 Android Compose 的兴起,它为开发者提供了一种全新的、声明式的方式来构建用户界面,同时也带来了更…

分库分表后如何进行join操作

在分库分表后的系统中&#xff0c;进行表之间的 JOIN 操作比在单一数据库表中复杂得多&#xff0c;因为涉及的数据可能位于不同的物理节点或分片中。此时&#xff0c;传统的 SQL JOIN 语句不能直接用于不同分片的数据&#xff0c;以下是几种处理这样的跨分片 JOIN 操作的方法&a…

【深度学习】线性回归的简洁实现

线性回归的简洁实现 在过去的几年里&#xff0c;出于对深度学习强烈的兴趣&#xff0c;许多公司、学者和业余爱好者开发了各种成熟的开源框架。 这些框架可以自动化基于梯度的学习算法中重复性的工作。 目前&#xff0c;我们只会运用&#xff1a; &#xff08;1&#xff09;通…

C++中的显式构造和隐式构造

文章目录 一、概述二、显式构造函数的使用三、隐式构造函数的使用四、显式和隐式的适用场景 一、概述 在 C 中&#xff0c;构造函数可以分为 显式构造 和 隐式构造&#xff0c;它们的区别主要体现在构造函数的调用方式上。 1.显式构造&#xff08;Explicit Constructor&#…

【YOLOv11改进- 主干网络】YOLOv11+MobileNetV3(2019): 更快,更精准;

YOLOV11目标检测-主干网络改进实例与创新改进专栏 目录 YOLOV11目标检测-主干网络改进实例与创新改进专栏 本文介绍 1.完整代码获取 2.MobileNetv3介绍 文章摘要 3. MobileNetv3网络结构图 4. yolov11-MobileNetv3 yaml文件 5.MobileNetv3代码实现 6.MobileNetv3添加方…

A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战

服务容器化构建的环境配置构建前需要解决什么下面我们带着问题分析构建的过程:1. 如何解决jenkins执行环境与shell脚本执行环境不一致问题?2. 构建之前动态修改项目的环境变量3. 在通过容器打包时避免不了会产生比较多的不可用的镜像资源,这些资源要是不及时删除掉时会导致服…

浅谈文献阅读(reference)对留学论文写作的重要性

很多留学生在写作留学论文时&#xff0c;拿到题目后就急于求成立马动笔写作。可是写着写着就会陷入非常迷惘的境地&#xff0c;不知道如何继续。当然这其中有很多原因&#xff0c;但其中最重要的一条&#xff0c;就是在写作英语论文之前&#xff0c;没有进行足够的知识积累&…

es6中关于let的使用以及案例,包括但不限于块级作用域,不允许重复声明,没有变量提升,暂存性死区,不与顶层对象挂钩

ES6 let 关键字完整指南 1. 块级作用域 1.1 let vs var 作用域对比 // var - 函数作用域 function varExample() {var x 1;if (true) {var x 2; // 同一个 xconsole.log(x); // 2}console.log(x); // 2 }// let - 块级作用域 function letExample() {let x 1;if (true…

提升企业内部协作的在线知识库架构与实施策略

内容概要 在当前快速变化的商业环境中&#xff0c;企业对于提升内部协作效率的需求愈显迫切。在线知识库作为信息存储与共享的平台&#xff0c;成为了推动企业数字化转型的重要工具。本文将深入探讨如何有效打造与实施在线知识库&#xff0c;强调架构设计、知识资产分类管理及…

网络工程师 (3)指令系统基础

一、寻址方式 &#xff08;一&#xff09;指令寻址 顺序寻址&#xff1a;通过程序计数器&#xff08;PC&#xff09;加1&#xff0c;自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址&#xff1a;通过转移类指令直接或间接给出下一条指令的地址。跳…

度小满Java开发面试题及参考答案 (上)

String 是基本类型吗?String、StringBuffer、StringBuilder 的区别是什么?拼接字符串有哪些做法? String 不是基本类型,它是 Java 中的一个类,属于引用类型。 下面来看看 String、StringBuffer、StringBuilder 的区别: 类型可变性线程安全性性能适用场景String不可变线程…