当前位置: 首页 > article >正文

AIP-213 通用组件

编号213
原文链接AIP-213: Common components
状态批准
创建日期2018-08-17
更新日期2018-08-17

根据AIP-215规定,除使用“通用组件”包之外,API必须是独立的。通用组件包是给多个API使用的。

通用组件包有两种类型:

  • 组织特定的通用组件,包括组织特定的概念,例如地图中的“视口”。
  • 全局通用组件,这些组件是通用的(即不特定于某个领域),例如“时间戳”或“邮政地址”。

如果可以安全在多个API之间共享同一个消息,通用组件可以让客户端更容易API交互。例如关于特定概念的客户端代码只需要编写一次,一个API的应答中的消息可以直接用于另一个API的请求,无需低效的复制。

当让这种优势也存在重要的限制和局限性,不应轻易尝试。

请注意,即使组件所属 领域 是通用的,组件也可能是组织特定的。例如某些组织可能对财务值的展示有特定要求,产生多个面向财务的组织特定通用组件——因为全局通用组件要么不符合组织特定要求,要么对于一般用法来说过于复杂。

指南

  • 组织范围内的通用组件包 必须 以 .type 结尾,例如 google.geo.type 或 google.shopping.type 。
  • 在创建新的组织范围内通用组件包之前, 必须 咨询API设计团队。
  • 组织范围内的通用组件包 必须 发布在 googleapis 仓库。
  • 创建和发布新的组织通用组件包后,组织 必须 更新本AIP,在下面的列表中添加新包。
  • 组织 不得 在组织特定通用组件包中定义(非特定)通用组件,建议优先使用全局通用组件。
  • 通用组件 不得 从组织特定通用组件包“移动”(即从一个通用组件包中删除,再添加到另一个中)到全局通用组件包,或反之。
    • 如果发现特定通用组件比最初预期的使用场景更广泛, 可以 将其从组织特定通用组件包复制到全局通用组件包(但不删除原组件)。
  • 不应 向现有消息添加域。
  • 不应 向现有枚举添加值。
  • 不得 从现有消息中删除域。
  • 不得 从现有枚举中删除值。
  • 虽然 可以 在文档中说明,但 不应 更改现有值的含义,包括任何给定消息或消息集的有效性。
  • 可以 向通用组件包添加新proto消息和枚举。
    • 在API使用新消息和枚举之前,API团队 应当 留出足够时间进行客户端推广。新域可能需要一些时间,才能通过发布客户端库和其他界面得到推广。
    • 由于上述限制,API团队在添加新消息或枚举之前, 应当 广泛征求组织内部意见,适时咨询API设计团队。

现有的全局通用组件

API 可以 安全导入的、公布了proto的全局通用组件如下所示:

  • google.api.*(  包括 google.api 的子包)
  • google.longrunning.Operation
  • google.protobuf.*
  • google.rpc.*
  • google.type.*

请注意,某些通用组件可能具有内部域。API通常 应当 仅依赖已开源的域。

Google API也 可以 导入google.iam.v1.*,它提供了在Google中使用的IAM消息。

注意 许多API从其他包导入组件在内部使用(例如应用可见性标签或向内部基础设施提供指令)。只要 公开 组件不包含这些引用,也是可以的。

Protobuf类型

google.protobuf 包有些特殊,它随protocol buffer一起发布,而非随API工具一起发布。(对于大多数API设计者来说,这是实现层面细节)。

这个包拥有一个表示常见编程语言结构的小型库:

  • google.protobuf.Duration:时长,精度纳秒。protobuf运行时提供了辅助函数,适时转换成语言本地时长对象(例如Python的 timedelta )。
  • google.protobuf.Struct:类似JSON的结构(基础类型值、列表和嵌套其他字典的字典)。protobuf运行时在大多数语言中都提供了辅助函数,将struct对象和JSON相互转换。
  • google.protobuf.Timestamp:时间戳,精度纳秒。protobuf运行时在大多数语言中都提供了辅助函数,与语言本地时间戳对象进行转换(例如Python的 datetime )。

API类型

google.type 包为 API 中的常见概念提供了一套“标准库”类型。尽管类型会不定期新增且最终权威列表始终以代码为准,但以下几种类型值得特别关注:

google.type 包提供了API中的常见概念类型的“标准库”。类型会不定期增加,定义列表以代码为准。其中有几个类型值得注意:

  • google.type.Color:RGB或RGBA颜色。
  • google.type.Date:日历日期。不含时间或时区组件。
  • google.type.DayOfWeek:星期几。不含其他日期、时间或时区组件。
  • google.type.LatLng:地理坐标。
  • google.type.Money:货币。
  • google.type.PostalAddress:大多数国家的邮政地址。
  • google.type.TimeOfDay:挂钟时间。不含日期或时区组件。

