gRPCのソースを読んでいて、よく出てくるField behaviorのIMMUTABLE がよくわからなかったので調べた
RecognitionAudio audio = 2 [(google.api.field_behavior) = REQUIRED, (google.api.field_behavior) = IMMUTABLE];
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: フィールドが省略可能であることを示す