/
02-ajiting.proto
165 lines (147 loc) · 4.65 KB
/
02-ajiting.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
syntax = "proto3";
import "google/api/annotations.proto";
import "protoc-gen-swagger/options/annotations.proto";
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
info: {
title: "ajiting-api";
description: "ajiting 用の Web API です。";
version: "1.0";
}
host: "api.ajiting.example.com";
schemes: HTTPS;
security_definitions: {
security: {
key: "OAuth2";
value: {
type: TYPE_OAUTH2;
flow: FLOW_ACCESS_CODE;
authorization_url: "https://ajiting.example.com/oauth/authorize";
token_url: "https://ajiting.example.com/oauth/token";
}
}
}
security: {
security_requirement: {
key: "OAuth2";
value: {
};
}
}
responses: {
key: "403";
value: {
description: "リソースへのアクセス権がない場合のレスポンスです。";
schema: {
json_schema: {
ref: ".ErrorResponse";
}
}
}
}
responses: {
key: "404";
value: {
description: "リソースが見つからなかったときのレスポンスです。";
schema: {
json_schema: {
ref: ".ErrorResponse";
}
}
}
}
};
// エラーレスポンスオブジェクト
//
// [RFC7807](https://tools.ietf.org/html/rfc7807) に従ってエラーの内容を表します。
message ErrorResponse {
string type = 1;
int32 status = 2;
string title = 3;
string detail = 4;
string instance = 5;
}
// ajiting を表現するオブジェクト
//
// ajiting の緯度経度情報や、どのような ajiting がおこなわれるか、何が free なのかを表します。
message Ajiting {
// 緯度経度情報
//
// 世界測地系 (WGS84) における緯度経度情報を表します。
// 日本測地系 2000 や 日本測地系 2011 などの他の測地系の値は受け容れませんので、
// 事前に変換をおこなっておく必要があります。
message GeoCoordinate {
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = {
json_schema: {
required: ["latitude", "longitude"]
}
};
// 緯度
//
// 世界測地系 (WGS84) における緯度情報を表します。
string latitude = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {pattern: "^[\\-]?[0-9]{0,2}\\.[0-9]+$"}];
// 経度
//
// 世界測地系 (WGS84) における経度情報を表します。
string longitude = 2 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {pattern: "^[\\-]?[0-9]{0,3}\\.[0-9]+$"}];
}
// ajiting の説明
string description = 1;
// ajiting の URL
string url = 2;
// ajiting がおこなわれる場所
GeoCoordinate location = 3;
// 何が free な ajiting か
repeated string free = 5;
}
// ajiting を返すためのレスポンス
//
// T シャツの裏に印字されているように #ajiting をキーとする `Ajiting` を返します
message AjitingResponse {
Ajiting ajiting_message = 1 [json_name = "#ajiting"];
}
// ajiting 一覧取得用リクエスト
message ListAjitingRequest {
// 希望する ajiting の条件を指定するための検索クエリ
string query = 1;
}
// ajiting 一覧取得用レスポンス
message ListAjitingResponse {
// 該当する ajiting の件数
int32 num = 1;
// 該当する ajiting の一覧
repeated AjitingResponse ajitings = 2;
}
// ajiting 更新要リクエスト
message UpdateAjitingRequest {
// 更新する ajiting の ID
int32 id = 1;
// 更新する ajiting オブジェクトの内容
Ajiting ajiting = 2;
}
service AjitingService {
// みんなの #ajiting を一覧する
//
// みんながそれぞれに思う #ajiting を一覧します。
// query が指定されている場合はその条件に従った #ajiting を絞り込みます。
rpc ListAjiting(ListAjitingRequest) returns (ListAjitingResponse) {
option (google.api.http).get = "/v1/ajiting";
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = {
security: {};
responses: {
key: "404";
value: {
description: "指定した条件に当てはまる ajiting がなかった場合に返すレスポンスです。";
}
};
};
}
// #ajiting を更新する
//
// 指定した内容によって #ajiting を更新します。
rpc UpdateAjiting(UpdateAjitingRequest) returns (AjitingResponse) {
option (google.api.http) = {
put: "/v1/ajiting/{id}"
body: "ajiting"
};
}
}