AIP-133 标准方法:Create
| 编号 | 133 |
|---|---|
| 原文链接 | AIP-133: Standard methods: Create |
| 状态 | 批准 |
| 创建日期 | 2019-01-23 |
| 更新日期 | 2019-01-23 |
在REST API中,通常向集合URI(如 /v1/publishers/{publisher}/books )发出POST请求,在集合中创建新资源。
面向资源设计(AIP-121)提供Create方法,遵循这一模式。这些接口接受上级集合和欲创建资源(可能还有其他参数),返回新建的资源。
指南
API通常 应当 为资源提供Create方法,除非这个操作对用户没有意义。Create方法的目的是在现有集合中创建新资源。
Create方法使用以下模式指定:
rpc CreateBook(CreateBookRequest) returns (Book) {option (google.api.http) = {post: "/v1/{parent=publishers/*}/books"body: "book"};option (google.api.method_signature) = "parent,book";
}
- 接口的名字 必须 以单词Create开头,其余部分 应当 是目标资源的单数形式。
- 请求消息 必须 与接口名字一致,并带有
Request后缀。 - 应答消息 必须 是资源本身。不存在
CreateBookResponse。- 应答 应当 包括完整资源数据, 必须 包括所有支持的域,仅输入域除外(参考AIP-203)。
- 如果Create接口是长运行创建,应答消息 必须 是解析为资源本身的
google.longrunning.Operation。
- HTTP动词必须是
POST。 - 添加新资源的集合 应当 映射到URI路径。
- 集合的上级资源 应当 称为
parent, 应当 是URI路径中唯一的变量。 - 集合标识符(例子中的
books) 必须 是字面值字符串。
- 集合的上级资源 应当 称为
google.api.http注解中 必须 包含body键, 必须 映射到请求消息中的资源域。- 所有其他域 应当 映射到URI查询参数。
- 应当 存在一个
google.api.method_signature注解,值为"parent,{resource},{resource}_id"。如果不需要资源I标识,值为"parent,{resource}"。 - 如果API在[BROKEN LINK: 管理平面]上运行,则操作应具有[BROKEN LINK: 强一致性]:创建操作的完成必须意味着所有用户可设置的值和资源的存在已达到稳定状态,并且读取资源状态返回一致的应答。
请求消息
创建方法实现了一个常见的请求消息模式:
```proto message CreateBookRequest { / 将在其中创建此书籍的上级资源。 / 格式:publishers/{publisher} string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { child_type: “library.googleapis.com/Book” }];
/ 用于书籍的ID,将成为书籍资源名字的最终组成部分。 / / 此值应为4-63个字符,有效字符为[a-z][0-9]-/。 string book_id = 2 [(google.api.field_behavior) = REQUIRED];
// 要创建的书籍。 Book book = 3 [(google.api.field_behavior) = REQUIRED]; } ```
- 必须包含一个parent域,除非正在创建的资源是顶级资源。它应称为parent。
- 该域应被注释为必需([BROKEN LINK: AIP-203])。
- 该域必须标识正在创建的资源的[BROKEN LINK: 资源类型]([BROKEN LINK: AIP-123])。
- 对于管理平面资源,必须包含{resource}_id域,对于数据平面资源,应包含该域。
- 必须包含资源域,并且必须映射到POST主体。
- 请求消息不得包含任何其他必需域,并且不应包含其他可选域,除非在此或另一个AIP中描述。
长运行创建
某些资源创建资源所需的时间比常规API请求合理的时间长。在这种情况下,API应使用长运行操作([BROKEN LINK: AIP-151]):
```proto rpc CreateBook(CreateBookRequest) returns (google.longrunning.Operation) { option (google.api.http) = { post: “/v1/{parent=publishers/*}/books” body: “book” }; option (google.longrunning.operation_info) = { response_type: “Book” metadata_type: “OperationMetadata” }; } ```
- 应答类型必须设置为资源(如果接口不是长运行,则返回类型将是该资源)。
- 必须指定response_type和metadata_type域。
重要提示: 声明友好资源([BROKEN LINK: AIP-128])应使用长运行操作。如果请求实际上是立即的,则服务可以返回已设置为完成的LRO。
用户指定的ID
如果API在[BROKEN LINK: 管理平面]上运行,则API必须允许用户在创建时指定资源的ID组件(资源名字的最后一段)。
在[BROKEN LINK: 数据平面]上,API应允许用户指定ID。特殊情况应具有以下行为:
- 数据平面资源允许相同的记录,无需区分两者(例如,没有主键的表中的行)。
- 数据平面资源不会在[BROKEN LINK: 声明客户端]中公开。
API可以允许{resource}_id域具有[BROKEN LINK: field_behavior] OPTIONAL,并在未指定时生成系统生成的ID。
例如:
``` // 使用用户指定的ID。 publishers/lacroix/books/les-miserables
// 使用系统生成的ID。 publishers/012345678-abcd-cdef/books/12341234-5678-abcd ```
- {resource}_id域必须存在于请求消息上,而不是资源本身。
- 该域可以是必需的或可选的。如果它是必需的,则应包括相应的注释。
- 必须忽略资源上的name域。
- 接口上应恰好有一个google.api.method_signature注释,如果正在创建的资源不是顶级资源,则其值为"parent,{resource},{resource}_id",如果正在创建的资源是顶级资源,则其值为"{resource},{resource}_id"。
- 文档应解释可接受的格式是什么,并且格式应遵循[BROKEN LINK: AIP-122]中资源名字格式的指南。
- 如果用户尝试创建具有会导致重复资源名字的ID的资源,则服务必须返回ALREADY_EXISTS错误。
- 但是,如果进行调用的用户没有权限查看重复资源,则服务必须返回PERMISSION_DENIED错误。
注意: 对于REST API,用户指定的ID域{resource}_id作为请求URI上的查询参数提供。
错误
参考错误,特别是[BROKEN LINK: 何时使用PERMISSION_DENIED和NOT_FOUND错误]。
进一步阅读
- 有关在Create方法中确保幂等性,请参考[BROKEN LINK: AIP-155]。
- 有关涉及Unicode的资源命名,请参考[BROKEN LINK: AIP-210]。
理由
要求用户指定的ID
[BROKEN LINK: 声明客户端]使用资源ID作为应用更新和冲突解决的一种方式。缺少用户指定的ID意味着客户端无法找到资源,除非他们在本地存储标识符,并且可能导致重新创建资源。这反过来又对所有引用它的资源产生下游影响,迫使它们更新到新创建资源的ID。
拥有用户指定的ID还意味着客户端可以预先计算资源名字并在其他资源的引用中使用它。
修订记录
- 2023-10-20 澄清{resource}_id仅对管理平面资源是必需的。
- 2023-08-24 添加一致性要求。
- 2023-05-11 更改关于resource_id的指南为必须。
- 2022-11-04 引用AIP-193中的聚合错误指南,类似于其他CRUDL AIP。
- 2022-06-02 更改后缀描述以消除多余的“-”。
- 2020-10-06 添加声明友好指南。
- 2020-08-14 更新错误指南以使用permission denied而不是forbidden。
- 2020-06-08 添加关于返回完整资源的指南。
- 2019-11-22 添加关于发送重复名字时使用何种错误的澄清。
- 2019-10-18 添加关于注释的指南。
- 2019-08-01 将示例从“shelves”更改为“publishers”,以提供更好的资源所有权示例。
- 2019-06-10 添加长运行创建的指南。
- 2019-05-29 添加对标准方法中任意域的明确禁止。
相关文章:
AIP-133 标准方法:Create
编号133原文链接AIP-133: Standard methods: Create状态批准创建日期2019-01-23更新日期2019-01-23 在REST API中,通常向集合URI(如 /v1/publishers/{publisher}/books )发出POST请求,在集合中创建新资源。 面向资源设计&#x…...
aerodrome交易所读合约分析
池地址 0xb2cc224c1c9fee385f8ad6a55b4d94e92359dc59token0 0x4200000000000000000000000000000000000006token1 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913tickSpacing 100stakedLiquidity 4579376109215388530 snapshotCumulativesInside tickLower tickUpperslot0 …...
ts 基础核心
吴悠讲编程 : 20分钟学会TypeScript 无废话速成TS https://www.bilibili.com/video/BV1gX4y177Kf...
[内网安全] 内网渗透 - 学习手册
这是一篇专栏的目录文档,方便读者系统性的学习,笔者后续会持续更新文档内容。 如果没有特殊情况的话,大概是一天两篇的速度。(实验多或者节假日,可能会放缓) 笔者也是一边学习一边记录笔记,如果…...
FaceFusion
文章目录 一、关于 FaceFusion预览 二、安装三、用法 一、关于 FaceFusion FaceFusion 是行业领先的人脸操作平台 github : https://github.com/facefusion/facefusion官方文档:https://docs.facefusion.io/Discord : https://discord.com/invite/facefusion-1141…...
使用github提交Pull Request的完整流程
文章目录 1.Fork仓库2. git clone 仓库在本地3.对项目进行修改开发4.上传项目到远程仓库操作补充1. git add .2. git commit -m "提交信息"3. git pull4. git push总结完整工作流程示例 5.将更新的项目pull Request给原来的仓库主人 当多人进行项目的开发的时候&…...
游戏与硬件深度协同,打造更精细的体验优化
高画质的游戏往往带来手机的发热和卡顿从而影响游戏体验。开发者希望能够获取到手机运行的实时状态,从而能够进行主动的负载调节,将手机发热时游戏体验影响降到最低;同时手机也可以通过游戏传入的关键场景如"正在下载资源"“团战中…...
简笔画生成smplx sketch2pose
目录 smplx安装: patch diff 命令行运行 pyrender报错: 解决方法: 这篇博客也不错,值得推荐 sketch2pose github地址: GitHub - kbrodt/sketch2pose: Sketch2Pose: Estimating a 3D Character Pose from a Bitmap Sketch smplx安装: 只能用这个版本,别的版本报错…...
SpringCloud系列教程:微服务的未来(十七)监听Nacos配置变更、更新路由、实现动态路由
前言 在微服务架构中,API 网关是各个服务之间的入口点,承担着路由、负载均衡、安全认证等重要功能。为了实现动态的路由配置管理,通常需要通过中心化的配置管理系统来实现灵活的路由更新,而无需重启网关服务。Nacos 作为一个开源…...
复古壁纸中棕色系和米色系哪个更受欢迎?
根据最新的搜索结果,我们可以看到棕色系和米色系在复古壁纸设计中都非常受欢迎。以下是对这两种颜色系受欢迎程度的分析: 棕色系 受欢迎程度:棕色系在复古壁纸中非常受欢迎,因为它能够营造出温暖、质朴和自然的氛围。棕色系的壁纸…...
Linux 非阻塞IO
Linux 非阻塞IO 1. fcntl() 在Linux操作系统中,fcntl() 是一个用于操作文件描述符的系统调用。它提供了多种功能,包括控制文件描述符的属性、管理文件锁定、设置文件的非阻塞模式等。 本文只截取了用于IO模型的 fcntl() 部分内容, fcntl() …...
go入门Windows环境搭建
简介 Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。 根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语言,而 C往往给人的感觉是&a…...
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…...
IO进程线程复习
文件IO和标准IO的区别 文件IO: 1.系统提供的用于输入输出的函数 2.有文件描述符0,1,2 3.open,close,puts,gets 4.可以操作任意类型的文件,不能操作目录 5.无缓存机制 标准IO: 1.C库提供的用于输入输出的函数 2.有文件流…...
Mybatis初步了解
mysql缓存:根据sql语句进入缓存,如果sql语句多加一个空格就进入不到同一个缓存,另外数据库数据发生了更新,缓存中的数据不会同步。 延迟加载:先查询基本信息,再查询其他信息,而不是一次就查询出…...
基于PyQt设计的智能停车管理系统
文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】设计意义【4】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】VSCODE【2】python【3】ptqt【4】HyperLPR31.5 参考文献二、安装Python环境1.1 环境介绍**1.2 Python版本介…...
linux系统中的 scp的使用方法
SCP(Secure Copy Protocol)是一种通过加密的方式在本地主机和远程主机之间安全地传输文件的协议。 它是基于SSH协议的扩展,允许用户在不同主机之间进行文件复制和传输,是Linux和Unix系统中常用的工具之一。 在嵌入式Linux软件的…...
短连接项目01---基本框架的搭建和测试运行
文章目录 1.什么是短链2.仓库的创建3.项目的创建4.配置文件的修改5.三个模块的创建5.1如何创建5.2类型的选择5.3包的完善 6.yml文件的配置7.启动类的测试8可能会出现的问题 1.什么是短链 下面的这个就是一个长的url,我们的短链里面的链就是链接,也就是我…...
Unity阿里云OpenAPI 获取 Token的C#【记录】
获取Token using UnityEngine; using System; using System.Text; using System.Linq; using Newtonsoft.Json.Linq; using System.Security.Cryptography; using UnityEngine.Networking; using System.Collections.Generic; using System.Globalization; using Cysharp.Thr…...
2023年吉林省职业院校技能大赛网络系统管理样题-网络配置(华三代码)
目录 附录1:拓扑图 附录2:地址规划表 1.S1 2.S3 3.S4 4.S5 5.S7 6.S8 7.S9 8.R1 9.R2 10.R3 11.EG1 12.EG2 13.AC1 14.AC2 附录1:拓扑图 编号 型号...
WSL 安装cuDNN
WSL 安装cuDNN 参考文档:https://docs.nvidia.com/deeplearning/cudnn/installation/latest/linux.html#verifying-the-install-on-linux 1. 下载相应包 根据下方下载地址进入下载界面,并选择与自己电脑相对应的平台执行图中的命令 下载地址࿱…...
SSRF漏洞学习总结
一、SSRF漏洞 1.原理 SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,攻击者利用这个漏洞可以诱使服务器端发起由攻击者构造的请求。这种攻击通常发生在应用接受来自用户的输入,并且该输入用于构…...
stack 和 queue容器的介绍和使用
1.stack的介绍 1.1stack容器的介绍 stack容器的基本特征和功能我们在数据结构篇就已经详细介绍了,还不了解的uu, 可以移步去看这篇博客哟: 数据结构-栈数据结构-队列 简单回顾一下,重要的概念其实就是后进先出,栈在…...
Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴
目录 背景 解决gpedit.msc打不开 解决复制粘贴 剪贴板的问题 启用远程桌面剪贴板与驱动器 重启RDP剪贴板监视程序 以上都不行?可能是操作被Win11系统阻止 最后 背景 远程桌面无法复制粘贴,需要查看下主机策略组设置,结果按WinR输入…...
(2023 RESS ) Federated multi-source domain adversarial adaptation framework
📚 研究背景与挑战 机械设备的故障诊断对于保障生产效率和安全至关重要。传统的智能诊断方法依赖于大量的训练数据,但在实际工业场景中,数据收集受到经济和时间因素的限制。更棘手的是,由于行业竞争和隐私安全问题,不…...
Java实现FIFO缓存策略实战
实现FIFO模型选择FIFO模型实现过程FIFO模型完整代码下面看一下先进先出的示例过程总结FIFO(First In First Out,先进先出)策略是一种基本的数据处理和存储管理方法,在Java中,这种策略通常用于管理那些需要按照顺序处理的数据项,比如任务的队列、数据的传输缓冲区等。在Ja…...
虚幻基础07:蓝图接口
能帮到你的话,就给个赞吧 😘 文章目录 作用原理事件函数 作用 实现对象间的通知。 A 通知 B 做什么。 原理 将接口抽象为蓝图,使得任意蓝图都能直接访问。 只需要再传入对象地址,就能执行对象的功能。 事件 黄色:…...
978.最长湍流子数组
目录 题目过程解法收获 题目 给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 。 如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。 更正式地来说,当 arr 的子数组 A[i], A[i1], …, A[j] 满足仅满足…...
Python数据分析-Python语法基础,IPython和Jupyter-Notebooks(二)
title: ‘Python数据分析:Python语法基础,IPython和Jupyter Notebooks(二)’ tags: python数据分析 categories:python数据分析 keywords:python数据分析 cover: …/img/404_icecream_whale.png description: 本文介绍python的基础语法和jup…...
Redis学习之哨兵一
一、基本概念 1.主从复制的问题: 一旦主节点出现故障需要手动的将一个从节点晋升为主节点同时需要修改应用方的主节点地址还需要通过命令其他节点去复制新的主节点。 主节点的写能力和存储能力受到单机的限制 2.高可用: 上图为一主二从的redis主从复制模…...
