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

AIP-156 单例资源

编号156
原文链接AIP-156: Singleton resources
状态批准
创建日期2019-05-12
更新日期2024-04-15

API有时需要表示在任意上级资源中,始终只存在一个实例的资源。常见的例子是配置对象。

指南

API 可以 定义 单例资源 。单例资源 必须 始终随上级资源而存在,每个上级资源拥有唯一的单例资源。

例如:

message Config {
  option (google.api.resource) = {
    type: "api.googleapis.com/Config"
    pattern: "users/{user}/config"
    singular: "config"
    plural: "configs"
  };

  // additional fields including name
}

Config 单例资源具有以下接口:

rpc GetConfig(GetConfigRequest) returns (Config) {
  option (google.api.http) = {
    get: "/v1/{name=users/*/config}"
  };
}

rpc UpdateConfig(UpdateConfigRequest) returns (Config) {
  option (google.api.http) = {
    patch: "/v1/{config.name=users/*/config}"
    body: "config"
  };
}
  • 单例资源 不得 拥有用户设定或系统生成的标识;其资源名字包含上级资源名字,后接一个固定部分。
    • 示例: users/1234/config
  • 单例资源始终使用单数形式。
    • 示例: users/1234/thing
  • 单例资源定义 必须 提供 singular 和 plural 域(见上例)。
  • 单例资源 可以 作为其他资源的上级资源。
  • 单例资源 不得 定义Create或Delete标准方法。单例资源在其上级资源创建或删除时自动创建或删除。
  • 单例资源 应当 定义Get和Update方法, 可以 按需提供自定义方法。
    • 如果资源的所有域都是只输出域,单例资源 不得 定义Update方法。
  • 单例资源 可以 定义List方法,但 必须 遵守AIP-159。见下例。
    • 用来表示集合的路径模式中的最后一段 应当 使用单例资源的 plural 形式,如 /v1/{parent=users/*}/configs 。
    • 如果按照AIP-159提供了上级资源标识而非连字符 - ,服务 应当 返回包含与指定上级资源对应的单例资源集合。
rpc ListConfigs(ListConfigsRequest) returns (ListConfigsResponse) {
  option (google.api.http) = {
    get: "/v1/{parent=users/*}/configs"
  };
}

message ListConfigsRequest {
  // To list all configs, use `-` as the user id.
  // Formats:
  // * `users/-`
  // * `users/{user}`
  //
  // Note: Specifying an actual user id will return a collection of one config.
  // Use GetConfig instead.
  string parent = 1 [
    (google.api.resource_reference).child_type = "api.googleapis.com/Config"];

  // other standard pagination fields...
}

理由

支持标准List方法

虽然单例资源本身不是集合中的元素,但它们可以被视为上级资源集合的一部分。上级资源与单例资源的一对一对应关系意味着每个上级资源都有一个单例资源,在与跨集合读取模式结合时,自然的产生了一些基于集合的方法。由于间接依赖于上级资源集合,单例资源可以作为集合提供给API消费者。此外,在此类方法中将单例资源组成伪集合,可以在将来扩展到实际集合上,弥补单例模式不足。

包含 plural 定义

虽然单例资源在定义上是单数,但在某些情况下,也可能以复数形式出现。例如,服务支持标准List方法(如本文所描述)。因此最好提前声明单例资源类型的复数形式,以免需要时找不到。

修订记录

  • 2024-04-15 单例资源必须提供 singular 和 plural 。
  • 2023-08-10 添加标准 List 方法支持。
  • 2023-07-26 阐明只读单例资源不应具有 Update 方法。
  • 2021-11-02 添加示例消息,说明上级资源资格。
  • 2021-01-14 将示例从 settings 改为 config ,提高清晰程度。


http://www.kler.cn/a/567404.html

相关文章:

  • 一周一个Unity小游戏2D反弹球游戏 - 球的死区及球重生
  • React + TypeScript 实现 SQL 脚本生成全栈实践
  • 3D打印涡轮叶片-当传统铸造遇上“不可能任务”
  • Pytest之fixture的常见用法
  • PyTorch 类声明中的 super().__init__()是什么?为什么必须写它?
  • 【Linux】Linux的进程控制
  • MyBatis基础模块-缓存模块
  • 小结:计算机网路中的性能指标小结
  • 8 - PS XADC接口实验
  • 1-kafka单机环境搭建
  • 【Linux】Linux的基本指令(3)
  • React创建项目实用教程
  • c#实现modbus rtu定时采集数据
  • 基于SSM实现的bbs论坛系统功能实现八
  • VSCode 中使用 GitHub Copilot最新版本详解
  • 数据结构课程设计(java实现)---九宫格游戏,也称幻方
  • MCU的GPIO 八种模式
  • java使用word模板填充内容,再生成pdf
  • 低空经济火热,校企合作无人机低空产业技术详解
  • huffman压缩