Inconsistencies with CPS Core API's

Issues/Decisions

Introduction

There are few inconsistencies found within the CPS core APIs. This proposal aims to discuss these problems and suggest appropriate solutions for the same. The following list of APIs are found to be impacted by the findings:

  • Get a node

  • Update node leaves

  • Replace a node with descendants

Brief Analysis

Get a Node

Problem Description:

When a list is fetched using Get a node API then instead of returning one list containing n-number of list items, the API returns n-number of JSON objects where each object contains one list item each.

For example: if there is a list named "Items" containing 10 items named Item 1, Item 2, ......, Item 10. When this list is fetched using get a node API, a total of 10 individual JSON objects each named "Items", are returned where each object encapsulates one list Item.

In depth analysis of problem statement can be found in the following page:

Data Originally Stored
{ "book-store:bookstore": { "bookstore-name": "Easons", "categories": [ { "code": "1", "name": "Children", "books": [ { "title": "Matilda", "lang": "English", "price": 20 }, { "title": "The Gruffalo", "lang": "English", "price": 15 } ] } ] } }

 

Response when querying the list directly
[ { "books": { "title": "Matilda", "lang": "English", "price": 20 } }, { "books": { "title": "The Gruffalo", "lang": "English", "price": 15 } } ]

 

Expected Result
[ { "books": [ { "title": "Matilda", "lang": "English", "price": 20 }, { "title": "The Gruffalo", "lang": "English", "price": 15 } ] } ]

 

Initial setup to try the sample requests up ahead

To tryout the sample curl requests below please create a simple bookstore entry in your local CPS deployment. Or just execute the following curl request

Update node leaves

Problem Description

When updating any data node, it's parent node xpath and payload containing updated data are provided as part of the request. The payload contains the data of child node to be updated.

But due to a user error the parent node's data can be sent in the payload and once the request is executed, instead of failing, the request is successfully executed with partial update Where only the child data node is updated, and the parent data node is not updated.

Original JSON data:
JSON with updates
JSON data after update
Original JSON data:
JSON with updates
JSON data after update

 

 

 

 

Curl request to replicate the scenario

Problem Description 2

Update operation can only be done on one node at a time and when trying to update parent child in one request, then only the parent node is updated.

Original JSON data
JSON to be updated
Updated JSON data
Original JSON data
JSON to be updated
Updated JSON data

 

 

 

Curl request to replicate the scenario

Replace a node with descendants

Problem Description

If a replace operation is performed on a list, where a new list item is also added to the list, then it results in a 200-response code, with a partial replace operation.

Original JSON data
Data to replace
Result after Replace operation
Original JSON data
Data to replace
Result after Replace operation

 

 

 

Curel request to replicate the scenario

Related pages