AIP-165 按条件删除

编号165
原文链接https://google.aip.dev/165
状态批准
创建日期2019-12-18
更新日期2019-12-18

有时API需要提供一种机制,按照一些过滤参数删除大量资源,而非提供待删除的各资源名字。

这是一个稀有的场景,用于用户一次性删除数千或更多资源的情况。此时,普通的批量删除模式(AIP-235)笨重低效。

指南

重要 大多数API 应当 仅使用删除(AIP-135)或批量删除(AIP-235)方法删除资源, 不应 实现按条件删除。因为删除通常是不可逆的,这类操作容易让用户意外丢失大量数据。

API 可以 实现 Purge 方法,按过滤字符串删除大量资源。但 应当 仅在批量删除(AIP-235)模式无法实现预期目标时这么做。

rpc PurgeBooks(PurgeBooksRequest) returns (google.longrunning.Operation) {option (google.api.http) = {post: "/v1/{parent=publishers/*}/books:purge"body: "*"};option (google.longrunning.operation_info) = {response_type: "PurgeBooksResponse"metadata_type: "PurgeBooksMetadata"};
}
  • 接口名字 必须 以 Purge 开头,其余部分 应当 是待清除资源的复数形式。
  • 请求消息 必须 与接口名字一致,并带有 Request 后缀。
  • 应答类型 必须 是 google.longrunning.Operation (参考AIP-151),解析成一个名字与接口名字一致的消息,并带有 Response 后缀。
  • HTTP动词 必须 是 POST , body 必须 是 "*" 。
  • URI路径 应当 表示资源集合。
  • parent 字段 应当 包含在URI中。如果API支持跨多个上级资源删除, 应当 接受与AIP-159一致的 - 字符。

请求消息

Purge 方法实现了常见的请求消息模式:

message PurgeBooksRequest {// The publisher to purge books from.// To purge books across publishers, send "publishers/-".string parent = 1 [(google.api.field_behavior) = REQUIRED,(google.api.resource_reference) = {child_type: "library.googleapis.com/Book"}];// A filter matching the books to be purged.string filter = 2 [(google.api.field_behavior) = REQUIRED];// Actually perform the purge.// If `force` is set to false, the method will return a sample of// resource names that would be deleted.bool force = 3;
}
  • 应当 包含单一的 string parent 域,顶级资源除外。
    • 域 应当 被注解为必需域。
    • 域 应当 标识所引用的资源类型。
  • 必须 包含单一的 string filter 域, 必须 遵守和 List 方法(AIP-160)同样的语义。
    • 应当 被注解为必需域。
  • 必须 包含单一的 bool force 域。如果没有设定,API 必须 返回将待删除资源数量和资源样本,而非实际执行删除。

应答消息

Purge 方法实现了常见的应答消息模式:

message PurgeBooksResponse {// The number of books that this request deleted (or, if `force` is false,// the number of books that will be deleted).int32 purge_count = 1;// A sample of the resource names of books that will be deleted.// Only populated if `force` is set to false.repeated string purge_sample = 2 [(google.api.resource_reference) = {type: "library.googleapis.com/Book"}];
}
  • 应当 包含单一的 int32 purge_count 域,返回已删除(或待删除)资源数量。这个值 可以 是类似于AIP-158中 total_size 的近似值(若如此服务 应当 在文档中记录)。
  • 应当 包含 repeated string purge_sample 域。如果 force 设定为 false , 应当 提供待删除资源名字样本。如果 force 设定为 true ,则此域 不应 返回值。
    • 样本数量 应当 足够多,捕获显著错误。一个好的经验法则是100。API 应当 在文档中记录样本大小,并 应当 说明这是数量上限(可能发送较少样本)。
    • 样本 可以 是随机的,也 可以 是确定的(如第一个匹配的资源名字)。API 应当 在文档中记录实现方法。
    • 域 应当 标识所引用的资源类型。

注意 请求 必须 包含 force 域,即使缺少 purge_count 和 purge_sample 域。

修订记录

  • 2022-06-02 更改后缀描述,消除多余的"-"。
  • 2020-10-29 扩展关于HTTP、域行为和资源引用注解的指南。

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

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

相关文章

【Maven教程与实战案例】

文章目录 前言一、Maven是什么?二、Maven的安装与配置1. 安装前置条件2. 下载与配置 Maven3. 验证安装 三、Maven的核心概念1. POM.xml 文件2. 构建生命周期与插件机制 四、实战项目示例1. 项目目录结构2. 编写代码App.javaAppTest.java 3. 构建项目4. 运行项目 前言…

20250310:OpenCV mat对象与base64互转

代码: https://github.com/ReneNyffenegger/cpp-base64 指南:https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp/ 实操:

概率论的基本知识

逆概率还不懂,改天再想想。 联合概率 联合概率(Joint Probability) 是概率论中的一个重要概念,用于描述多个随机变量同时取某些值的概率。联合概率可以帮助我们理解多个变量之间的关系。

pytest数据库测试文章推荐

参考链接: 第一部分:http://alextechrants.blogspot.fi/2013/08/unit-testing-sqlalchemy-apps.html第二部分:http://alextechrants.blogspot.fi/2014/01/unit-testing-sqlalchemy-apps-part-2.html

如何自己做奶茶,从此告别奶茶店

