...
# | Sub interface | Method | Scenario | Specified HTTP Response Code | Implemented HTTP Response Code | Comments | ||||
---|---|---|---|---|---|---|---|---|---|---|
1 | Admin | POST - /v1/dataspaces CpsAdminApi.createDataspace() | Create a new dataspace | 201 400 401 403 | 201 (created)
409 (conflict)
500 (internal server error)DataNodeNotFoundException
| Specification:
| ||||
2 | Admin | DELETE - /v1/dataspaces CpsAdminApi.deleteDataspace() | Delete a dataspace | 204 400 401 403 409 | 204 (no content)
400 (bad request)
409 (conflict)
500 (internal server error)
| |||||
3 | Admin | GET - /v1/dataspaces/{dataspace-name}/anchors CpsAdminApi.getAnchors() | Read all anchors, given a dataspace | 200 400 401 403 404 | 200 (ok)
400 (bad request)
500 (internal server error)
| Specification:
| ||||
4 | Admin | POST - /v1/dataspaces/{dataspace-name}/anchors CpsAdminApi.createAnchor() | Create a new anchor in the given dataspace | 201 400 401 403 | 201 (created)
400 (bad request)
409 (conflict)
500 (internal server error)
| Specification:
| ||||
5 | Admin | GET - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name} CpsAdminApi.getAnchor() | Read an anchor given an anchor name and a dataspace | 200 400 401 403 404 | 200 (ok)
400 (bad request)
500 (internal server error)
| Specification:
| ||||
6 | Admin | DELETE - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name} CpsAdminApi.deleteAnchor() | Delete an anchor given an anchor name and a dataspace | 204 400 401 403 | 204 (no content)
400 (bad request)
500 (internal server error)
| |||||
7 | Admin | POST - /v1/dataspaces/{dataspace-name}/schema-sets CpsAdminApi.createSchemaSet() | Create a new schema set in the given dataspace | 201 400 401 403 | 201 (created)
400 (bad request)
409 (conflict)
500 (internal server error)
| Specification:
Implementation
| ||||
8 | Admin | GET - /v1/dataspaces/{dataspace-name}/schema-sets/{schema-set-name} CpsAdminApi.getSchemaSet() | Read a schema set given a schema set name and a dataspace | 200 400 401 403 404 | 200 (ok)
400 (bad request)
500 (internal server error)
| Specification:
| ||||
9 | Admin | DELETE - /v1/dataspaces/{dataspace-name}/schema-sets/{schema-set-name} CpsAdminApi.deleteSchemaSet() | Delete a schema set given a schema set name and a dataspace | 204 400 401 403 409 | 204 (no content)
400 (bad request)
409 (conflict)
500 (internal server error)
| |||||
10 | Data | GET - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/node CpsDataApi.getNodeByDataspaceAndAnchor() | Get a node with an option to retrieve all the children for a given anchor and dataspace | 200 400 401 403 404 | 200 (ok)
400 (bad request)
500 (internal server error)
| Specification:
| ||||
11 | Data | PUT - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes CpsDataApi.replaceNode() | Replace a node with descendants for a given dataspace, anchor and a parent node xpath | 200 400 401 403 | 200 (ok)
400 (bad request)
500 (internal server error)
| Implementation:
| ||||
12 | Data | POST - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes CpsDataApi.createNode() | Create a node for a given anchor and dataspace | 201 400 401 403 | 201 (created)
400 (bad request)
409 (conflict)
500 (internal server error)
| Implementation:
| ||||
13 | Data | DELETE - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes CpsDataApi.deleteDataNode() | Delete a datanode for a given dataspace and anchor given a node xpath. | 204 400 401 403 | 204 (no content)
400 (bad request)
500 (internal server error)
| |||||
14 | Data | PATCH - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes CpsDataApi.updateNodeLeaves() | Update a data node leaves for a given dataspace and anchor and a parent node xpath | 200 400 401 403 | 200 (ok)
400 (bad request)
500 (internal server error)
| |||||
15 | Data | PUT - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/list-nodes CpsDataApi.replaceListContent() | Replace list content under a given parent, anchor and dataspace | 200 400 401 403 | 200 (ok)
400 (bad request)
500 (internal server error)
| |||||
16 | Data | POST - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/list-nodes CpsDataApi.addListElements() | Add list element(s) to a list for a given anchor and dataspace | 201 400 401 403 | 201 (created)
400 (bad request)
500 (internal server error)
| |||||
17 |
|
| 17 |
|
|
|
| |||
18 | Query | GET - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes/query CpsQueryApi.getNodesByDataspaceAndAnchorAndCpsPath() | Query data nodes for the given dataspace and anchor using CPS path | 200 400 401 403 404 | 200 (ok)
400 (bad request)
| Query data nodes for the given dataspace and anchor using CPS path |
500 (internal server error)
| Implementation:
200 400 401 403 404 |
CPS-NCMP
# | Sub interface | Method | Scenario | Specified HTTP Response Code | Implemented HTTP Response Code | Comments | Body |
---|---|---|---|---|---|---|---|
1 | Data | HTTP: GET - /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-operational NetworkCmProxyApi.getResourceDataOperationalForCmHandle() | Get resource data from pass-through operational for given cm handle | 200 400 401 403 404 | 200 500 | ||
2 | Data | GET - /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running NetworkCmProxyApi.getResourceDataRunningForCmHandle() | Get resource data from pass-through running for given cm handle | 200 400 401 403 404 | 200 500 | ||
3 | Data | PUT- /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running NetworkCmProxyApi.updateResourceDataRunningForCmHandle() | Update resource data from pass-through running for the given cm handle | 200 400 401 403 404 | 200 500 | ||
4 | Data | POST - /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running NetworkCmProxyApi.createResourceDataRunningForCmHandle() | Create resource data from pass-through running for given cm handle | 201 400 401 403 404 | 201 500 | ||
5 | Data | PATCH - /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running NetworkCmProxyApi.patchResourceDataRunningForCmHandle() | Patch resource data from pass-through running for the given cm handle | 200 400 401 403 404 | 200 500 | ||
6 | Model | GET - /v1/ch/{cm-handle}/modules NetworkCmProxyApi.getModuleReferencesByCmHandle | Fetch all module references (name and revision) for a given cm handle | 200 400 401 403 404 | 200 500 | ||
7 | Model | POST - /v1/ch/searches NetworkCmProxyApi.executeCmHandleSearch | Execute cm handle searches using 'hasAllModules' condition to get all cm handles for the given module names | 200 400 401 403 | 200 500 | ||
8 | Inventory | POST /v1/ch NetworkCmProxyInventoryApi.updateDmiPluginRegistration() | Register, update or remove cm handles | 201 400 401 403 403 | 201 500 | Specification:
201 500Implementation:
|
...
# | Sub interface | Method | Scenario | Specified HTTP Response Code | Implemented HTTP Response Code | Comments |
---|---|---|---|---|---|---|
1 | Query | GET - /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/history CpsTemporalQueryApi.getAnchorDataByName() | Get anchor data by name | 200 400 401 403 | 200 (ok)
400 (bad request)
500 (internal server error)
| |
2 | Query | GET - /v1/dataspaces/{dataspace-name}/anchors/history CpsTemporalQueryApi.getAnchorsDataByFilter() | Get anchors data based on filter criteria | 200 400 401 403 | 200 (ok)
400 (bad request)
500 (internal server error)
|
General comments for all endpoints
Specification
- Always ensure that client request related errors return 4xx along with a clear explanation provided to the client about the reason for the error. When 4xx errors occur, the system itself is behaving as expected.
- 500 response codes should only correspond to unexpected errors that require support investigation and effort in order to be fixed (ex: network communication issue, dependent component or system down, corrupted data, application bug, ...). For 500 errors no details are really expected in the response for the client, all the information to investigate the problem should be available in the logs.
- Review 401 and 403 responses code from specification that are not implemented yet.
- 500 needs to be added to the specification for all endpoints
Implementation
- Is NotFoundInDataspaceException used ? If not, could it be removed ?
- Handling of DataNodeNotFoundException in CpsRestExceptionHandler supports a different return code (404) when http method is get. Is this implementation used ? If not, could it be removed ?