Newer
Older
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
300
301
302
303
304
305
306
307
308
309
310
311
312
313
openapi: 3.0.3
info:
title: 'Examples for RESTful API guide'
version: '1.0.0'
externalDocs:
# Reference to the base document
description: 'ETSI ES 203 647 ...'
url: 'https://rest.etsi.org'
paths:
# Resource path relative to server, parameters in curly braces
/resource/{id}:
# Method
get:
# Unique case-sensitive identifier
operationId: getResource
# Grouping
tags:
- Resource management
summary: 'Read a resource'
description: 'Read full contents of a resource with specific ID'
parameters:
# Parameter name used as the key in associative array of parameters
- name: 'id'
# The location of parameter: path, query, header or cookie
in: path
required: true
description: 'Resource ID'
schema:
# Primitive type
type: string
responses:
# Response code
200:
description: The requested resource
# Custom headers
headers:
ETag:
# Reference to (reusable) header definition
$ref: '#/components/headers/ETag'
# Response body
content:
application/json:
schema:
$ref: '#/components/schemas/ResourceData'
401:
# Reference to (reusable) response definition
$ref: '#/components/responses/401'
404:
$ref: '#/components/responses/404'
/resource:
# POST JSON object
post:
# Info excluded
operationId: postResource
summary: Create new resource
parameters:
# Reference to (reusable) parameter definition
- $ref: '#/components/parameters/resourceId'
# Reference to (reusable) header definition
- $ref: '#/components/parameters/Version'
requestBody:
description: 'Data for new resource'
required: true
content:
# Content media type (Content-Type header value)
application/json:
schema:
# Reference to data type
$ref: '#/components/schemas/ResourceData'
responses:
204:
# Reference to data type
$ref: '#/components/responses/204'
'/resource/{id}/file':
# Upload a resource file
put:
# Info excluded
operationId: uploadResourceFile
summary: Upload a file for a resource
parameters:
- $ref: '#/components/parameters/resourceId'
requestBody:
description: 'An image file to be attached to the resource'
content:
multipart/form-data:
schema:
type: object
properties:
# Property name (also the name applied to content disposition)
file:
type: string
# Sets content type to application/octet-stream
format: binary
encoding:
# Applies custom encoding to "file" property
file:
# Override default content type
contentType: image/png
responses:
204:
$ref: '#/components/responses/204'
# Example search path /search?text=rest&max=5
'/search':
get:
summary: 'Search resource'
# Description excluded
operationId: searchResource
parameters:
- name: 'text'
in: query
required: true
description: 'Text to search for'
schema:
type: string
- name: 'max'
in: query
# Optional parameter
required: false
description: 'Maximum number of results expected'
schema:
type: number
- name: 'page'
in: query
required: false
description: ''
schema:
type: number
responses:
200:
# TBD
description: 'The requested resource'
# Custom headers
headers:
ETag:
# Reference to (reusable) header definition
$ref: '#/components/headers/ETag'
# Response body
content:
application/json:
schema:
$ref: '#/components/schemas/SearchResults'
'/subscription':
post:
summary: 'Subscribe to authenticated notifications'
# Description excluded
operationId: subscribeNotifications
requestBody:
content:
application/json:
schema:
# Subscription containing callbackUrl property
$ref: '#/components/schemas/Subscription'
responses:
# Subscription was created
201:
$ref: '#/components/responses/201'
# Out-of-band notifications from server
callbacks:
# Named callback object (inline or reference)
auth:
# Local path used by server for callback(s)
'{$request.body#/callbackUrl}/incoming':
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AuthenticatedNotification'
responses:
204:
$ref: '#/components/responses/204'
401:
$ref: '#/components/responses/401'
/service:
get:
# Info excluded
operationId: getService
# Support for GET request is mandatory for API provider
x-etsi-provision: mandatory
parameters:
- name: 'circuitswitching'
in: query
required: false
schema:
type: string
x-etsi-capabilities:
# Parameter only applies to "3G" capability
- 3G
responses:
200:
description: 'The requested service'
content:
application/json:
schema:
type: object
properties:
speed:
type: string
enum:
- fast
- superfast
x-etsi-enum:
# Enum value "superfast" is optional and
# only applies to "4G" and "5G" capabilities
superfast:
required: false
x-etsi-capabilities:
- 4G
- 5G
# Optional definitions
security: []
components:
schemas:
# Name of data type
SearchResults:
# Array type
type: array
items:
# Type of array members, reference to ResourceData
$ref: '#/components/schemas/ResourceData'
# No more than 10 results
maxItems: 10
ResourceData:
# Structured type
type: object
properties:
# Property name
id:
# Property type
type: string
size:
type: string
enum:
# Set of allowed values
- big
- bigger
- biggerer
# Default value for non-required property
default: big
created:
# Date-time value encoded as string
type: string
format: date-time
required:
# Set of required properties
- id
Subscription:
type: object
properties:
credentials:
$ref: '#/components/schemas/Credentials'
AuthenticatedNotification:
type: object
Credentials:
type: object
properties:
user:
type: string
responses:
# Common responses with response code as identifier
201:
description: 'Created'
204:
description: 'No content'
401:
description: 'Unauthenticated'
404:
description: 'Not found'
headers:
Version:
description: 'API version'
required: true
schema:
type: string
# Definition of ETag header
ETag:
description: 'Identifier for a specific version of a resource'
schema:
type: string
parameters:
Version:
name: 'Version'
description: 'API version'
in: header
required: true
schema:
type: string
resourceId:
name: 'id'
in: path
required: true
description: 'Resource ID'
schema:
type: string
securitySchemes: {}
callbacks: {}
servers:
# Recommended structure for API paths
- url: '{apiRoot}/{apiName}/{apiMajorVersion}/'
variables:
apiRoot:
default: https://example.com
apiName:
description: Interface name from the base document
default: rest-api-guide
apiMajorVersion:
description: Major version of the API from the base document
default: v1
tags:
# Optional descriptions of tags
- name: Resource management
description: Operations for managing resources