自制大白兔奶茶,奶香与茶香激情碰撞,每一口都是香浓与甜蜜的双重诱惑,好喝到跺脚!丝滑口感在舌尖舞动,仿佛味蕾在开派对。 简单几步就能复刻,成本超低,轻松在家享受奶茶自由。 材料:大白兔奶糖&…

SOA(面向服务架构)与微服务架构的区别与联系

SOA(面向服务架构)与微服务架构的区别与联系 1. 引言 在现代软件架构中,SOA(Service-Oriented Architecture,面向服务架构)和微服务架构(Microservices Architecture)是两种常见的…

LLM的准确率评估采用什么方式:准确率评估使用的是 `sklearn.metrics` 模块中的 `accuracy_score` 函数

LLM的准确率评估采用什么方式:准确率评估使用的是 sklearn.metrics 模块中的 accuracy_score 函数 评估方式 代码里的准确率评估是基于每个样本最后一个预测的 token 与真实的 token 进行对比。具体来说,它会遍历测试数据集中的每个样本,使用模型预测出最后一个 token 的 …

文件和异常

从文件中读取数据 读取整个文件 读取整个文件 要读取文件,需要一个包含几行文本的文件。下面首先创建一个文件,它包含精确 到小数点后30位的圆周率值,且在小数点后每10位处换行: pi_digits.txt 3.14159265358979323846264338…

2025最新版Windows通过GoLand远程连接Linux构建Go项目保姆级教学

以Ubuntu24.04和GoLand2024.1.6为例子,演示如何在Windows上通过GoLand远程连接Linux进行Go编程。 通过go version指令可以发现当前Ubuntu系统没有安装go。 go version 通过指令安装go,其他系统可以通过wget安装,要指定安装的具体go版本&…

Spring Boot 集成 Lua 脚本:实现高效业务逻辑处理

1. 前言 1.1 什么是Lua Lua是一种轻量级、高性能的脚本语言,常用于游戏开发、嵌入式系统、配置文件解析等领域。Lua语法简洁,易于学习和使用,且具有强大的扩展性。 1.2 Spring Boot与Lua集成的意义 将Lua集成到Spring Boot应用中,可以实现动态配置业务逻辑、简化复杂业…

Linux笔记---文件系统硬件部分

1. 文件系统 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。 1.1 基本组成 索引节点(inode)&#xff…

12.31[net]review

复用(Multiplexing)的概念 定义:在传输层,复用是指多个应用进程可以使用同一个传输层协议(如 TCP 或 UDP)来发送数据。从应用层的角度看,不同的应用进程(如网页浏览器、邮件客户端等…

网络安全防护架构有哪些 网络安全防护措施包括

网络安全预防措施 网安措施 计算机网络安全措施主要包括保护网络安全、保护应用服务安全和保护系统安全三个方面,各个方面都要结合考虑安全防护的物理安全、防火墙、信息安全、Web安全、媒体安全等等。 (一)保护网络安全。 网络安全是为保护商务各方网络端系统之…

物理笔记 | 拓扑相变的物理图像

1. 一般相变 对于一般的相变是朗道理论预言的由对称性自发破缺导致的。 比如在一维横场Ising模型中的量子相变 H − J ∑ j σ j z σ j 1 z − h ∑ j σ j x H -J \sum_{j} \sigma_j^z \sigma_{j1}^z - h \sum_{j} \sigma_j^x H−Jj∑​σjz​σj1z​−hj∑​σjx​ 其相…

红黑树介绍

1 问题引入 为什么有AVL树,还要引入红黑树? 在进行多次的插入和删除时: 1)AVL树会存在大量的旋转操作,追求的是严格平衡; 2)红黑树通过为节点增加颜色来换取增删节点时旋转次数…

Java基础:枚举类enum入门案例

1.基础枚举定义与使用: package com.zxy;public class Main {public static void main(String[] args) { // 获取枚举值cars car cars.BMW;switch (car){case BMW :System.out.println("BMW");break;case BENZ :System.out.println("BENZ&…

torch numpy sort排序出现索引顺序不正常

问题 torch 调用numpy ,numpy 的sort排序值的顺序没发现问题,但是排序的索引argsort()是有明显问题。 方案 多一次取索引 arr.argsort().argsort()参考: https://blog.csdn.net/qq_50571974/article/details/123173118

大模型架构记录5-向量数据库

一 倒排索引、KNN、PQ 1.1 基础版本 query -> requery 对问题做处理,处理上下文 对query 做 refined query 1.2 向量数据库 二 搜索逻辑 2.1 knn 2.2 近似KNN 先和N个空间的均值比较再和空间内部的所有点比较,计算最近值。 优化一: …

Python :数据模型

一. 什么是数据模型? Python数据模型是Python对象系统的抽象,通过一组特殊方法​(如__init__、__len__等)和协议​(如迭代协议、上下文管理协议),定义了对象如何与语言的内置功能(如…

考研数学非数竞赛复习之Stolz定理求解数列极限

在非数类大学生数学竞赛中,Stolz定理作为一种强大的工具,经常被用来解决和式数列极限的问题,也被誉为离散版的’洛必达’方法,它提供了一种简洁而有效的方法,使得原本复杂繁琐的极限计算过程变得直观明了。本文&#x…