新增通用proto

有时可能需要向这些包或公用proto添加proto。请在GitHub上的AIP创建问题,请注意上述指南。

现有组织特定通用组件包

现有以下组织特定通用组件包,均符合上述指南:

  • google.apps.script.type Google Apps Script通用组件包。
  • google.geo.type Google Maps和Geo的通用组件包。
  • google.actions.type Actions on Google API通用组件包。

规则例外通用组件包

现有以下通用组件包不符合上述指南,但不应构成后续类似包的先例。

  • google.cloud.common: 不符合包名以.type结尾的要求。(否则不会产生例外。此包应作为Cloud通用组件包。)
  • google.logging.type: 虽然被多个API使用,更像是API特定的。其中某些部分可能应放置在全局或Cloud通用组件包。
  • google.cloud.workflows.type: API特定类型。
  • google.cloud.oslogin.common: API特定类型,以及不符合名字要求。
  • google.identity.accesscontextmanager.type: API特定类型。
  • google.networking.trafficdirector.type: API特定类型。

理由

通用组件实际上是没有版本控制:API在定义和实现上彼此独立发展。注入添加新域的更改在特定API中是向后兼容和可预测的,API团队可以保证在发布API定义之前,服务器实现已经可用。相比之下,通用组件变更,即使尚未被大部分API实现者考虑到,也会广泛生效。

添加新消息或枚举是向后兼容的,因为不会影响到从同一通用组件包中导入消息或枚举的现有API。

对于全局通用组件,必须咨询API设计团队;对于组织特定通用组件,建议咨询API设计团队。“通用”和“组织特定”之间的界限模糊的;某些通用 概念 可能通过组件表现出组织特定场景。

修订记录

  • 2023-06-27 重新组织AIP 215和213,让文字更清楚。正式引入组织特定通用proto概念。
  • 2018-08-17 初稿。

相关文章:

AIP-213 通用组件

编号213原文链接AIP-213: Common components状态批准创建日期2018-08-17更新日期2018-08-17 根据AIP-215规定,除使用“通用组件”包之外,API必须是独立的。通用组件包是给多个API使用的。 通用组件包有两种类型: 组织特定的通用组件&#…...

Go语言-初学者日记(七):用 Go 写一个 RESTful API 服务!

👷 实践是最好的学习方式!这一篇我们将用 Go Gin 框架从零开始开发一个用户管理 API 服务。你将学到: 如何初始化项目并引入依赖如何组织目录结构如何用 Gin 实现 RESTful 接口如何通过 curl 测试 API进阶功能拓展建议 🧰 一、项…...

Java 搭建 MC 1.18.2 Forge 开发环境

推荐使用 IDEA 插件 Minecraft Development 进行创建项目 创建完成后即可进行 MOD 开发。 但是关于 1.18.2 的开发教程太少,因此自己研究了一套写法,写法并非是最优的但是是探索开发MOD中的一次笔记和记录 GITHUB: https://github.com/zimoyin/zhenfa…...

计算机网络知识点汇总与复习——(三)数据链路层

Preface 计算机网络是考研408基础综合中的一门课程,它的重要性不言而喻。然而,计算机网络的知识体系庞大且复杂,各类概念、协议和技术相互关联,让人在学习时容易迷失方向。在进行复习时,面对庞杂的的知识点&#xff0c…...

Verilog HDL 100道面试题及参考答案

目录 Verilog HDL 的四种基本逻辑值是什么? 关键字 reg 和 wire 的主要区别是什么? 解释阻塞赋值(=)与非阻塞赋值(<=)的区别,并举例说明。 如何声明一个双向端口(inout)? 位拼接操作符是什么?举例说明其用法。 拼接信号和常量 拼接常量和信号 重复拼接 以…...

内网(域)渗透测试流程和模拟测试day--5--Windows和Linux的提权

前景&#xff1a; 小知识&#xff1a; 认识一下土豆家族 是指一系列利用 Windows 系统漏洞实现提权的工具或方法&#xff0c;起源于 JuicyPotato。这些工具大多利用 COM 对象和服务中的权限提升漏洞&#xff0c;主要用于在 Windows 环境中从中低权限&#xff08;如普通用户&…...

主机和虚拟机间的网络通信

