Split OpenAPI yaml file

1. components like schema, parameters, responses, requestBodies all moved to components.yml (https://swagger.io/docs/specification/components/)
2. CpAdmin.yml includes the configuration details for cpsAdmin APIs
3. CpsData.yml includes the API configuration details for cpsData

Issue-ID: CPS-155
Signed-off-by: puthuparambil.aditya <aditya.puthuparambil@bell.ca>
Change-Id: I18fb9b8a2be85d180d4625657aca399dbf60b7bc
diff --git a/cps-rest/docs/api/swagger/components.yaml b/cps-rest/docs/api/swagger/components.yaml
new file mode 100644
index 0000000..ab964a9
--- /dev/null
+++ b/cps-rest/docs/api/swagger/components.yaml
@@ -0,0 +1,105 @@
+components:
+  schemas:
+    ErrorMessage:
+      type: object
+      title: Error
+      properties:
+        status:
+          type: string
+        message:
+          type: string
+        details:
+          type: string
+    MultipartFile:
+      required:
+        - file
+      properties:
+        multipartFile:
+          type: string
+          description: multipartFile
+          format: binary
+
+  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
+
+  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'
+    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/api/swagger/cpsAdmin.yml b/cps-rest/docs/api/swagger/cpsAdmin.yml
new file mode 100644
index 0000000..948c43b
--- /dev/null
+++ b/cps-rest/docs/api/swagger/cpsAdmin.yml
@@ -0,0 +1,165 @@
+dataspace:
+  post:
+    tags:
+      - cps-admin
+    summary: Create a new dataspace
+    operationId: createDataspace
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInQuery'
+    responses:
+      201:
+        $ref: 'components.yaml#/components/responses/Created'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+
+dataspaceByDataspaceName:
+  delete:
+    tags:
+      - cps-admin
+    summary: Delete the given dataspace - DRAFT
+    operationId: deleteDataspace
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+    responses:
+      200:
+        $ref: 'components.yaml#/components/responses/Ok'
+      204:
+        $ref: 'components.yaml#/components/responses/NoContent'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+
+
+schemaSet:
+  post:
+    tags:
+      - cps-admin
+    summary: Create a new schema set in the given dataspace
+    operationId: createSchemaSet
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+      - $ref: 'components.yaml#/components/parameters/schemaSetNameInQuery'
+    requestBody:
+      required: true
+      content:
+        multipart/form-data:
+          schema:
+            $ref: 'components.yaml#/components/schemas/MultipartFile'
+
+    responses:
+      201:
+        $ref: 'components.yaml#/components/responses/Created'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+
+schemaSetBySchemaSetName:
+  get:
+    tags:
+      - cps-admin
+    summary: Read a schema set given a schema set and a dataspace
+    operationId: getSchemaSet
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+      - $ref: 'components.yaml#/components/parameters/schemaSetNameInPath'
+    responses:
+      200:
+        $ref: 'components.yaml#/components/responses/Ok'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+      404:
+        $ref: 'components.yaml#/components/responses/NotFound'
+
+anchorsByDataspace:
+  get:
+    tags:
+      - cps-admin
+    summary: Read all anchors, given a dataspace
+    operationId: getAnchors
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+    responses:
+      200:
+        $ref: 'components.yaml#/components/responses/Ok'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+      404:
+        $ref: 'components.yaml#/components/responses/NotFound'
+
+  post:
+    tags:
+      - cps-admin
+    summary: Create a new anchor in the given dataspace
+    operationId: createAnchor
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+      - $ref: 'components.yaml#/components/parameters/schemaSetNameInQuery'
+      - $ref: 'components.yaml#/components/parameters/anchorNameInQuery'
+    responses:
+      201:
+        $ref: 'components.yaml#/components/responses/Created'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+
+anchorByDataspaceAndAnchorName:
+  get:
+    tags:
+      - cps-admin
+    summary: Read an anchor given a anchor and a dataspace - DRAFT
+    operationId: getAnchor
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+      - $ref: 'components.yaml#/components/parameters/anchorNameInPath'
+    responses:
+      200:
+        $ref: 'components.yaml#/components/responses/Ok'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+      404:
+        $ref: 'components.yaml#/components/responses/NotFound'
+
+  delete:
+    tags:
+      - cps-admin
+    summary: Delete an anchor given a anchor and a dataspace - DRAFT
+    operationId: deleteAnchor
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+      - $ref: 'components.yaml#/components/parameters/anchorNameInPath'
+    responses:
+      200:
+        $ref: 'components.yaml#/components/responses/Ok'
+      204:
+        $ref: 'components.yaml#/components/responses/NoContent'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
\ No newline at end of file
diff --git a/cps-rest/docs/api/swagger/cpsData.yml b/cps-rest/docs/api/swagger/cpsData.yml
new file mode 100644
index 0000000..c33cf16
--- /dev/null
+++ b/cps-rest/docs/api/swagger/cpsData.yml
@@ -0,0 +1,65 @@
+nodesByDataspaceAndAnchor:
+  get:
+    tags:
+      - cps-data
+    summary: Get a node given an anchor for the given dataspace - DRAFT
+    operationId: getNodeByDataspaceAndAnchor
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+      - $ref: 'components.yaml#/components/parameters/anchorNameInPath'
+    responses:
+      200:
+        $ref: 'components.yaml#/components/responses/Ok'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+      404:
+        $ref: 'components.yaml#/components/responses/NotFound'
+    x-codegen-request-body-name: xpath
+
+nodesByDataspace:
+  get:
+    tags:
+      - cps-data
+    summary: Get all nodes for a given dataspace using an xpath or schema node identifier - DRAFT
+    operationId: getNode
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+    responses:
+      200:
+        $ref: 'components.yaml#/components/responses/Ok'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
+      404:
+        $ref: 'components.yaml#/components/responses/NotFound'
+    x-codegen-request-body-name: requestBody
+
+  post:
+    tags:
+      - cps-data
+    summary: Create a node for a given anchor for the given dataspace - DRAFT
+    operationId: createNode
+    parameters:
+      - $ref: 'components.yaml#/components/parameters/dataspaceNameInPath'
+    requestBody:
+      content:
+        multipart/form-data:
+          schema:
+            $ref: 'components.yaml#/components/schemas/MultipartFile'
+      required: true
+    responses:
+      201:
+        $ref: 'components.yaml#/components/responses/Created'
+      400:
+        $ref: 'components.yaml#/components/responses/BadRequest'
+      401:
+        $ref: 'components.yaml#/components/responses/Unauthorized'
+      403:
+        $ref: 'components.yaml#/components/responses/Forbidden'
\ No newline at end of file
diff --git a/cps-rest/docs/api/swagger/openapi.yml b/cps-rest/docs/api/swagger/openapi.yml
index 2acd2b1..44064e2 100755
--- a/cps-rest/docs/api/swagger/openapi.yml
+++ b/cps-rest/docs/api/swagger/openapi.yml
@@ -10,400 +10,25 @@
     description: cps Resource
 paths:
   /v1/dataspaces:
-    post:
-      tags:
-        - cps-admin
-      summary: Create a new dataspace
-      operationId: createDataspace
-      parameters:
-        - name: dataspace-name
-          in: query
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-      responses:
-        201:
-          description: Created
-          content:
-            application/json:
-              schema:
-                type: string
-        400:
-          description: Bad Request
-          content: { }
-        401:
-          description: Unauthorized
-          content: { }
-        403:
-          description: Forbidden
-          content: { }
+    $ref: 'cpsAdmin.yml#/dataspace'
+
   /v1/dataspaces/{dataspace-name}/:
-    delete:
-      tags:
-        - cps-admin
-      summary: Delete the given dataspace
-      operationId: deleteDataspace
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-      responses:
-        200:
-          description: OK
-          content:
-            application/json:
-              schema:
-                type: object
-        204:
-          description: No Content
-          content: {}
-        401:
-          description: Unauthorized
-          content: {}
-        403:
-          description: Forbidden
-          content: {}
-  /v1/dataspaces/{dataspace-name}/schema-sets/{schema-set-name}:
-    get:
-      tags:
-        - cps-admin
-      summary: Read a schema set given a schema set and a dataspace
-      operationId: getSchemaSet
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-        - name: schema-set-name
-          in: path
-          description: schema-name
-          required: true
-          schema:
-            type: string
-      responses:
-        200:
-          description: OK
-          content:
-            application/json:
-              schema:
-                type: object
-        401:
-          description: Unauthorized
-          content: {}
-        403:
-          description: Forbidden
-          content: {}
-        404:
-          description: Not Found
-          content: {}
-  /v1/dataspaces/{dataspace-name}/schema-sets:
-    post:
-      tags:
-        - cps-admin
-      summary: Create a new schema set in the given dataspace
-      operationId: createSchemaSet
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-      requestBody:
-        required: true
-        content:
-          multipart/form-data:
-            schema:
-              required:
-                - schemaSetName
-                - multipartFile
-              properties:
-                schemaSetName:
-                  type: string
-                multipartFile:
-                  type: string
-                  description: multipartFile
-                  format: binary
-      responses:
-        201:
-          description: Created
-          content:
-            application/json:
-              schema:
-                type: string
-        401:
-          description: Unauthorized
-          content: { }
-        403:
-          description: Forbidden
-          content: { }
+    $ref: 'cpsAdmin.yml#/dataspaceByDataspaceName'
+
   /v1/dataspaces/{dataspace-name}/anchors:
-    get:
-      tags:
-        - cps-admin
-      summary: Read all anchors, given a dataspace
-      operationId: getAnchors
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-      responses:
-        200:
-          description: OK
-          content:
-            application/json:
-              schema:
-                type: object
-        401:
-          description: Unauthorized
-          content: {}
-        400:
-          description: Bad Request
-          content: {}
-        403:
-          description: Forbidden
-        404:
-          description: Not Found
-          content: {}
-        204:
-          description: No Content
-          content: {}
-    post:
-      tags:
-        - cps-admin
-      summary: Create a new anchor in the given dataspace
-      operationId: createAnchor
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-        - name: schema-set-name
-          in: query
-          description: schema-set-name
-          required: true
-          schema:
-            type: string
-        - name: anchor-name
-          in: query
-          description: anchor-name
-          required: true
-          schema:
-            type: string
-      responses:
-        201:
-          description: Created
-          content:
-            application/json:
-              schema:
-                type: string
-        401:
-          description: Unauthorized
-          content: {}
-        403:
-          description: Forbidden
-          content: {}
-        404:
-          description: Not Found
-          content: {}
+    $ref: 'cpsAdmin.yml#/anchorsByDataspace'
+
   /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}:
