-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathopenapi.yaml
299 lines (287 loc) · 8.28 KB
/
openapi.yaml
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
---
openapi: "3.0.0"
info:
version: 1.0.0
title: Topographer
description: A lenient IP geolocation service
contact:
name: Sergey Arkhipov
email: nineseconds@yandex.ru
url: https://github.com/9seconds/topographer
license:
name: MIT
url: https://github.com/9seconds/topographer/blob/master/LICENSE
paths:
/:
get:
description: >
Resolve IP geolocation of the caller. This is done based on
http.Request.RemoteAddr so please check golang's documentation
on how this field is populated. All providers are used.
operationId: getSelf
responses:
"200":
description: Results of resolved geolocation
content:
application/json:
schema:
type: object
required:
- result
additionalProperties: false
properties:
result:
$ref: "#/components/schemas/GeolocationResult"
default:
description: Error response in case if geolocation is impossible
content:
application/json:
schema:
$ref: "#/components/schemas/ResponseError"
post:
description: >
Resolve IP geolocation of given IP addresses with a chosen
set of providers.
operationId: postIPs
requestBody:
description: IPs to resolve
required: true
content:
application/json:
schema:
type: object
required:
- ips
additionalProperties: false
properties:
ips:
title: A list of IPs to resolve
minItems: 1
items:
$ref: "#/components/schemas/IP"
providers:
title: Codes of providers to use
type: array
items:
$ref: "#/components/schemas/ProviderName"
responses:
"200":
description: Results of resolved geolocation
content:
application/json:
schema:
type: object
required:
- results
additionalProperties: false
properties:
results:
type: array
minItems: 1
items:
$ref: "#/components/schemas/GeolocationResult"
default:
description: Error response in case if geolocation is impossible
content:
application/json:
schema:
$ref: "#/components/schemas/ResponseError"
/{ip}:
get:
description: Resolve a single IP address
operationId: getIP
parameters:
- in: path
name: ip
required: true
description: IP address to resolve
schema:
$ref: "#/components/schemas/IP"
responses:
"200":
description: Results of resolved geolocation
content:
application/json:
schema:
type: object
required:
- result
additionalProperties: false
properties:
result:
$ref: "#/components/schemas/GeolocationResult"
default:
description: Error response in case if geolocation is impossible
content:
application/json:
schema:
$ref: "#/components/schemas/ResponseError"
/stats:
get:
description: Different statistics on provider usage
operationId: getStats
responses:
"200":
description: Statistics
content:
application/json:
schema:
type: object
required:
- results
additionalProperties: false
properties:
results:
type: array
items:
$ref: "#/components/schemas/StatsResult"
default:
description: Error response in case if something went wrong
content:
application/json:
schema:
$ref: "#/components/schemas/ResponseError"
components:
schemas:
GeolocationResult:
title: Geolocation result
type: object
required:
- ip
- country
- city
- details
additionalProperties: false
properties:
ip:
$ref: "#/components/schemas/IP"
country:
title: Information about country
type: object
required:
- alpha2_code
- alpha3_code
- common_name
- official_name
additionalProperties: false
properties:
alpha2_code:
$ref: "#/components/schemas/Alpha2Code"
alpha3_code:
title: ISO3166 3-letter country code
type: string
anyOf:
- minLength: 3
maxLength: 3
- maxLength: 0
example: RUS
common_name:
title: A common name we use in talks
type: string
example: Russia
official_name:
title: A name of the country in official papers
type: string
example: Russian Federation
city:
$ref: "#/components/schemas/City"
details:
title: Additional information about votes made by all providers
type: array
items:
type: object
required:
- provider_name
- country_code
- city
additionalProperties: false
properties:
provider_name:
$ref: "#/components/schemas/ProviderName"
country_code:
$ref: "#/components/schemas/Alpha2Code"
city:
$ref: "#/components/schemas/City"
IP:
title: IP address to resolve
type: string
anyOf:
- format: ipv4
minLength: 7
maxLength: 15
- format: ipv6
minLength: 2
maxLength: 36
example: 80.81.82.83
ProviderName:
type: string
minLength: 1
example: maxmind_lite
Alpha2Code:
title: ISO3166 2-letter country code
type: string
anyOf:
- minLength: 2
maxLength: 2
- maxLength: 0
example: RU
City:
title: A name of the city where this IP is operated
type: string
example: Moscow
StatsResult:
type: object
required:
- provider_name
- last_updated
- last_used
- success_count
- failure_count
additionalProperties: false
properties:
provider_name:
$ref: "#/components/schemas/ProviderName"
last_updated:
title: A unix timestamp of time when provider was updated last time
type: integer
minimum: 0
example: 123233423
last_used:
title: A unix timestamp of time when provider was used last time
type: integer
minimum: 0
example: 2347283913
success_count:
title: >
A number of times when provider lookup was finished successfully
type: integer
minimum: 0
example: 100
failure_count:
title: A number of times when provider lookup was failed
type: integer
minimum: 0
example: 100
ResponseError:
title: A common structure for all errors produced by topographer
type: object
required:
- error
additionalProperties: false
properties:
error:
type: object
required:
- message
- context
additionalProperties: false
properties:
message:
title: A desciption why this error has happened
type: string
minLength: 1
context:
title: >
Some optional context text which helps to understand a
reason better.
type: string