参考&#xff1a;Vmware虚拟机三种网络模式详解 - 林加欣 - 博客园 (cnblogs.com) 虚拟机配置 一般额外配置有线和无线网络 桥接模式 虚拟机和主机之间是同一个网络&#xff0c;用一根线连接了虚拟机和物理机的网卡,可以选择桥接的位置&#xff0c;默认情况下是自动桥接&…...

嵌入式Linux开发环境搭建,三种方式:虚拟机、物理机、WSL

目录 总结写前面一、Linux虚拟机1 安装VMware、ubuntu18.042 换源3 改中文4 中文输入法5 永不息屏6 设置 root 密码7 安装 terminator8 安装 htop&#xff08;升级版top&#xff09;9 安装 Vim10 静态IP-虚拟机ubuntu11 安装 ssh12 安装 MobaXterm &#xff08;SSH&#xff09;…...

说清楚单元测试

在团队中推行单元测试的时候,总是会被成员问一些问题: 这种测试无法测试数据库的SQL(或者是ORM)是否执行正确?这种测试好像没什么作用?关联的对象要怎么处理呢?…借由本篇,来全面看一看单元测试。 单元测试是软件开发中一种重要的测试方法,其核心目的是验证代码的最小…...

如何分析 jstat 统计来定位 GC?

全文目录&#xff1a; 开篇语前言摘要概述jstat 的核心命令与参数详解基本命令格式示例 jstat 输出解读主要字段含义 典型 GC 问题分析案例案例 1&#xff1a;年轻代 GC 过于频繁案例 2&#xff1a;老年代发生频繁 Full GC案例 3&#xff1a;元空间&#xff08;Metaspace&#…...

电商---part02 项目环境准备

1.虚拟机环境 可以通过VMWare来安装&#xff0c;但是通过VMWare安装大家经常会碰到网络ip连接问题&#xff0c;为了减少额外的环境因素影响&#xff0c;Docker内容会通过VirtualBox结合Vagrant来安装虚拟机。 VirtualBox官网&#xff1a;https://www.virtualbox.org/ Vagran…...

LabVIEW提升程序响应速度

LabVIEW 程序在不同计算机上的响应速度可能存在较大差异&#xff0c;这通常由两方面因素决定&#xff1a;计算机硬件性能和程序本身的优化程度。本文将分别从硬件配置对程序运行的影响以及代码优化方法进行详细分析&#xff0c;帮助提升 LabVIEW 程序的执行效率。 一、计算机硬…...

工业领域网络安全技术发展路径洞察报告发布 | FreeBuf咨询

工业网络安全已成为国家安全、经济稳定和社会运行的重要基石。随着工业互联网、智能制造和关键基础设施的数字化升级&#xff0c;工业系统的复杂性和互联性显著提升&#xff0c;针对工业领域的网络攻击朝着目标多样化、勒索攻击产业化、攻击技术持续升级的方向发展&#xff0c;…...

WPF 登录页面

效果 项目结构 LoginWindow.xaml <Window x:Class"PrismWpfApp.Views.LoginWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.…...

【数学建模】动态规划算法(Dynamic Programming,简称DP)详解与应用

