You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »

Overview

In CPS-341 the POST operation to create a new data node was updated to bring support for a multiple data trees under a single anchor (or a single root "/" node). In order to achieve this, the JSON data containing multiple data trees are parsed into a Collection of data nodes.

This collection of data nodes is then converted to a List of Fragment Entities which is stored into the database.

From the above description it is clear that when a GET operation will be performed on an anchor containing multiple data trees to retrieve one or all data trees, it will be returned as a List of Fragment Entities as opposed to a single Fragment Entity being returned earlier.

It is to be noted here that the methods used for GET operation are not limited to Get a Node API and are reused in other API's as well. All the APIS discussed below internally call the getFragmentWithoutDescendantsByXpath()to retrieve the data trees. This epic covers the impact on all the API's due to the above mentioned changes in CPS core.

A common task across the API's is to maintain backwards compatibility as well.

References

Open Issues and Decisions

#APIIssue/DescriptionNotesDecision
1

Get operation should return all the data trees under the root when xpath is set to "/"

after discussion with Toine Siebelink it was decided to give priority to the GET operation first, before heading for other API's. A discussion with the architects is to be scheduled to discuss upon the following points:

  • should a separate end point be created which returns all the data trees under the root node
  • impact of ongoing versioning issue with CPS on the above point and backwards compatibility

after discussion with the architects it was decided to have a v2 of the GET API and the v2 will return all the data nodes in an array

  • To implement V2 of Get Data Node API
  • New API to return all data nodes when xPath is set to root.
  • Existing functionality to be used when existing xPath is queried
  • New API to return JSON array as response
2Response body of GET APIshould GET Data Node return a JSON array or JSON object in response for multiple data trees

as discussed in weekly meeting, it was decided that v2 of the GET API will return JSON Array and v1 will remain as is (that is returns single data node as JSON Object)


3Impact on NCMP DMI pluginimpact analysis of Get Data Node returning multiple data trees on NCMP DMI plugin

4CPS Core API's under this linkThe remaining CPS core API's might require modification with respect to decisions made for the GET operation. Based upon the decisions for the above Issue this table will be updated from time to time.

in the meeting it was decided to focus on GET operation first as the work on remaining API's seemed different from the one for the GET API. Also it was decided to first have a discussion with the architects regarding the GET API and then have a separate discussion for the remaining API;s.


List of impacted API's

OperationAPIIssuesPossible Solution

GET

Get a Node

  • should return all the data trees when xpath is set to root(/)
  • currently returns only the first data tree
  • modify the existing code for Get a Node API so it returns a List of fragment entities
  • this impacts other API's as well which make use of the Get operation
  • a separate API can be developed to return all the data trees, similar to Get all anchors and Get one anchor API in CPS

PUT

  • Replace a node with descendants

  • Replace list content




DELETEDelete a datanode
  • No issues were found in Delete DataNode API
  • Following tests were performed:
    • Individual data trees were deleted and the ones not deleted were retrieved successfully
    • When all data trees are deleted individually, the entire data node gets deleted from the DB eventually, i.e. an empty collection is not left behind when all data trees are deleted individually
    • When deleting using root node xpath, entire data node is deleted.


PATCHUpdate node leaves
  • When the Patch operation is performed with xPath set to root node "/", then leave value in all the modified data trees must be updated
  • Currently when updating all the data trees using root node xPath, only the first data tree gets updated
  • when trying to update a specific data tree, then none of the data trees get updated,and in response we get 400 BAD_REQUEST
  • when performing Patch operation on multiple data trees with xPath set to root node xPath, then all the modified data trees should be updated.
  • when modifying specific data tree using its xPath (ex: /last-container), then the specific data tree must be updated, irrespective of its position in stack.
  • in the current scenario none of the data trees get updated
POSTAdd list element to existing list
  • when the API is called and xpath is set to "/", first the get operation is executed internally to retrieve all the data trees
  • once all the data trees are returned in a List the API proceeds to perform the Post operation
    • retrieving all the data trees does not seems feasible with xpath set to root, given the scenario where new list element is getting added to few of the data trees
  • with xpath set to root, the API should return an error message
  • the POST operation can be performed on particular data trees by specifying their respective xpaths.
  • No labels