-    get:
-      tags:
-        - cps-admin
-      summary: Read an anchor given a anchor and a dataspace
-      operationId: getAnchor
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-        - name: anchor-name
-          in: path
-          description: anchor-name
-          required: true
-          schema:
-            type: string
-      responses:
-        200:
-          description: OK
-          content:
-            application/json:
-              schema:
-                type: object
-        401:
-          description: Unauthorized
-          content: {}
-        403:
-          description: Forbidden
-          content: {}
-        404:
-          description: Not Found
-          content: {}
-    delete:
-      tags:
-        - cps-admin
-      summary: Delete an anchor given a anchor and a dataspace
-      operationId: deleteAnchor
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-        - name: anchor-name
-          in: path
-          description: anchor-name
-          required: true
-          schema:
-            type: string
-      responses:
-        200:
-          description: OK
-          content:
-            application/json:
-              schema:
-                type: object
-        204:
-          description: No Content
-          content: {}
-        401:
-          description: Unauthorized
-          content: {}
-        403:
-          description: Forbidden
-          content: {}
+    $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}/nodes:
-    get:
-      tags:
-        - cps-data
-      summary: Get a node given an anchor for the given dataspace
-      operationId: getNodeByDataspaceAndAnchor
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-        - name: anchor-name
-          in: path
-          description: anchor-name
-          required: true
-          schema:
-            type: string
-      responses:
-        200:
-          description: OK
-          content:
-            application/json:
-              schema:
-                type: object
-        401:
-          description: Unauthorized
-          content: {}
-        403:
-          description: Forbidden
-          content: {}
-        404:
-          description: Not Found
-          content: {}
-      x-codegen-request-body-name: xpath
+    $ref: 'cpsData.yml#/nodesByDataspaceAndAnchor'
+
   /v1/dataspaces/{dataspace-name}/nodes:
