Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

NCMP CMhandle registration endpoint receives multiple operations to create, update or delete cm-handles in a single request. As there are multiple operations, the endpoint response structure should be able to provide the status of all operations separately with consistent error-code to allow users to retrigger failed operations programmatically if possible.

Questions:

#QuestionAgreed SolutionRemarks
1Are multiple operations for one cm-handle is considered invalid input?

No special validation, process as usual

  • 2nd create will fail
  • 2nd update will override previous
  • 2nd delete will be ignored
2Should system check which dmi-plugin 'owns' cm handle before deleting it? ie. is is the same service that registered the cm-handlejust delete for now until Acces Control gets implemented
Toine Siebelink will check with Tony Finnerty 
3Preferred output format

Alterntive B.

empty arrays will not appear in json at all 

Team prefers alternative A; with 'status' field
4Order of processing

Change to:

delete → create → update

It will help us to handle the case where the user wants to recreate the cm handle

Response Structure

HttpStatus

ScenarioStatus CodeResponseBody
All operations were successful200Empty
All or few operations failed500With error details from each failed operation
Invalid Input400Error Details

Response Body

The response body should give enough information for each failed operation to retry them programmatically. For each failed operation we should send the below information 

NameDescriptionMandatory?
cmHandleidentifies the failed cm-handle
  •  Mandatory
errorCodeIdentify the error
  •  Mandatory
errorTextHuman-readable error text
  •  Mandatory
statusFailure/Success; To be discussed with the team
  •  Mandatory

The response body can be structured in two ways

...

Code Block
titleResponse Structure incl status
linenumberstrue
collapsetrue
{
    "createdCmHandles": [ 
		{
 			"cmHandle": "cmHandle-1",
    		"status": "FAILURE", // Extra field to indicate the status
    		"error-code": "01",
			"error-text" : "cmhandle already exist"
		}
	],
	"updatedCmHandles": [ 
		{
 			"cmHandle": "cmHandle-2",
    		"status": "FAILURE" ,
    		"error-code": "02" ,
			"error-text" : "cmhandle does not exist" 
		}
	],
 	"faileddeletedCmHandlesdeletedCmHandles": [ 
		{
 			"cmHandle": "cmHandle-3",
    		"status": "FAILURE" ,
    		"error-code": "02" ,
			"error-text" : "cmhandle does not exist"
		}
	]
}

...

This approach meets the current requirement and has a smaller payload size (no extra field for the status).

Code Block
titleResponse without grouping(only failed)
linenumberstrue
collapsetrue
{
    "failedCreatedCmHandles": [ 
		{
 			"cmHandle": "cmHandle-1",
    		"error-code": "01",
			"error-text" : "cmhandle already exist"
		}
	],
	"failedUpdatedCmHandles": [ 
		{
 			"cmHandle": "cmHandle-2",
    		"error-code": "02" ,
			"error-text" : "cmhandle does not exist" 
		}
	],
 	"deletedCmHandlesfailedDeletedCmHandles": [ 
		{
 			"cmHandle": "cmHandle-3",
    		"error-code": "02" ,
			"error-text" : "cmhandle does not exist"
		}
	]
}

...

Should we indicate if something can be fixed with retry?


CodeSloganApplicable to
CreateUpdateRemove
00unknown/otherYesYesYes
01cm-handle does not existNoYesNo*
02

cm-handle already exist

YesNoNo
03not allowed**?YesYes

Notes
* remove will ignore non-existing cm handles (not an error, assume already deleted)
** suggested future error (for illustration purposes)

...