Merge 2 'query' end points in NCMP
[cps.git] / cps-ncmp-rest / docs / openapi / components.yaml
1 #  ============LICENSE_START=======================================================
2 #  Copyright (C) 2021-2022 Nordix Foundation
3 #  Modifications Copyright (C) 2021 Pantheon.tech
4 #  Modifications Copyright (C) 2022 Bell Canada
5 #  ================================================================================
6 #  Licensed under the Apache License, Version 2.0 (the "License");
7 #  you may not use this file except in compliance with the License.
8 #  You may obtain a copy of the License at
9 #
10 #        http://www.apache.org/licenses/LICENSE-2.0
11 #
12 #  Unless required by applicable law or agreed to in writing, software
13 #  distributed under the License is distributed on an "AS IS" BASIS,
14 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 #  See the License for the specific language governing permissions and
16 #  limitations under the License.
17 #
18 #  SPDX-License-Identifier: Apache-2.0
19 #  ============LICENSE_END=========================================================
20
21 components:
22   schemas:
23     # Common Schemas
24     ErrorMessage:
25       type: object
26       title: Error
27       properties:
28         status:
29           type: string
30         message:
31           type: string
32         details:
33           type: string
34     # DMI Server Exception Schema
35     DmiErrorMessage:
36       title: DMI Error Message
37       type: object
38       properties:
39         message:
40           type: string
41           example: "Bad Gateway Error Message NCMP"
42         dmi-response:
43           type: object
44           properties:
45             http-code:
46               type: integer
47               example: 400
48             body:
49               type: string
50               example: Bad Request
51     # Request Schemas
52     RestDmiPluginRegistration:
53       type: object
54       properties:
55         dmiPlugin:
56           type: string
57           example: my-dmi-plugin
58           default: ""
59         dmiDataPlugin:
60           type: string
61           example: my-dmi-data-plugin
62           default: ""
63         dmiModelPlugin:
64           type: string
65           example: my-dmi-model-plugin
66           default: ""
67         createdCmHandles:
68           type: array
69           items:
70             $ref: '#/components/schemas/RestInputCmHandle'
71         updatedCmHandles:
72           type: array
73           items:
74             $ref: '#/components/schemas/RestInputCmHandle'
75             example:
76               cmHandle: my-cm-handle
77               cmHandleProperties:
78                 add-my-property: add-property
79                 update-my-property: updated-property
80                 delete-my-property: '~'
81               publicCmHandleProperties:
82                 add-my-property: add-property
83                 update-my-property: updated-property
84                 delete-my-property: '~'
85         removedCmHandles:
86           type: array
87           items:
88             type: string
89           example: [my-cm-handle1, my-cm-handle2, my-cm-handle3]
90     DmiPluginRegistrationErrorResponse:
91       type: object
92       properties:
93         failedCreatedCmHandles:
94           type: array
95           items:
96             $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
97         failedUpdatedCmHandles:
98           type: array
99           items:
100             $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
101         failedRemovedCmHandles:
102           type: array
103           items:
104             $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
105     CmHandlerRegistrationErrorResponse:
106       type: object
107       properties:
108         cmHandle:
109           type: string
110           example: my-cm-handle
111         errorCode:
112           type: string
113           example: '00'
114         errorText:
115           type: string
116           example: 'Unknown error. <error-details>'
117
118     RestInputCmHandle:
119       required:
120         - cmHandle
121       type: object
122       properties:
123         cmHandle:
124           type: string
125           example: my-cm-handle
126         cmHandleProperties:
127             $ref: '#/components/schemas/RestCmHandleProperties'
128         publicCmHandleProperties:
129             $ref: '#/components/schemas/RestCmHandleProperties'
130     RestCmHandleProperties:
131         type: object
132         additionalProperties:
133             type: string
134             example: my-property
135
136     #Response Schemas
137     RestModuleReference:
138       type: object
139       title: Module reference details
140       properties:
141         moduleName:
142           type: string
143           example: my-module-name
144         revision:
145           type: string
146           example: my-module-revision
147
148     CmHandleQueryParameters:
149       type: object
150       title: Cm Handle query parameters for executing cm handle search
151       properties:
152         cmHandleQueryParameters:
153           type: array
154           items:
155             type: object
156             $ref: '#/components/schemas/ConditionProperties'
157         conditions:
158           deprecated: true
159           type: array
160           items:
161             type: object
162             $ref: '#/components/schemas/OldConditionProperties'
163           description: not necessary, it is just for backward compatibility
164       example:
165         cmHandleQueryParameters:
166           - conditionName: hasAllModules
167             conditionParameters:
168               - { "moduleName": "my-module-1" }
169               - { "moduleName": "my-module-2" }
170               - { "moduleName": "my-module-3" }
171           - conditionName: hasAllProperties
172             conditionParameters:
173               - { "Color": "yellow" }
174               - { "Shape": "circle" }
175               - { "Size": "small" }
176     ConditionProperties:
177       properties:
178         conditionName:
179           type: string
180         conditionParameters:
181           type: array
182           items:
183             type: object
184             additionalProperties:
185               type: string
186     OldConditionProperties:
187       deprecated: true
188       properties:
189         name:
190           type: string
191         conditionParameters:
192           type: array
193           items:
194             type: object
195             $ref: '#/components/schemas/ModuleNameAsJsonObject'
196     ModuleNameAsJsonObject:
197       properties:
198         moduleName:
199           type: string
200           example: my-module
201
202     RestOutputCmHandle:
203       type: object
204       title: CM handle Details
205       properties:
206         cmHandle:
207           type: string
208           example: my-cm-handle1
209         publicCmHandleProperties:
210           $ref: '#/components/schemas/CmHandlePublicProperties'
211         state:
212           $ref: '#/components/schemas/RestOutputCmHandleState'
213     CmHandlePublicProperties:
214       type: array
215       items:
216         type: object
217         additionalProperties:
218           type: string
219           example: Book Type
220     RestOutputCmHandleState:
221       type: object
222       properties:
223         cmHandleState:
224           type: string
225           example: ADVISED
226         lockReason:
227           $ref: '#/components/schemas/lock-reason'
228         lastUpdateTime:
229           type: string
230           example: 2022-12-31T20:30:40.000+0000
231         dataSyncEnabled:
232           type: boolean
233           example: false
234         dataSyncState:
235           $ref: '#/components/schemas/dataStores'
236
237     lock-reason:
238       type: object
239       properties:
240         reason:
241           type: string
242           example: LOCKED_OTHER
243         details:
244           type: string
245           example: locked due to module sync
246
247     dataStores:
248       type: object
249       properties:
250         operational:
251           $ref: '#/components/schemas/sync-state'
252         running:
253           $ref: '#/components/schemas/sync-state'
254
255     sync-state:
256       type: object
257       properties:
258         state:
259           type: string
260           example: NONE_REQUESTED
261         lastSyncTime:
262           type: string
263           example: 2022-12-31T20:30:40.000+0000
264
265     RestOutputCmHandlePublicProperties:
266       type: object
267       properties:
268         publicCmHandleProperties:
269           $ref: '#/components/schemas/CmHandlePublicProperties'
270
271   examples:
272     dataSampleRequest:
273         summary: Sample request
274         description: Sample request body
275         value:
276           test:bookstore:
277             bookstore-name: Chapters
278             categories:
279               - code: '01'
280                 name: SciFi
281                 books:
282                 - authors:
283                     - Iain M. Banks
284                     - Ursula K. Le Guin
285               - code: '02'
286                 name: kids
287                 books:
288                 - authors:
289                     - Philip Pullman
290
291     dataSamplePatchRequest:
292       summary: Sample patch request
293       description: Sample patch request body
294       value:
295         ietf-restconf:yang-patch:
296           patch-id: patch-1
297           edit:
298             - edit-id: edit1
299               operation: merge
300               target: /
301               value:
302                 test:bookstore:
303                   bookstore-name: Chapters
304                   categories:
305                     - code: '01'
306                       name: Science
307                       books:
308                         - authors:
309                             - Author1
310                             - Author2
311                     - code: '02'
312                       name: Arts
313                       books:
314                         - authors:
315                             - Author3
316             - edit-id: edit2
317               operation: merge
318               target: /
319               value:
320                 test:bookstore:
321                   bookstore-name: Novels
322                   categories:
323                     - code: '03'
324                       name: History
325                       books:
326                         - authors:
327                             - Iain M. Banks
328                             - Ursula K. Le Guin
329                     - code: '04'
330                       name: Fiction
331                       books:
332                         - authors:
333                             - Philip Pullman
334
335     dataSampleResponse:
336         summary: Sample response
337         description: Sample response for selecting 'sample 1'.
338         value:
339           bookstore:
340             categories:
341               - code: '01'
342                 books:
343                   - authors:
344                       - Iain M. Banks
345                       - Ursula K. Le Guin
346                 name: SciFi
347               - code: '02'
348                 books:
349                   - authors:
350                       - Philip Pullman
351                 name: kids
352
353   parameters:
354     cmHandleInPath:
355       name: cm-handle
356       in: path
357       description: The identifier for a network function, network element, subnetwork or any other cm object by managed Network CM Proxy
358       required: true
359       schema:
360         type: string
361         example: my-cm-handle
362     xpathInQuery:
363       name: xpath
364       in: query
365       description: xpath
366       required: false
367       schema:
368         type: string
369         default: /
370     requiredXpathInQuery:
371       name: xpath
372       in: query
373       description: xpath
374       required: true
375       schema:
376         type: string
377     includeDescendantsOptionInQuery:
378       name: include-descendants
379       in: query
380       description: include-descendants
381       required: false
382       schema:
383         type: boolean
384         default: false
385     cpsPathInQuery:
386       name: cps-path
387       in: query
388       description: cps-path
389       required: false
390       schema:
391         type: string
392         default: /
393     resourceIdentifierInQuery:
394       name: resourceIdentifier
395       in: query
396       description: The format of resource identifier depend on the associated DMI Plugin implementation. For ONAP DMI Plugin it will be RESTConf paths but it can really be anything.
397       required: true
398       allowReserved: true
399       schema:
400         type: string
401       examples:
402         sample 1:
403           value:
404             resourceIdentifier: \shops\bookstore
405         sample 2:
406           value:
407             resourceIdentifier: \shops\bookstore\categories[@code=1]
408         sample 3:
409           value:
410             resourceIdentifier: parent=shops,child=bookstore
411     optionsParamInQuery:
412       name: options
413       in: query
414       description: options parameter in query, it is mandatory to wrap key(s)=value(s) in parenthesis'()'. The format of options parameter depend on the associated DMI Plugin implementation.
415       required: false
416       schema:
417         type: string
418       allowReserved: true
419       examples:
420         sample 1:
421           value:
422             options: (depth=3)
423         sample 2:
424           value:
425             options: (fields=book)
426         sample 3:
427           value:
428             options: (depth=2,fields=book/authors)
429     topicParamInQuery:
430       name: topic
431       in: query
432       description: topic parameter in query.
433       required: false
434       schema:
435         type: string
436       allowReserved: true
437       examples:
438         sample 1:
439           value:
440             topic: my-topic-name
441     contentParamInHeader:
442       name: Content-Type
443       in: header
444       required: false
445       description: Content parameter for request, if content parameter is null, default value is application/json.
446       schema:
447         type: string
448         default: application/json
449         example: application/yang-data+json
450
451   responses:
452     NotFound:
453       description: The specified resource was not found
454       content:
455         application/json:
456           schema:
457             $ref: '#/components/schemas/ErrorMessage'
458           example:
459             status: 400
460             message: Not found error message
461             details: Not found error details
462     Unauthorized:
463       description: Unauthorized
464       content:
465         application/json:
466           schema:
467             $ref: '#/components/schemas/ErrorMessage'
468           example:
469             status: 401
470             message: Unauthorized error message
471             details: Unauthorized error details
472     Forbidden:
473       description: Forbidden
474       content:
475         application/json:
476           schema:
477             $ref: '#/components/schemas/ErrorMessage'
478           example:
479            status: 403
480            message: Forbidden error message
481            details: Forbidden error details
482     BadRequest:
483       description: Bad Request
484       content:
485         application/json:
486           schema:
487             $ref: '#/components/schemas/ErrorMessage'
488           example:
489            status: 400 BAD_REQUEST
490            message: Bad request error message
491            details: Bad request error details
492     Conflict:
493       description: Conflict
494       content:
495         application/json:
496           schema:
497             $ref: '#/components/schemas/ErrorMessage'
498           example:
499            status: 409 CONFLICT
500            message: Conflict error message
501            details: Conflict error details
502     NotImplemented:
503       description: The given path has not been implemented
504       content:
505         application/json:
506           schema:
507             $ref: '#/components/schemas/ErrorMessage'
508           example:
509            status: 501
510            message: Not implemented error message
511            details: Not implemented error details
512     Ok:
513       description: OK
514       content:
515         application/json:
516           schema:
517             type: object
518     Created:
519       description: Created
520       content: {}
521     NoContent:
522       description: No Content
523       content: {}
524     InternalServerError:
525       description: Internal Server Error
526       content:
527         application/json:
528           schema:
529             $ref: "#/components/schemas/ErrorMessage"
530           example:
531             status: 500
532             message: Internal Server Error
533             details: Internal Server Error occurred
534     BadGateway:
535       description: Bad Gateway
536       content:
537         application/json:
538           schema:
539             $ref: "#/components/schemas/DmiErrorMessage"
540           example:
541             message: "Bad Gateway Error Message NCMP"
542             dmi-response:
543               http-code: 400
544               body: "Bad Request"