-    get:
-      tags:
-        - cps-data
-      summary: Get all nodes for a given dataspace using an xpath or schema node identifier
-      operationId: getNode
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-      responses:
-        200:
-          description: OK
-          content:
-            application/json:
-              schema:
-                type: object
-        401:
-          description: Unauthorized
-          content: {}
-        403:
-          description: Forbidden
-          content: {}
-        404:
-          description: Not Found
-          content: {}
-      x-codegen-request-body-name: requestBody
-    post:
-      tags:
-        - cps-data
-      summary: Create a node for a given anchor for the given dataspace
-      operationId: createNode
-      parameters:
-        - name: dataspace-name
-          in: path
-          description: dataspace-name
-          required: true
-          schema:
-            type: string
-      requestBody:
-        content:
-          multipart/form-data:
-            schema:
-              required:
-                - file
-              properties:
-                multipartFile:
-                  type: string
-                  description: multipartFile
-                  format: binary
-        required: true
-      responses:
-        200:
-          description: OK
-          content:
-            application/json:
-              schema:
-                type: object
-        201:
-          description: Created
-          content: {}
-        401:
-          description: Unauthorized
-          content: {}
-        403:
-          description: Forbidden
-          content: {}
-        404:
-          description: Not Found
-          content: {}
-components:
-  schemas:
-    ErrorMessage:
-      type: object
-      title: Error
-      properties:
-        status:
-          type: string
-        message:
-          type: string
-        details:
-          type: string
+    $ref: 'cpsData.yml#/nodesByDataspace'