Google AIPs 01

気になるところを読んでみる。メモ。

google.aip.dev

AIP-121: Resource-oriented design

  • リソース指向 API ではリソースに対する実行される操作を重視する
  • 標準メソッド
    • Create, Get, Update, Delete, List
  • カスタムメソッド
    • POST
    • URI にカスタム動詞を定義する

AIP-122: Resource names

  • コレクション識別子とリソース ID を交互に使用する
  • リソース名は name フィールド
    • 親リソースは parent フィールド
  • name とは別にリソース ID (ex. book_id) のフィールドを定義してもいい (OUTPUT_ONLY)
  • リソース ID は RFC-1034 準拠
    • 英小文字, 数字, ハイフン (文字始まり)
    • 最大63文字
    • ユーザーは UUID ライクな ID 入力は避ける
  • 完全リソース名
    • スキームレス URI + 相対リソース名
    • 任意の API でリソース参照が必要なときに完全リソース名が必要
  • リソース URI
    • スキーム, API バージョン, サービスエンドポイント を含む

AIP-123: Resource types

  • リソースタイプ {SERVICE_NAME}/{TYPE}
  • google.api.resource
  • リソースの型を指定する

AIP-124: Resource association

  • リソースの親は最大1つ
  • 他の親リソースは (たぶん parent とは) 別のフィールドで指定する

AIP-126: Enumerations

  • enum の先頭の値は XXX_UNSPECIFIED とする
    • 明確にゼロ値が存在する場合はゼロ値を優先する (ex. UNKNOWN とか)
  • 入れ子enum を定義する場合は enum の名前を prefix に付けない (冗長なので)
  • protobuf では bool の falseunset は区別できない
    • 代わりに enum を用いるのもあり (もしくは google.protobuf.BoolValue を使う)