gRPCのprotoファイルをいくつか書いたのでメモまでに。
通信方式は全てServer Streaming RPCです。
スポンサードサーチ
例1
ユーザー情報を返すAPI
id指定でidに一致したユーザー情報が返ってくるもの。
{
  "id": 1,
  "name": "太郎"
}syntax = "proto3";
package users;
service users {
  rpc GetUserInfo (GetUserInfoRequest) returns (stream GetUserInfoResponse) {};
}
message GetUserInfoRequest {
  int32 id = 1;
}
message GetUserInfoResponse {
  int32 id = 1
  string name = 2;
}例2
ユーザー一覧を返すAPI
nameで検索できるものとする。
{
  "users": [
    {
      "id": 1,
      "name": "太郎"
    },
    {
      "id": 2,
      "name": "次郎"
    },
    ......,
  ]
}syntax = "proto3";
package users;
service users {
  rpc GetUsers (GetUsersRequest) returns (stream GetUsersResponse) {};
}
message GetUsersRequest {
  string name = 1;
}
message GetUsersResponse {
  message Users {
    int32 id = 1
    string name = 2;
  }
  repeated Users users = 1;
}例3
グループ情報
所属するユーザー一覧が紐づく。
所属するユーザーがいなければ空。
{
  "groups" : [
    {
      "groupName": "A",
      "users": [
        {
          "id": 1,
          "name": "太郎"
        },
        {
          "id": 2,
          "name": "次郎"
        }
      ]
    },
    {
      "groupName": "B",
      "users": []
    },
    ......,
  ]
}syntax = "proto3";
package groups;
service users {
  rpc GetGroups (GetGroupsRequest) returns (stream GetGroupsResponse) {};
}
message GetGroupsRequest {
  string groupName = 1;
}
message GetGroupsResponse {
  message Groups {
    message Users {
      int32 id = 1
      string name = 2;
    }
    string groupName = 1
    repeated Users users = 2;
  }
  repeated Groups groups = 1;
}