-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopenapi.yaml
283 lines (278 loc) · 7.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
openapi: 3.0.3
info:
title: API for the car database
description: Specification of an API for a car database. Supports user authentication, and all CRUD operations on a Car model.
version: 0.1.11
servers:
- url: http://localhost:3000/api/v1
tags:
- name: Health
- name: User
- name: Car
paths:
/health/live:
get:
tags:
- Health
summary: API health status
description: A check for API availability
responses:
'200':
description: API is available
/health/db:
get:
tags:
- Health
summary: Database health status
description: A check for the database availability
responses:
'200':
description: Database is available
'503':
description: Database is unavailable
/user/auth:
post:
tags:
- User
summary: User authentication
description: Authenticate user by login and password
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserCredentials'
responses:
'200':
description: Successful authentication
content:
application/json:
schema:
type: object
properties:
token:
type: string
'404':
description: User with specified credentials not found
'500':
description: Internal server error
/cars:
post:
tags:
- Car
summary: Add a car
description: Create a car with a specified brand, model, year and price
security:
- jwt: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Car'
responses:
'201':
description: Successful creation of a new car
content:
application/json:
schema:
$ref: "#/components/schemas/Car"
'401':
$ref: '#/components/responses/AuthorizationError'
'422':
$ref: '#/components/responses/ValidationError'
'500':
description: Internal server error
get:
tags:
- Car
summary: Get cars list
description: Get all cars with sorting applied by car brand, model, year and price
security:
- jwt: []
parameters:
- name: sort
in: query
description: Name of car model field to sort by
required: false
schema:
type: string
enum:
- brand
- model
- year
- price
- name: direction
in: query
description: Direction to sort by
required: false
schema:
type: string
enum:
- asc
- desc
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Car"
'401':
$ref: '#/components/responses/AuthorizationError'
'500':
description: Internal server error
/cars/{_id}:
put:
tags:
- Car
summary: Update a car
description: Update info on a specified car
security:
- jwt: []
parameters:
- name: _id
in: path
required: true
description: An id of a car to update.
schema:
type: string
example: 507f1f77bcf86cd799439011
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Car'
responses:
'200':
description: Successful update
content:
application/json:
schema:
$ref: "#/components/schemas/Car"
'401':
$ref: '#/components/responses/AuthorizationError'
'404':
description: Car with a specified id not found
'422':
$ref: '#/components/responses/ValidationError'
'500':
description: Internal server error
delete:
tags:
- Car
summary: Delete a car
description: Delete a document for a car of a specified id
security:
- jwt: []
parameters:
- name: _id
in: path
required: true
description: An id of a car to delete.
schema:
type: string
example: 507f1f77bcf86cd799439011
responses:
'204':
description: Successful deletion
'401':
$ref: '#/components/responses/AuthorizationError'
'404':
description: Car with a specified id not found
'500':
description: Internal server error
components:
securitySchemes:
jwt:
type: http
scheme: bearer
bearerFormat: JWT
schemas:
UserCredentials:
type: object
required:
- email
- password
properties:
email:
type: string
example: user@example.com
password:
type: string
example: P4ssword!
Car:
type: object
required:
- brand
- model
- year
- price
properties:
_id:
type: string
example: 507f1f77bcf86cd799439011
brand:
type: string
example: Nissan
model:
type: string
example: Qashqai
year:
type: number
example: 2019
price:
type: number
example: 1700000
BaseError:
type: object
properties:
path:
type: string
example: /api/v1/some/path
timestamp:
type: number
example: 1519211811670
message:
type: string
example: base_error
AuthorizationError:
allOf:
- $ref: '#/components/schemas/BaseError'
- type: object
properties:
message:
example: authorization_failure
ValidationError:
allOf:
- $ref: '#/components/schemas/BaseError'
- type: object
properties:
message:
example: validation_failure
details:
type: array
items:
type: object
properties:
field:
type: string
example: property_name
message:
type: string
example: Field 'property_name' is required.
responses:
AuthorizationError:
description: Access token is missing or invalid
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorizationError'
ValidationError:
description: Some of required fields are missing or have invalid values
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'