From 2472e61ecf2f5ebf9c5e3ddcf9c2b66ab0d4219e Mon Sep 17 00:00:00 2001 From: JosephKeenan Date: Wed, 23 Jun 2021 14:15:52 +0100 Subject: CPS-401 Update Open API YAML with data types and example for output (cpsData) -added response for get data nodes based on dataspace and anchor -modified modelmapper jn DataRestControllerSpec to be Spy not Mock -when openapi.yaml is entered into https://editor.swagger.io/ it displays however locally it does not, This may be due to file segmentation but this is still unclear. -moved files from docs/openapi to src/main/resources/static as required for new swagger sprindoc Issue-ID: CPS-401 Change-Id: I45286530d9a9ca85b56c0a656a44675398a003f4 Signed-off-by: JosephKeenan --- cps-application/src/main/resources/application.yml | 5 + cps-rest/docs/openapi/components.yml | 207 ------------------- cps-rest/docs/openapi/cpsAdmin.yml | 222 --------------------- cps-rest/docs/openapi/cpsData.yml | 195 ------------------ cps-rest/docs/openapi/cpsQuery.yml | 42 ---- cps-rest/docs/openapi/openapi.yml | 77 ------- cps-rest/pom.xml | 7 +- cps-rest/src/main/resources/static/components.yml | 208 +++++++++++++++++++ cps-rest/src/main/resources/static/cpsAdmin.yml | 222 +++++++++++++++++++++ cps-rest/src/main/resources/static/cpsData.yml | 200 +++++++++++++++++++ cps-rest/src/main/resources/static/cpsQuery.yml | 42 ++++ cps-rest/src/main/resources/static/openapi.yml | 77 +++++++ 12 files changed, 760 insertions(+), 744 deletions(-) delete mode 100644 cps-rest/docs/openapi/components.yml delete mode 100644 cps-rest/docs/openapi/cpsAdmin.yml delete mode 100644 cps-rest/docs/openapi/cpsData.yml delete mode 100644 cps-rest/docs/openapi/cpsQuery.yml delete mode 100644 cps-rest/docs/openapi/openapi.yml create mode 100644 cps-rest/src/main/resources/static/components.yml create mode 100644 cps-rest/src/main/resources/static/cpsAdmin.yml create mode 100644 cps-rest/src/main/resources/static/cpsData.yml create mode 100644 cps-rest/src/main/resources/static/cpsQuery.yml create mode 100644 cps-rest/src/main/resources/static/openapi.yml diff --git a/cps-application/src/main/resources/application.yml b/cps-application/src/main/resources/application.yml index 1b62b02df5..ac620f6cb3 100644 --- a/cps-application/src/main/resources/application.yml +++ b/cps-application/src/main/resources/application.yml @@ -73,6 +73,11 @@ notification: enabled: false topic: ${CPS_CHANGE_EVENT_TOPIC:cps.cfg-state-events} +springdoc: + swagger-ui: + url: /openapi.yml + path: /swagger-ui/index.html + security: # comma-separated uri patterns which do not require authorization permit-uri: /manage/**,/swagger-ui/**,/swagger-resources/**,/v3/api-docs diff --git a/cps-rest/docs/openapi/components.yml b/cps-rest/docs/openapi/components.yml deleted file mode 100644 index 6543fcab6d..0000000000 --- a/cps-rest/docs/openapi/components.yml +++ /dev/null @@ -1,207 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= - -components: - schemas: - - AnchorDetails: - type: object - title: Anchor details by anchor Name - properties: - name: - type: string - example: my_anchor - dataspaceName: - type: string - example: my_dataspace - schemaSetName: - type: string - example: my_schema_set - - ErrorMessage: - type: object - title: Error - properties: - status: - type: string - example: 400 - message: - type: string - example: Dataspace not found - details: - type: string - example: Dataspace with name D1 does not exist. - - MultipartFile: - required: - - file - properties: - multipartFile: - type: string - description: multipartFile - format: binary - example: http://example.com/examples/example.yang - - ModuleReferences: - type: object - title: Module reference object - properties: - name: - type: string - example: module_reference_name - namespace: - type: string - example: module_reference_namespace - revision: - type: string - example: module_reference_revision - - SchemaSetDetails: - type: object - title: Schema set details by dataspace and schemasetName - properties: - dataspaceName: - type: string - example: my_dataspace - moduleReferences: - type: array - items: - $ref: '#/components/schemas/ModuleReferences' - name: - type: string - example: my_schema_set - - parameters: - dataspaceNameInQuery: - name: dataspace-name - in: query - description: dataspace-name - required: true - schema: - type: string - dataspaceNameInPath: - name: dataspace-name - in: path - description: dataspace-name - required: true - schema: - type: string - anchorNameInPath: - name: anchor-name - in: path - description: anchor-name - required: true - schema: - type: string - schemaSetNameInQuery: - name: schema-set-name - in: query - description: schema-set-name - required: true - schema: - type: string - schemaSetNameInPath: - name: schema-set-name - in: path - description: schema-set-name - required: true - schema: - type: string - anchorNameInQuery: - name: anchor-name - in: query - description: anchor-name - required: true - schema: - type: string - xpathInQuery: - name: xpath - in: query - description: xpath - required: false - schema: - type: string - default: / - requiredXpathInQuery: - name: xpath - in: query - description: xpath - required: true - schema: - type: string - cpsPathInQuery: - name: cps-path - in: query - description: cps-path - required: false - schema: - type: string - default: / - includeDescendantsOptionInQuery: - name: include-descendants - in: query - description: include-descendants - required: false - schema: - type: boolean - default: false - - responses: - NotFound: - description: The specified resource was not found - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Unauthorized: - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Forbidden: - description: Forbidden - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - BadRequest: - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Conflict: - description: Conflict - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorMessage' - Ok: - description: OK - content: - application/json: - schema: - type: object - Created: - description: Created - content: - text/plain: - schema: - type: string - NoContent: - description: No Content - content: {} diff --git a/cps-rest/docs/openapi/cpsAdmin.yml b/cps-rest/docs/openapi/cpsAdmin.yml deleted file mode 100644 index 35b2e4ca6a..0000000000 --- a/cps-rest/docs/openapi/cpsAdmin.yml +++ /dev/null @@ -1,222 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= - -dataspaces: - post: - description: Create a new dataspace - tags: - - cps-admin - summary: Create a dataspace - operationId: createDataspace - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInQuery' - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - -dataspaceByDataspaceName: - delete: - description: Delete the given dataspace - DRAFT - tags: - - cps-admin - summary: Delete a dataspace - operationId: deleteDataspace - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '204': - $ref: 'components.yml#/components/responses/NoContent' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - -schemaSet: - post: - description: Create a new schema set in the given dataspace - tags: - - cps-admin - summary: Create a schema set - operationId: createSchemaSet - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery' - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: 'components.yml#/components/schemas/MultipartFile' - - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - -schemaSetBySchemaSetName: - get: - description: Read a schema set given a schema set name and a dataspace - tags: - - cps-admin - summary: Get a schema set - operationId: getSchemaSet - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/schemaSetNameInPath' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: 'components.yml#/components/schemas/SchemaSetDetails' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - - delete: - description: Delete a schema set given a schema set name and a dataspace - tags: - - cps-admin - summary: Delete a schema set - operationId: deleteSchemaSet - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/schemaSetNameInPath' - responses: - '204': - $ref: 'components.yml#/components/responses/NoContent' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '409': - $ref: 'components.yml#/components/responses/Conflict' - -anchorsByDataspace: - get: - description: Read all anchors, given a dataspace - tags: - - cps-admin - summary: Get anchors - operationId: getAnchors - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - responses: - '200': - description: OK - content: - application/json: - schema: - type: array - items: - $ref: 'components.yml#/components/schemas/AnchorDetails' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - - post: - description: Create a new anchor in the given dataspace - tags: - - cps-admin - summary: Create an anchor - operationId: createAnchor - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery' - - $ref: 'components.yml#/components/parameters/anchorNameInQuery' - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - -anchorByDataspaceAndAnchorName: - get: - description: Read an anchor given an anchor name and a dataspace - tags: - - cps-admin - summary: Get an anchor - operationId: getAnchor - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: 'components.yml#/components/schemas/AnchorDetails' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - - delete: - description: Delete an anchor given an anchor name and a dataspace - tags: - - cps-admin - summary: Delete an anchor - operationId: deleteAnchor - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - responses: - '204': - $ref: 'components.yml#/components/responses/NoContent' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' \ No newline at end of file diff --git a/cps-rest/docs/openapi/cpsData.yml b/cps-rest/docs/openapi/cpsData.yml deleted file mode 100644 index fb21f757a0..0000000000 --- a/cps-rest/docs/openapi/cpsData.yml +++ /dev/null @@ -1,195 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= - -nodeByDataspaceAndAnchor: - get: - description: Get a node with an option to retrieve all the children for a given anchor and dataspace - tags: - - cps-data - summary: Get a node - operationId: getNodeByDataspaceAndAnchor - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/xpathInQuery' - - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery' - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - x-codegen-request-body-name: xpath - -listNodeByDataspaceAndAnchor: - post: - description: Add list-node child elements to existing node for a given anchor and dataspace - tags: - - cps-data - summary: Add list-node child element(s) under existing parent node - operationId: addListNodeElements - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - patch: - description: Replace list-node child elements under existing node for a given anchor and dataspace - tags: - - cps-data - summary: Replace list-node child element(s) under existing parent node - operationId: replaceListNodeElements - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '200': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - -nodesByDataspaceAndAnchor: - post: - description: Create a node for a given anchor and dataspace - tags: - - cps-data - summary: Create a node - operationId: createNode - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/xpathInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '201': - $ref: 'components.yml#/components/responses/Created' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - patch: - description: Update a data node leaves for a given dataspace and anchor and a parent node xpath - tags: - - cps-data - summary: Update node leaves - operationId: updateNodeLeaves - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/xpathInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - put: - description: Replace a node with descendants for a given dataspace, anchor and a parent node xpath - tags: - - cps-data - summary: Replace a node with descendants - operationId: replaceNode - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/xpathInQuery' - requestBody: - required: true - content: - application/json: - schema: - type: string - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - - -nodesByDataspace: - get: - description: Get all nodes for a given dataspace using an xpath or schema node identifier - DRAFT - tags: - - cps-data - summary: Get nodes - operationId: getNodesByDataspace - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - x-codegen-request-body-name: requestBody diff --git a/cps-rest/docs/openapi/cpsQuery.yml b/cps-rest/docs/openapi/cpsQuery.yml deleted file mode 100644 index f45f3f41ae..0000000000 --- a/cps-rest/docs/openapi/cpsQuery.yml +++ /dev/null @@ -1,42 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021 Nordix Foundation -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -nodesByDataspaceAndAnchorAndCpsPath: - get: - description: Query data nodes for the given dataspace and anchor using CPS path - tags: - - cps-query - summary: Query data nodes - operationId: getNodesByDataspaceAndAnchorAndCpsPath - parameters: - - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' - - $ref: 'components.yml#/components/parameters/anchorNameInPath' - - $ref: 'components.yml#/components/parameters/cpsPathInQuery' - - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery' - responses: - '200': - $ref: 'components.yml#/components/responses/Ok' - '400': - $ref: 'components.yml#/components/responses/BadRequest' - '401': - $ref: 'components.yml#/components/responses/Unauthorized' - '403': - $ref: 'components.yml#/components/responses/Forbidden' - '404': - $ref: 'components.yml#/components/responses/NotFound' - x-codegen-request-body-name: xpath diff --git a/cps-rest/docs/openapi/openapi.yml b/cps-rest/docs/openapi/openapi.yml deleted file mode 100644 index caaad68b60..0000000000 --- a/cps-rest/docs/openapi/openapi.yml +++ /dev/null @@ -1,77 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021 Nordix Foundation -# Modifications Copyright (C) 2021 Pantheon.tech -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -openapi: 3.0.1 -info: - title: ONAP Open API v3 Configuration Persistence Service - description: Configuration Persistence Service is a Model Driven Generic Database - version: "1.0.0" - contact: - name: ONAP - url: "https://onap.readthedocs.io" - email: "onap-discuss@lists.onap.org" - license: - name: "Apache 2.0" - url: "http://www.apache.org/licenses/LICENSE-2.0" - x-planned-retirement-date: "202212" - x-component: "Modeling" - x-logo: - url: "cps_logo.png" - -servers: - - url: //localhost:8088 -tags: - - name: cps-admin - description: cps Admin - - name: cps-data - description: cps Data -paths: - - /v1/dataspaces: - $ref: 'cpsAdmin.yml#/dataspaces' - - /v1/dataspaces/{dataspace-name}: - $ref: 'cpsAdmin.yml#/dataspaceByDataspaceName' - - /v1/dataspaces/{dataspace-name}/anchors: - $ref: 'cpsAdmin.yml#/anchorsByDataspace' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}: - $ref: 'cpsAdmin.yml#/anchorByDataspaceAndAnchorName' - - /v1/dataspaces/{dataspace-name}/schema-sets: - $ref: 'cpsAdmin.yml#/schemaSet' - - /v1/dataspaces/{dataspace-name}/schema-sets/{schema-set-name}: - $ref: 'cpsAdmin.yml#/schemaSetBySchemaSetName' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/node: - $ref: 'cpsData.yml#/nodeByDataspaceAndAnchor' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes: - $ref: 'cpsData.yml#/nodesByDataspaceAndAnchor' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/list-node: - $ref: 'cpsData.yml#/listNodeByDataspaceAndAnchor' - - /v1/dataspaces/{dataspace-name}/nodes: - $ref: 'cpsData.yml#/nodesByDataspace' - - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes/query: - $ref: 'cpsQuery.yml#/nodesByDataspaceAndAnchorAndCpsPath' diff --git a/cps-rest/pom.xml b/cps-rest/pom.xml index 4b42656e89..9a131176db 100755 --- a/cps-rest/pom.xml +++ b/cps-rest/pom.xml @@ -74,6 +74,11 @@ io.swagger swagger-annotations + + org.springdoc + springdoc-openapi-ui + 1.5.9 + org.apache.commons commons-lang3 @@ -133,7 +138,7 @@ generate - ${project.basedir}/docs/openapi/openapi.yml + ${project.basedir}/src/main/resources/static/openapi.yml org.onap.cps.rest.controller org.onap.cps.rest.model org.onap.cps.rest.api diff --git a/cps-rest/src/main/resources/static/components.yml b/cps-rest/src/main/resources/static/components.yml new file mode 100644 index 0000000000..51a49a6e9f --- /dev/null +++ b/cps-rest/src/main/resources/static/components.yml @@ -0,0 +1,208 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2021 Bell Canada. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= + +components: + schemas: + + AnchorDetails: + type: object + title: Anchor details by anchor Name + properties: + name: + type: string + example: my_anchor + dataspaceName: + type: string + example: my_dataspace + schemaSetName: + type: string + example: my_schema_set + + ErrorMessage: + type: object + title: Error + properties: + status: + type: string + example: 400 + message: + type: string + example: Dataspace not found + details: + type: string + example: Dataspace with name D1 does not exist. + + MultipartFile: + required: + - file + properties: + multipartFile: + type: string + description: multipartFile + format: binary + example: http://example.com/examples/example.yang + + ModuleReferences: + type: object + title: Module reference object + properties: + name: + type: string + example: module_reference_name + namespace: + type: string + example: module_reference_namespace + revision: + type: string + example: module_reference_revision + + SchemaSetDetails: + type: object + title: Schema set details by dataspace and schemasetName + properties: + dataspaceName: + type: string + example: my_dataspace + moduleReferences: + type: array + items: + $ref: '#/components/schemas/ModuleReferences' + name: + type: string + example: my_schema_set + + parameters: + dataspaceNameInQuery: + name: dataspace-name + in: query + description: dataspace-name + required: true + schema: + type: string + dataspaceNameInPath: + name: dataspace-name + in: path + description: dataspace-name + required: true + schema: + type: string + anchorNameInPath: + name: anchor-name + in: path + description: anchor-name + required: true + schema: + type: string + schemaSetNameInQuery: + name: schema-set-name + in: query + description: schema-set-name + required: true + schema: + type: string + schemaSetNameInPath: + name: schema-set-name + in: path + description: schema-set-name + required: true + schema: + type: string + anchorNameInQuery: + name: anchor-name + in: query + description: anchor-name + required: true + schema: + type: string + xpathInQuery: + name: xpath + in: query + description: xpath + required: false + schema: + type: string + default: / + requiredXpathInQuery: + name: xpath + in: query + description: xpath + required: true + schema: + type: string + cpsPathInQuery: + name: cps-path + in: query + description: cps-path + required: false + schema: + type: string + default: / + includeDescendantsOptionInQuery: + name: include-descendants + in: query + description: include-descendants + required: false + schema: + type: boolean + default: false + + responses: + NotFound: + description: The specified resource was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Forbidden: + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + BadRequest: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Conflict: + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + Ok: + description: OK + content: + application/json: + schema: + type: object + example: { "key": "value" } + Created: + description: Created + content: + text/plain: + schema: + type: string + NoContent: + description: No Content + content: {} diff --git a/cps-rest/src/main/resources/static/cpsAdmin.yml b/cps-rest/src/main/resources/static/cpsAdmin.yml new file mode 100644 index 0000000000..35b2e4ca6a --- /dev/null +++ b/cps-rest/src/main/resources/static/cpsAdmin.yml @@ -0,0 +1,222 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2021 Bell Canada. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= + +dataspaces: + post: + description: Create a new dataspace + tags: + - cps-admin + summary: Create a dataspace + operationId: createDataspace + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInQuery' + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + +dataspaceByDataspaceName: + delete: + description: Delete the given dataspace - DRAFT + tags: + - cps-admin + summary: Delete a dataspace + operationId: deleteDataspace + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '204': + $ref: 'components.yml#/components/responses/NoContent' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + +schemaSet: + post: + description: Create a new schema set in the given dataspace + tags: + - cps-admin + summary: Create a schema set + operationId: createSchemaSet + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery' + requestBody: + required: true + content: + multipart/form-data: + schema: + $ref: 'components.yml#/components/schemas/MultipartFile' + + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + +schemaSetBySchemaSetName: + get: + description: Read a schema set given a schema set name and a dataspace + tags: + - cps-admin + summary: Get a schema set + operationId: getSchemaSet + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/schemaSetNameInPath' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: 'components.yml#/components/schemas/SchemaSetDetails' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + + delete: + description: Delete a schema set given a schema set name and a dataspace + tags: + - cps-admin + summary: Delete a schema set + operationId: deleteSchemaSet + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/schemaSetNameInPath' + responses: + '204': + $ref: 'components.yml#/components/responses/NoContent' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '409': + $ref: 'components.yml#/components/responses/Conflict' + +anchorsByDataspace: + get: + description: Read all anchors, given a dataspace + tags: + - cps-admin + summary: Get anchors + operationId: getAnchors + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: 'components.yml#/components/schemas/AnchorDetails' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + + post: + description: Create a new anchor in the given dataspace + tags: + - cps-admin + summary: Create an anchor + operationId: createAnchor + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery' + - $ref: 'components.yml#/components/parameters/anchorNameInQuery' + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + +anchorByDataspaceAndAnchorName: + get: + description: Read an anchor given an anchor name and a dataspace + tags: + - cps-admin + summary: Get an anchor + operationId: getAnchor + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: 'components.yml#/components/schemas/AnchorDetails' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + + delete: + description: Delete an anchor given an anchor name and a dataspace + tags: + - cps-admin + summary: Delete an anchor + operationId: deleteAnchor + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + responses: + '204': + $ref: 'components.yml#/components/responses/NoContent' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' \ No newline at end of file diff --git a/cps-rest/src/main/resources/static/cpsData.yml b/cps-rest/src/main/resources/static/cpsData.yml new file mode 100644 index 0000000000..7e9f71d62b --- /dev/null +++ b/cps-rest/src/main/resources/static/cpsData.yml @@ -0,0 +1,200 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2021 Bell Canada. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= + +nodeByDataspaceAndAnchor: + get: + description: Get a node with an option to retrieve all the children for a given anchor and dataspace + tags: + - cps-data + summary: Get a node + operationId: getNodeByDataspaceAndAnchor + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + example: { "child": my_child,"leafList": "leafListElement1, leafListElement2", "leaf": my_leaf } + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + x-codegen-request-body-name: xpath + +listNodeByDataspaceAndAnchor: + post: + description: Add list-node child elements to existing node for a given anchor and dataspace + tags: + - cps-data + summary: Add list-node child element(s) under existing parent node + operationId: addListNodeElements + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + patch: + description: Replace list-node child elements under existing node for a given anchor and dataspace + tags: + - cps-data + summary: Replace list-node child element(s) under existing parent node + operationId: replaceListNodeElements + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/requiredXpathInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '200': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + +nodesByDataspaceAndAnchor: + post: + description: Create a node for a given anchor and dataspace + tags: + - cps-data + summary: Create a node + operationId: createNode + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '201': + $ref: 'components.yml#/components/responses/Created' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + patch: + description: Update a data node leaves for a given dataspace and anchor and a parent node xpath + tags: + - cps-data + summary: Update node leaves + operationId: updateNodeLeaves + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + put: + description: Replace a node with descendants for a given dataspace, anchor and a parent node xpath + tags: + - cps-data + summary: Replace a node with descendants + operationId: replaceNode + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + requestBody: + required: true + content: + application/json: + schema: + type: string + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + +nodesByDataspace: + get: + description: Get all nodes for a given dataspace using an xpath or schema node identifier - DRAFT + tags: + - cps-data + summary: Get nodes + operationId: getNodesByDataspace + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + x-codegen-request-body-name: requestBody diff --git a/cps-rest/src/main/resources/static/cpsQuery.yml b/cps-rest/src/main/resources/static/cpsQuery.yml new file mode 100644 index 0000000000..f45f3f41ae --- /dev/null +++ b/cps-rest/src/main/resources/static/cpsQuery.yml @@ -0,0 +1,42 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2021 Nordix Foundation +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +nodesByDataspaceAndAnchorAndCpsPath: + get: + description: Query data nodes for the given dataspace and anchor using CPS path + tags: + - cps-query + summary: Query data nodes + operationId: getNodesByDataspaceAndAnchorAndCpsPath + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/cpsPathInQuery' + - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery' + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + x-codegen-request-body-name: xpath diff --git a/cps-rest/src/main/resources/static/openapi.yml b/cps-rest/src/main/resources/static/openapi.yml new file mode 100644 index 0000000000..8fa640cf9b --- /dev/null +++ b/cps-rest/src/main/resources/static/openapi.yml @@ -0,0 +1,77 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2021 Nordix Foundation +# Modifications Copyright (C) 2021 Pantheon.tech +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +openapi: 3.0.1 +info: + title: ONAP Open API v3 Configuration Persistence Service + description: Configuration Persistence Service is a Model Driven Generic Database + version: "1.0.0" + contact: + name: ONAP + url: "https://onap.readthedocs.io" + email: "onap-discuss@lists.onap.org" + license: + name: "Apache 2.0" + url: "http://www.apache.org/licenses/LICENSE-2.0" + x-planned-retirement-date: "202212" + x-component: "Modeling" + x-logo: + url: "cps_logo.png" + +servers: + - url: /cps/api +tags: + - name: cps-admin + description: cps Admin + - name: cps-data + description: cps Data +paths: + + /v1/dataspaces: + $ref: 'cpsAdmin.yml#/dataspaces' + + /v1/dataspaces/{dataspace-name}: + $ref: 'cpsAdmin.yml#/dataspaceByDataspaceName' + + /v1/dataspaces/{dataspace-name}/anchors: + $ref: 'cpsAdmin.yml#/anchorsByDataspace' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}: + $ref: 'cpsAdmin.yml#/anchorByDataspaceAndAnchorName' + + /v1/dataspaces/{dataspace-name}/schema-sets: + $ref: 'cpsAdmin.yml#/schemaSet' + + /v1/dataspaces/{dataspace-name}/schema-sets/{schema-set-name}: + $ref: 'cpsAdmin.yml#/schemaSetBySchemaSetName' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/node: + $ref: 'cpsData.yml#/nodeByDataspaceAndAnchor' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes: + $ref: 'cpsData.yml#/nodesByDataspaceAndAnchor' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/list-node: + $ref: 'cpsData.yml#/listNodeByDataspaceAndAnchor' + + /v1/dataspaces/{dataspace-name}/nodes: + $ref: 'cpsData.yml#/nodesByDataspace' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes/query: + $ref: 'cpsQuery.yml#/nodesByDataspaceAndAnchorAndCpsPath' -- cgit 1.2.3-korg