-
Notifications
You must be signed in to change notification settings - Fork 43
/
Traffic_Influence.yaml
616 lines (563 loc) · 31.9 KB
/
Traffic_Influence.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
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
openapi: 3.0.3
############################################################################
# API info #
############################################################################
info:
title: OPAG-CAMARA Traffic Influence API
version: 0.9.3
description: |
## Overview
The reference scenario foresees a Service, composed by one or more Service Producers deployed in different geographical locations on Edge Cloud Zones (Edge datacentres of Telco Operator) or in Cloud. The Service Producer, deployed at the Edge, is referred as Edge Application Server (EAS).
An Edge Cloud Zone is a platform in the Telco Operator network, offering network, compute and storage resources to developers. A developer can deploy and run applications on an Edge Cloud Zone, meaning reduced latency to end users that are nearby, as the network path is shorter. A network operator's EdgeCloud may comprise multiple Edge Cloud Zones, each in a discrete location to bring latency benefits to end users across a country . The operator can help developers know which of the Edge Cloud Zones will bring the best performance benefit for a given end user and application
The Traffic Influence API (TI API) provides the fastest routing from the user Device (e.g. a Smartphone) to the optimal EAS instance in a specific geographical location, installed in an Edge Cloud Zone.
If a Service is offered by Cloud Instances and by Edge Instances, the TI API can be used get the optimal routing of the traffic to the Edge Instances, maybe for a set of users. Getting the optimal routing can be used to improve latency maybe in combination with other CAMARA APIs such as QoD (Quality On Demand). Providing the optimal routing is indeed an important step to get the optimal latency.
If the TI API is used to get the best routing at the Edge for a Device in a geographical location and the Device moves to another geographical location, the TI API can be invoked to get the optimal routing in the new geographical location for that Device.
## 1. Introduction
The TI API provides the capability to establish the best routing, in terms of latency, in a specific geographical area, between the user Device, e.g. the user’s smartphone, and the optimal EAS instance nearby. If the Device moves in a different geographical location where a more suitable EAS instance is available, the TI API can be invoked to influence the Device connectivity to get the optimal routing to the that local instance. It is important to notice that it is a task of the Application invoking the TI API to detect the changes in the Device location.
The generic architecture for the Service can foresee some Cloud instances of the Application, one or more Edge Instances of the Application. A component of the Service is the TI API Consumer. This logical component can be integrated in other components of the Service to invoke the TI API, creating a "TrafficInfluence" resource specifying the desired intent.
The TI API Producer implements the intent specified in the "TrafficInfluence" resource.
While the TI API can be invoked to activate the fastest routing for any user, it can also be used to request the best routing for a specific user. Invoking the TI API for each user, many "TrafficInfluence" resources are created for each user to provide the requested routing for a set of users.
The same approach is used for the geographical locations where the influence of the traffic must be applied. Invoking the TI API without specifying a geographical area activates the optimal routing toward any EAS instance, while invoking the TI API specifying a geographical area activates the optimal routing only toward the EAS instance located closest to that geographical area. To activate the optimal routing in selected geographical areas, the TI API must be invoked for each geographical area.
The TI API can be used to:
- optimise the routing when Devices need to consume the service provided by a local EAS Instances.
- effect an already established Device routing when the Device moves among different geographical locations. When the TI API consumer detects a Device has entered a geographical location where an EAS instance is available, it can invoke the TI API to get the optimal routing toward that EAS instance. If the Device moves to another geographical location, served by another EAS instance, the routing might not be optimal anymore for the new EAS instance. In the case the Application detects a location change, it can invoke the TI API again to request a new routing optimization toward the new EAS instance.
## 2. Quick Start
The usage of the TI API is based on the management of a "TrafficInfluence" resource, an object containing the intent requested invoking the TI API and that is implemented by the platform configuring the Mobile Network for the optimal routing toward the EAS instance.
The "TrafficInfluence" resource can be created (providing the related parameters that specify the desired intent), queried, modified and deleted.
The TI API is asynchronous, a notification is available providing information about the status of the requested resource.
For an Application (identified by "appId") many "TrafficInfluence" resources can be created, e.g. to add multiple users, regions or zones.
Before starting to use the TI API, the developer needs to know about the below specified details:
**Base-Url**
The RESTful TI API endpoint, for example [**https://tim-api.developer.tim.it/trafficinfluence**](https://tim-api.developer.tim.it/trafficinfluence)
**Authentication**
Configure security access keys such as OAuth 2.0 client credentials to be used by Client applications which will invoke the TI API.
**TrafficInfluence**
This object represents the resource that carries the requirements from the user to be implemented. The TI API is invoked for the life cycle management of this resource (CRUD). The resource contains the intents from the TI API Consumer. Managing this resource, the developer can specify in which geographical location the routing must be applied, toward which application, maybe for a specific set of users or for a limited period of time.
**trafficInfluenceID**
Identifier for the Traffic Influence resource. This parameter is returned by the TI API and must be used to update it (e.g., adding a Device or deleting it). A different Traffic Influence resource must be created for any Device or Zone or Region. All these resources are related to an Application identified by "appId".
**apiConsumerId**
Unique identifier for the TI API Consumer.
**region**
The developer can specify in which geographical area he requires the fastest routing toward the nearest application instance. A "region" is a wide geographical area and it contains one or more "zones". A "zone" is where the Edge Cloud Zone is located. Zones and Regions identifiers are defined and provided by the Telco Operator and can also be used or retrieved with other CAMARA APIs (“MEC Exposure & Experience Management API” and “Simple Edge Discovery”). To add more regions the TI API must be invoked (POST) for each region. New "TrafficInfluence" resources are created (with different "trafficInfluenceID"). All the created resources are aggregated by the Application (identified by "appId").
**zone**
The developer can specify in which geographical area he requires the fastest routing toward the nearest Application instance. A "zone" is a smaller geographical area inside a "region". A "zone" is where the Edge Cloud Zone is located. To add more zones the TI API must be invoked (POST) for each "zone". New "TrafficInfluence" resources are created (with different "trafficInfluenceID"). All the created resources are aggregated by the Application (identified by "appId").
**appId**
A globally unique identifier associated with the application. This identifier is provided during the application onboarding process. To influence the traffic toward a specific Application. It is the Operator Platform that detects the appropriate Application instance in the selected "region" or "zone".
**appInstanceId**
A globally unique identifier generated by the Operator Platform to identify a specific instance of the Application on a specific zone. To influence a traffic toward a specific Application instance.
**trafficFilters**
The Application can expose different service on different interfaces, with this parameter it is possible to enable just some of those services maybe for different sets of users.
**Device**
A user Device can be provided as an input. To add more users the TI API must be invoked (POST) of each user Device. New "TrafficInfluence" resources are created (with different "trafficInfluenceID"). All the created resources are aggregated by the Application (identified by "appId"). The routing toward the selected Application instance is only applied for provided user Devices.
**Notification URL and token**
Developers have a chance to specify call back URL on which notifications (e.g. session termination) regarding the session can be received from the service provider. This is also an optional parameter.
## 3. Authentication and Authorization
The TI API makes use of the client credentials grant which is applicable for server to server use cases involving trusted partners or clients without any protected user data involved.
In this method the TI API invoker client is registered as a confidential client with an authorization grant type of client\_credentials [2].
## 4. API Documentation
## 4.1 Details
The TI API is consumed by an Application Function (AF) requesting for the optimal routing, in term of latency, for the traffic flow from a Device toward EAS instances in Edge Cloud Zones.
When the Application (the EAS) is onboarded and deployed in the Edge Cloud Zones, the Application is identified with a unique identifier ("appId").
Using the application identifier ("appId") and specifying a Zone or a Region, the Telco Operator Platform, autonomously identifies the best instance of the EAS toward which routing the traffic flow and configures the Mobile Network accordingly to get the fastest routing.
If just the application identifier is used, the Telco Operator Platform identifies all the EAS Instances and activates the optimal routing on the Mobile Network.
If the optimal routing in term of latency should be available just for a set of users, the TI API must be invoked for each user creating a new TrafficInfluce resource for each one.
If the Application offers different services on different interfaces a traffic filter based on IP, Port and Protocol can be used. I this way it is also possible to redirect different users to different interfaces.
Here are some possible intents:
1) activate the optimal routing for any EAS instance: the TI API must be invoked with the "appId". The Telco Operator Platform identifies all the EAS instances and activates the optimal routing on the Mobile Network.
2) activate the optimal routing in a specific Region or Zone: the TI API must be invoked with the "appId" and the Zones and Regions identifiers.
3) activate the optimal routing for a user devices: the TI API can be invoked with a user Device identifier (“Device”). For each user Device, a TI API invocation is required.
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
contact:
email: project-email@sample.com
externalDocs:
description: Product documentation at Camara
url: https://github.com/camaraproject/
############################################################################
# Security #
############################################################################
security:
- oAuth2:
- 'edge:traffic-influences:read'
- 'edge:traffic-influences:write'
############################################################################
# Servers #
############################################################################
servers:
- url: "{apiRoot}/{basePath}"
variables:
apiRoot:
default: http://localhost:9091
description: API root
basePath:
default: ti/v0
description: Base path for the Traffic Influence API
############################################################################
# Tags #
############################################################################
tags:
- name: Traffic Influence API read
description: Reads existing TrafficInfluence resources
- name: Traffic Influence API write
description: Creates of modifies a TrafficInfluence resource
############################################################################
# Paths #
############################################################################
paths:
/traffic-influences:
get:
parameters:
- in: query
name: appId
schema:
$ref: "#/components/schemas/AppId"
description: Used to select traffic influence resources filtered by appId
tags:
- Traffic Influence API read
summary: Retries existing TrafficInfluence Resources
description: Reads all of the active TrafficInfluence resources owned by the same API Consumer authenticated via oAuth2
operationId: getTrafficInfluence
responses:
'200':
description: Returns the information about existing TrafficInfluence resources.
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/TrafficInfluence"
"401":
$ref: "#/components/responses/Generic401"
"403":
$ref: "#/components/responses/Generic403"
'500':
$ref: "#/components/responses/GenericError"
"503":
$ref: "#/components/responses/Generic503"
'504':
$ref: "#/components/responses/BackendConnTimeout"
post:
tags:
- Traffic Influence API write
summary: Creates a new TrafficInfluence resource
description: Takes as input an object containing the intents from the API Consumer and creates a TrafficInfluence resourse accordingly. The trafficInfluenceID parameter, that is part of the object, must not be valorized when creating a new resource. For this reason the trafficInfluenceID parameter must be avoided in the object, anyway it will be ignored by the API Producer. It is automatically generated by the system and returned in the response.
operationId: postTrafficInfluence
requestBody:
description: Describes the request body
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostTrafficInfluence'
responses:
'201':
description: TrafficInfluence resource created, the related object is returned with the resource ID (trafficInfluenceID) and status (state) valorised,
headers:
Location:
description: Link to the created traffic influence resource
schema:
type: string
description: Link to the created traffic influence resource
content:
application/json:
schema:
$ref: '#/components/schemas/TrafficInfluence'
"400":
$ref: "#/components/responses/Generic400"
'500':
$ref: '#/components/responses/GenericError'
'504':
$ref: '#/components/responses/BackendConnTimeout'
"401":
$ref: "#/components/responses/Generic401"
"403":
$ref: "#/components/responses/Generic403"
"503":
$ref: "#/components/responses/Generic503"
callbacks:
onTrafficInfluenceChanged:
$ref: "#/components/callbacks/onTrafficInfluenceChanged"
/traffic-influences/{trafficInfluenceID}:
parameters:
- name: trafficInfluenceID
in: path
description: Identifier of the specific TrafficInfluence resource to be retrieved, modified or deleted. It is the value used to fill trafficInfluenceID parameter
required: true
schema:
type: string
get:
tags:
- Traffic Influence API read
summary: Reads a specific TrafficInfluence resource identified by the trafficInfluenceID value
description: Returns a specific TrafficInfluence resources owned by the same API Consumer authenticated via oAuth2
operationId: getAllTrafficInfluences
responses:
'200':
description: OK.
content:
application/json:
schema:
$ref: '#/components/schemas/TrafficInfluence'
'404':
$ref: '#/components/responses/ResNotFound'
'500':
$ref: '#/components/responses/GenericError'
'504':
$ref: '#/components/responses/BackendConnTimeout'
"401":
$ref: "#/components/responses/Generic401"
"403":
$ref: "#/components/responses/Generic403"
"503":
$ref: "#/components/responses/Generic503"
patch:
tags:
- Traffic Influence API write
summary: updates a specific TrafficInfluence resource, identified by the trafficInfluenceID value
description: The resource identified by the trafficInfluenceID value can be modified
operationId: patchTrafficInfluence
requestBody:
description: Describes the request body
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchTrafficInfluence'
responses:
'200':
description: TrafficInfluence resource edited, the related object is returned, the status (state) is updated.
content:
application/json:
schema:
$ref: '#/components/schemas/TrafficInfluence'
headers:
Location:
description: Link to the created traffic influence resource
schema:
type: string
description: Link to the created traffic influence resource
"400":
$ref: "#/components/responses/Generic400"
'404':
$ref: '#/components/responses/ResNotFound'
'500':
$ref: '#/components/responses/GenericError'
'504':
$ref: '#/components/responses/BackendConnTimeout'
"401":
$ref: "#/components/responses/Generic401"
"403":
$ref: "#/components/responses/Generic403"
"503":
$ref: "#/components/responses/Generic503"
callbacks:
onTrafficInfluenceChanged:
$ref: "#/components/callbacks/onTrafficInfluenceChanged"
delete:
tags:
- Traffic Influence API write
summary: Delete an existing TrafficInfluence resource
description: invoked by the API Consumer to stop influencing the traffic, deleting a TrafficInfluence resource previously created
operationId: deleteTrafficInfluence
parameters:
- name: callbackUrl
in: query
required: false
description: |
the location where updated data will be sent. Must be network accessible
by the source server
schema:
type: string
format: uri
example: https://my-notification-server.com
responses:
'202':
$ref: '#/components/responses/OkDeletionInProgress'
'404':
$ref: '#/components/responses/ResNotFound'
'504':
$ref: '#/components/responses/BackendConnTimeout'
"401":
$ref: "#/components/responses/Generic401"
"403":
$ref: "#/components/responses/Generic403"
"503":
$ref: "#/components/responses/Generic503"
callbacks:
onTrafficInfluenceChanged:
$ref: "#/components/callbacks/onTrafficInfluenceChanged"
components:
securitySchemes:
oAuth2:
type: oauth2
description: This API uses OAuth 2 [More info](https://api.example.com/docs/auth)
flows:
clientCredentials:
tokenUrl: 'https://example.com/oauth/token'
scopes:
'edge:traffic-influences:read': Grant read-only traffic-influences data
'edge:traffic-influences:write': Grant write access to traffic-influences data
#######################################################
# EVENTS/CALLBACKS
#######################################################
callbacks:
onTrafficInfluenceChanged:
# when data is sent, it will be sent to the `callbackUrl` provided
# when making the subscription PLUS the suffix `/event`
'{$request.body.notificationUri}/event':
post:
tags:
- Traffic Influence CALLBACK Operation
summary: Provides a notifican channel for changes in the TrafficInfluence resource
description: Creating, modifying or delating a Traffic Influece resourece is an asycronous task. For this reason a notification channel via callback to a specified URL is provided.
operationId: postTrafficInfluence
requestBody:
description: subscription payload which contains the updated traffic influence instance
content:
application/json:
schema:
$ref: '#/components/schemas/TrafficInfluenceNotification'
responses:
'202':
description: |
Your server implementation should return this HTTP status code
if the data was received successfully
'204':
description: |
Your server should return this HTTP status code if no longer interested
in further updates
#######################################################
# RESOURCES
#######################################################
schemas:
TrafficInfluence:
description: Resource conteining the informations to influence the traffic from the device to the EAS
type: object
properties:
trafficInfluenceID:
type: string
description: Identifier for the Traffic Influence resource. This parameter is returned by the API and must be used to update it (e.g., adding new users or deleting it).
apiConsumerId:
type: string
description: Unique Identifier of the TI API Consumer.
appId:
$ref: '#/components/schemas/AppId'
appInstanceId:
$ref: '#/components/schemas/AppInstanceId'
region:
$ref: '#/components/schemas/TypesRegionId'
zone:
$ref: '#/components/schemas/TypesZoneId'
device:
$ref: '#/components/schemas/Device'
state:
type: string
description: it reports the state of the TrafficInfluence resource. When first invoked, the resource is 'ordered'. When the platforms prepares the resource, it is 'created'. When the new routing is enabled in the network, the state is 'active'. If an error occurs in the resource creation or in its activation, the state is 'error'. When the DELETE method is invoked the state is 'deletion in progress'. After the resource is deleted (as a consequence of the previous invokation of the DELETE method) the state is 'deleted'.
enum:
- 'ordered'
- 'created'
- 'active'
- 'error'
- 'deletion in progress'
- 'deleted'
trafficFilters:
type: array
items:
type: string
description: Indicates the packet filters of the IP flow. The source IP is not required. It is retrived by the platoform according to the TI API request. If no Traffic Influece resourse is created with a specific Device, any IP will be routed to the Application. If a Traffic Influece resource exists with a specific Device configured, only the related IPs will be routed to the local instance of the Application. The destination IP is not required, it is already known by the platform thanks to the appId and appInstanceId parameters that are used to retive the destination IP. The protocol must be specified and it is identified by a string according to the column “Keyword” as defined by IANA (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml), e.g. UDP or TCP. The destination port must be specified.
example: TCP 5060
minItems: 1
minItems: 1
description: Identifies IP packet filters. To be used when a the Application needs a traffic flow towards a specific EAS interface
notificationUri:
type: string
description: Defines the callback uri which should be notified in asynchronous way when the state for the requested resources changes (i.e. ordered to activated)
notificationAuthToken:
type: string
description: Authentification token for callback API
required:
- apiConsumerId
- appId
PatchTrafficInfluence:
description: inherits from TrafficInfluence and restricts the access to certain parameters. Only some paramter can be indeed modified with the PATCH operation.
allOf:
- $ref: "#/components/schemas/TrafficInfluence"
properties:
trafficInfluenceID:
readOnly: true
apiConsumerId:
readOnly: true
appId:
readOnly: true
state:
readOnly: true
PostTrafficInfluence:
allOf:
- $ref: "#/components/schemas/TrafficInfluence"
properties:
trafficInfluenceID:
readOnly: true
state:
readOnly: true
TrafficInfluenceNotification:
type: object
description: Notifican channel for changes in the TrafficInfluence resource
required:
- trafficInfluenceChanged
properties:
trafficInfluenceChanged:
$ref: "#/components/schemas/TrafficInfluence"
#######################################################
# TYPES
#######################################################
TypesZoneId:
description: |
Unique identifier representing a zone
type: string
additionalProperties: false
TypesRegionId:
description: |
Unique identifier representing a region
type: string
additionalProperties: false
Device:
type: object
minProperties: 1
properties:
phoneNumber:
$ref: "#/components/schemas/PhoneNumber"
networkAccessIdentifier:
$ref: "#/components/schemas/NetworkAccessIdentifier"
ipv4Address:
$ref: "#/components/schemas/Ipv4Address"
ipv6Address:
$ref: "#/components/schemas/Ipv6Address"
description: Device identifier
NetworkAccessIdentifier:
type: string
example: "123456789@domain.com"
description: identifier for the End User formatted as string, it cab be the user's email address
PhoneNumber:
type: string
pattern: '^\+?[0-9]{5,15}$'
example: "123456789"
description: Subscriber number in E.164 format (starting with country code). Optionally prefixed with '+'.
Ipv4Address:
type: string
format: ipv4
example: "192.168.0.1"
description: IP of the device. A single IPv4 address may be specified in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.
Ipv6Address:
type: string
format: ipv6
example: "2001:db8:85a3:8d3:1319:8a2e:370:7344"
description: IP of the device. A single IPv6 address, following IETF 5952 format, may be specified like 2001:db8:85a3:8d3:1319:8a2e:370:7344
AppInstanceId:
type: string
format: uuid
description: A globally unique identifier associated with a running instance of an application. OP generates this identifier.
AppId:
type: string
format: uuid
example: "6B29FC40-CA47-1067-B31D-00DD010662DA"
description: A globally unique identifier associated with the application. OP generates this identifier when the application is submitted over NBI.
######################################################
# RESPONSES
#######################################################
ErrResponse:
description: Responce feedback in case of errors
type: object
properties:
status:
description: status for the error
type: string
example: OK
message:
description: additional message for the error
type: string
example: OK
ErrorInfo:
description: Information in case of errors
type: object
required:
- code
- message
properties:
code:
type: string
description: Code given to this error
message:
type: string
description: Detailed error description
responses:
ResNotFound:
description: The specified resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrResponse'
example:
status: ERROR
message: Resource not found
GenericError:
description: An unknow error has occurred
content:
application/json:
schema:
$ref: '#/components/schemas/ErrResponse'
example:
status: ERROR
message: Generic error
BackendConnTimeout:
description: Connection timeout towards backend service has occurred
content:
application/json:
schema:
$ref: '#/components/schemas/ErrResponse'
example:
status: ERROR
message: Backend connection timeout
OkDeletionInProgress:
description: The resource delation request has been accepted
content:
application/json:
example:
status: OK
message: Accepted
Generic400:
description: Invalid input
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorInfo"
example:
code: INVALID_INPUT
message: "Schema validation failed at ..."
Generic401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorInfo"
example:
code: UNAUTHORIZED
message: "Authorization failed: ..."
Generic403:
description: Forbidden
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorInfo"
example:
code: FORBIDDEN
message: "Operation not allowed: ..."
Generic503:
description: Service unavailable
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorInfo"
example:
code: SERVICE_UNAVALIBLE
message: "Service unavailable"