动态规划算法详解与应用 文章目录 动态规划算法详解与应用引言动态规划的基本概念动态规划的设计步骤经典动态规划问题1. 斐波那契数列2. 背包问题3. 最长公共子序列(LCS) 动态规划的优化技巧动态规划的应用领域总结 引言 动态规划(Dynamic Programming&#xff0c;简称DP)是一…...

leetcode-代码随想录-链表-移除链表元素

题目 链接&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 …...

低成本训练垂直领域文娱大模型的技术路径

标题:低成本训练垂直领域文娱大模型的技术路径 内容:1.摘要 在文娱产业快速发展且对智能化需求日益增长的背景下&#xff0c;为降低垂直领域文娱大模型的训练成本&#xff0c;本研究旨在探索低成本训练的有效技术路径。采用对现有开源模型进行微调、利用轻量化模型架构以及优化…...

Spring Boot 3.4.3 基于 Caffeine 实现本地缓存

在现代企业级应用中,缓存是提升系统性能和响应速度的关键技术。通过减少数据库查询或复杂计算的频率,缓存可以显著优化用户体验。Spring Boot 3.4.3 提供了强大的缓存抽象支持,而 Caffeine 作为一款高性能的本地缓存库,因其优异的吞吐量和灵活的配置,成为许多开发者的首选…...

手机为电脑提供移动互联网络的3种方式

写作目的 在当今数字化时代,电脑已成为人们日常工作和生活中不可或缺的工具,而网络连接更是其核心功能之一。无论是处理工作任务、进行在线学习、还是享受娱乐资源,稳定的网络环境都是保障这些活动顺利开展的关键。然而,在实际使用过程中,电脑网络驱动故障时有发生,这可…...

论文阅读Diffusion Autoencoders: Toward a Meaningful and Decodable Representation

原文框架图&#xff1a; 官方代码&#xff1a; https://github.com/phizaz/diffae/blob/master/interpolate.ipynb 主要想记录一下模型的推理过程 &#xff1a; %load_ext autoreload %autoreload 2 from templates import * device cuda:1 conf ffhq256_autoenc() # pri…...

Python集合(五)

集合一&#xff1a; 跟字典一样&#xff0c;最大的特性就是唯一性&#xff0c;集合中的所有的元素都是独一无二的&#xff0c;并且还是无序的 创建集合 第一种&#xff1a; 第二种&#xff1a;集合推导式&#xff1a; 第三种&#xff1a;使用类型构造器&#xff1a; 集合是无…...

ISIS多区域配置

一、什么是ISIS多区域 ISIS&#xff08;Intermediate System to Intermediate System&#xff09;多区域是指网络被划分为多个逻辑区域&#xff08;Areas&#xff09;&#xff0c;不同区域之间通过特定的ISIS路由器&#xff08;Level-1-2&#xff09;进行路由交互。多区域设计提…...

2025-04-04 Unity 网络基础5——TCP分包与黏包

文章目录 1 分包与黏包2 解决方案2.1 数据接口2.2 定义消息2.3 NetManager2.4 分包、黏包处理 3 测试3.1 服务端3.2 客户端3.3 直接发送3.4 黏包发送3.5 分包发送3.6 分包、黏包发送3.7 其他 1 分包与黏包 ​ 分包、黏包指在网络通信中由于各种因素&#xff08;网络环境、API …...

Leetcode——150. 逆波兰表达式求值

题解一 思路 和上一期1047. 删除字符串中的所有相邻重复项没差太多&#xff0c;基本思想都一样&#xff0c;就是读取输入的数据&#xff0c;如果是运算符&#xff0c;就进行相应的运算&#xff0c;然后把运算结果压栈。 代码 class Solution {public int evalRPN(String[] …...

【Node】一文掌握 Express 的详细用法(Express 备忘速查)

文章目录 入门Hello Worldexpress -hexpress()RouterApplicationRequest属性方法 Response属性方法 示例RouterResponseRequestres.end()res.json([body])app.allapp.deleteapp.disable(name)app.disabled(name)app.engine(ext, callback)app.listen([port[, host[, backlog]]]…...

chromium魔改——绕过无限debugger反调试

在进行以下操作之前&#xff0c;请确保已完成之前文章中提到的 源码拉取及编译 部分。 如果已顺利完成相关配置&#xff0c;即可继续执行后续操作。 在浏览器中实现“无限 debugger”的反调试技术是一种常见的手段&#xff0c;用于防止他人通过开发者工具对网页进行调试或逆向…...

Spring 核心技术解析【纯干货版】- XVI:Spring 网络模块 Spring-WebMvc 模块精讲

在现代 Web 开发中&#xff0c;高效、稳定、可扩展的框架至关重要。Spring WebMvc 作为 Spring Framework 的核心模块之一&#xff0c;为开发人员提供了强大的 MVC 体系支持&#xff0c;使得 Web 应用的构建更加便捷和规范。无论是传统的 JSP 视图渲染&#xff0c;还是基于 RES…...

【GPT入门】第33课 从应用场景出发,区分 TavilyAnswer 和 TavilySearchResults,代码实战

【GPT入门】第33课 从应用场景出发&#xff0c;区分 TavilyAnswer 和 TavilySearchResults&#xff0c;代码实战 1. 区别应用场景 2. 代码使用3.代码执行效果 在langchain_community.tools.tavily_search中&#xff0c;TavilyAnswer和TavilySearchResults有以下区别和应用场景&…...

JS dom修改元素的style样式属性

1通过样式属性修改 第三种 toggle有就删除 没就加上...

灭火器离位检测:智能视觉守护安全

利用视觉分析实现明火检测&#xff1a;技术、功能与应用 一、背景 清明节期间&#xff0c;兰州市连续发生多起因祭祖烧纸引发山火的警情&#xff0c;如七里河区魏岭乡赵某某等人上坟烧纸未妥善处理烛火引燃杂草&#xff0c;导致3人烧伤&#xff1b;七里河区彭家坪石板山村村民…...