Skip to content

03.10.01.Protocol Buffers

stormcat24 edited this page Dec 30, 2014 · 1 revision

Protocol BuffersはGoogleによって開発されたシリアライゼーションフォーマットです。Protocol Buffersではprotoファイルによってデータ構造を定義します。

Aeromockでは、protoファイルと対応するデータファイルを用意するだけでProtocol Buffersのバイナリレスポンスを返すことができます。 ただし、テンプレートエンジンとの共存はできません。

project.yaml

project.yamlのprotobufdataを設定すると、Protocol Buffersのデータをレスポンスすることができます。

protobuf.root

protoファイルのルートディレクトリです。プロジェクトルートからの相対パスを指定します。

protobuf:
  root: ./protobuf

protobuf.api (任意)

ルートディレクトリにAPIのサブディレクトリを用意しているような場合、apiPrefixを定義しておくと/apiをつけてリクエストする必要がなくなります。

protobuf:
  root: ./protobuf
  apiPrefix: /api

data.root

Protocol Buffersデータのルートディレクトリです。プロジェクトルートからの相対パスを指定します。

protobuf:
  root: ./protobuf
  apiPrefix: /api

data:
  root: ./data

protoファイルとデータファイルの紐付け

protoファイルとデータファイルを同じ階層に配置することで紐付けられます。

proto_root/path1/test.proto -> data_root/path1/test.yaml

protoデータファイル

基本的に、protoデータファイルの仕様はJSON APIのデータファイルと同じです。protoデータファイルでは、JSON APIのデータファイル仕様に加えて以下の特殊仕様があります。

__type

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
Clone this wiki locally