UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【gRPC】Field behavior のIMMUTABLEとは

gRPCのソースを読んでいて、よく出てくるField behaviorのIMMUTABLE がよくわからなかったので調べた

RecognitionAudio audio = 2 [(google.api.field_behavior) = REQUIRED, (google.api.field_behavior) = IMMUTABLE];

google.aip.dev

Field behaviorは、Protocol Buffersで定義されたフィールドの動作や特性を指定するための拡張機能

主にAPIの設計やドキュメンテーションに使用される

google.api.field_behavior immutableはその名の通りフィールドが一度設定されると変更できないことを示す

オブジェクトの作成時に値が設定され、その後は変更されないことを意味する

   import "google/api/field_behavior.proto";

   message User {
     string id = 1 [(google.api.field_behavior) = IMMUTABLE];
     string name = 2;
     int32 age = 3;
   }

この例では、idフィールドが不変(immutable)として定義されている

よくわからなかったことの一端は、そもそもオブジェクト作成後に更新をすべきでないと考えているからで、デフォルトで全てついているものだと思っていたからだとわかった

ちなみに、その他のField behavior

  • REQUIRED: フィールドが必須であることを示す
  • OUTPUT_ONLY: サーバーによって設定され、クライアントは読み取りのみ可能
  • INPUT_ONLY: クライアントによって設定され、サーバーは読み取りのみ可能
  • OPTIONAL: フィールドが省略可能であることを示す