-
Notifications
You must be signed in to change notification settings - Fork 11
03.10.01.Protocol Buffers
Protocol BuffersはGoogleによって開発されたシリアライゼーションフォーマットです。Protocol Buffersではprotoファイルによってデータ構造を定義します。
Aeromockでは、protoファイルと対応するデータファイルを用意するだけでProtocol Buffersのバイナリレスポンスを返すことができます。 ただし、テンプレートエンジンとの共存はできません。
project.yamlのprotobuf
とdata
を設定すると、Protocol Buffersのデータをレスポンスすることができます。
protoファイルのルートディレクトリです。プロジェクトルートからの相対パスを指定します。
protobuf:
root: ./protobuf
ルートディレクトリにAPIのサブディレクトリを用意しているような場合、apiPrefix
を定義しておくと/apiをつけてリクエストする必要がなくなります。
protobuf:
root: ./protobuf
apiPrefix: /api
Protocol Buffersデータのルートディレクトリです。プロジェクトルートからの相対パスを指定します。
protobuf:
root: ./protobuf
apiPrefix: /api
data:
root: ./data
protoファイルとデータファイルを同じ階層に配置することで紐付けられます。
proto_root/path1/test.proto -> data_root/path1/test.yaml
基本的に、protoデータファイルの仕様はJSON APIのデータファイルと同じです。protoデータファイルでは、JSON APIのデータファイル仕様に加えて以下の特殊仕様があります。
Protocol Buffersの仕様上、1つのprotoファイルには複数のメッセージタイプを定義することができます。そのため、レスポンスに利用するメッセージタイプを特定する必要があります。Aeromockではprotoデータファイルに__type
属性を定義することで、レスポンスのメッセージタイプを特定します。
以下のようなprotoファイルがあったとします。
package protobuf.api;
import "schema/user.proto";
message TestRequest {
required int32 prop1 = 1;
required string prop2 = 2;
}
message TestResponse {
required int32 prop1 = 1;
required string prop2 = 2;
required int64 prop3 = 3;
repeated string prop4 = 4;
required schema.TestUser prop5 = 5;
optional int64 prop6 = 6 [default = 1];
}
TestResponseをレスポンスのメッセージタイプとして利用したい場合、protoデータファイルを以下のように記述します。
__type: TestResponse
prop1: 100
prop2: prop2value
prop3: 11111111111
prop4:
- "1111"
- "2222"
- "3333"
prop5:
id: 1000
name: testuser