...
Description | Notes | Decision | |
---|---|---|---|
1 | Priority of async calls | In Istanbul, async calls are required only in pass-through cases. NCMP does not have to handle these requests | |
2 | Will we use the data node wrapper on GET rest operations? | Currently, we wrap the response of GET operations using the data node wrapper. | |
3 | In the URI will we distinguish between data and operations (RFC calls) as part of the path? | e.g. http://localhost:8080/cps/api/v1/data http://localhost:8080/cps/api/v1/operation | |
4 | Parent data resource identifier can handle any path using the same query parameter
| ||
5 | Yml should include return types and examples of the payload | ||
6 | camel case or dash in URI | ||
7 | Insert /resource-path in front of the resource path to prevent ambiguous paths | <OP>/ncmp /<v{v-number}>/cmhandle/<cm-handle>/<data|operations|{ncmp-action}>/ds/{datastore}/resource-path/<resource-path>?<query> | |
8 | Granularity of update scenarios (and priority) |
| |
9 | There is no automatic fallback to passthrough | The client will have the specify the default |
Principles
...
RESTCONF
...
/
...
RESTCONF/NETCONF relationship
NCMP URI
...
# | Usecase | NCMP Datastore | Path | ?fields | ?topic | Query | Time frame |
---|---|---|---|---|---|---|---|
1 | Read | passthrough-running | RESTConf Path only | Implemented by SDNC/Node | Implemented by DMI Plugin | Not supported | Istanbul |
2 | Read | ncmp-datastores:operational | CPSPath only | TBD | TBD | Limited xpath functionality | Istanbul |
3 | Create | passthrough-running | RESTConf Path only | N/A | N/A | N/A | Istanbul |
4 | Create | ncmp-datastores:running | CPSPath only | N/A | N/A | N/A | > Istanbul |
5 | Delete | passthrough-running | RESTConf Path only | N/A | N/A | Not supported | Istanbul |
6 | Delete | ncmp-datastores:running | CPSPath only | N/A | N/A | Not supported | > Istanbul |
7 | Update | passthrough-running | RESTConf Path only | N/A | N/A | N/A | Istanbul |
8 | Update | ncmp-datastores:running | CPSPath only | N/A | N/A | N/A | > Istanbul |
9 | Patches | passthrough-running | RESTConf Path only | N/A | N/A | N/A | Istanbul |
10 | Patches | ncmp-datastores:running | CPSPath only | N/A | N/A | N/A | > Istanbul |
11 | Bulk | passthrough-running | RESTConf Path only | N/A | N/A | N/A | > Istanbul |
12 | Bulk | ncmp-datastores:running | CPSPath only | N/A | N/A | N/A | > Istanbul |
13 | Action | passthrough-running | RESTConf Path only | N/A | N/A | N/A | Istanbul? |
14 | Action | ncmp-datastores:running | CPSPath only | N/A | N/A | N/A | Istanbul? |
...
REST API
Req/usecase | REST Method | URI / Payload | Header Parameters | Request/Response Example | Status | ||
---|---|---|---|---|---|---|---|
1 | NCMP-CM-001-2 Read a data resource directly from source (passthrough) for a cmHandle - a syncasync | GET | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds
| Accept: application/json | Scenario : Read the GNBCUCPFunction for cmhandle "335ff" as passthrough Method : GET URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores: Header : Event Response: { [ } | ||
2 | NCMP-CM-001-2 Read a data resource directly from source (passthrough) for a cmHandle. Only return specific field(s). Synchronous call | GET | {ncmp-root}/ncmp/v1/cm-handle//ds /ncmp-datastores:passthrough-running/{dataresource-identifier}?fields={fields} | Accept: application/json | Scenario : Read the EUtranCellFDD.(administrativeState, Method : GET URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores: Header : Response: HTTP/1.1 200 OK { [ | ||
3 | ALTERNATIVE OUTPUT TO ABOVE NCMP-CM-001-2 Read a data resource directly from Synchronous call | GET | {ncmp-root}/ncmp/v1/cm-handle//ds /ncmp-datastores:passthrough-running/{dataresource-identifier}?fields={fields} | Accept: application/json | Scenario : Read the EUtranCellFDD.(administrativeState, Method : GET URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores: Header : Response: HTTP/1.1 200 OK { [ OR "/ManagedElement[@id="Kista-001"]/ENodeBFunction[@id="1"] OR "xpath": "/ManagedElement[@id="Kista-001"]/ENodeBFunction | Under Review Talk to Niamh and Toine on the different options | |
4 | NCMP-CM-001-2Read a data resource with some leafvalue leaf value condition directly from source (passthrough) for a cmHandle. Only Synchronous calcall | GET | {ncmp-root}/ncmp/v1/cm-handle//ds /ncmp-datastores:passthrough-running/{dataresource-identifier[]}?fields={fields} &topic={topicId} | ContentType: application /json | Scenario : Read the LocalSctpEndpoint.(interfaceUsed==X2, Method : GET URI : {ncmp-root}/ncmp/v1/cm-handle/335ff/ds/ncmp-datastores: Header : Response: HTTP/1.1 200 OK { [ } | Under Review | |
5 | NCMP-CM-001-4 Create a data resource for a cmhandle | POST | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds { OR with datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhande>/ { | ContentType: application /json | Scenario : Create ericsson-nrsectorcarrier-vdu-add:NRSectorCarrier=4 Method : POST URI : {ncmp-root}/ncmp/v1/cm-handle/ ManagedElement 34l5k32/ [@id=Kista-001]/GNBDUFunction[@id=1] Header : Body : { | ||
6 | NCMP-CM-001-4 Update a data resource for a cmhandle | PATCH | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds { OR with datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhande>/ { | ContentType: application /json | Scenario : Update ericsson-nrsectorcarrier-vdu-add:NRSectorCarrier=4 Method : PATCH URI : {ncmp-root}/ncmp/v1/cm-handle/ ManagedElement 34l5k32/ [@id=Kista-001]/GNBDUFunction[@id=1]/NRSectorCarrier[@id=4] OR {ncmp-root}/ncmp/v1/cm-handle/ /NRSectorCarrier[@id=4] // 34l5k32/ should resolve to a single resource/node Header : Body : { | ||
7 | NCMP-CM-001-5 Delete a data resource for a cmhandle | DELETE | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds OR with datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhande>/ | ContentType: application /json | Scenario : Create ericsson-nrsectorcarrier-vdu-add:NRSectorCarrier=4 under _3gpp-common-managed-element:ManagedElement=Kista-001 /_3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 Method : DELETE URI : {ncmp-root}/ncmp/v1/cm-handle/34l5k32/ManagedElement [@id=Kista-001]/GNBDUFunction[@id=1]/NRSectorCarrier[@id=4] OR {ncmp-root}/ncmp/v1/cm-handle/34l5k32//NRSectorCarrier[@id=4] Header : Accept: application/json Body : {} | ||
8 | NCMP-CM-001-1 Get model (module set) for CMHandle | GET | {ncmp-root}/ncmp/v1/model/<handleId> | Accept: application/ yang- data+json | Scenario : Get the model data for CMHandle with id "335ff" Method : GET URI : {ncmp-root}/ncmp/v1/model/335ff Header : Response: { "ietf-yang-library:modules-state" : { | ||
9 | NCMP-CM-001-4 Create a data resource for a cmhandle | POST | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds { OR with datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhande>/ { | Content- Type: application /yang- data+json | Scenario : Create ericsson-nrsectorcarrier-vdu-add:NRSectorCarrier=4 Method : POST URI : {ncmp-root}/ncmp/v1/cm-handle/ _3gpp-common- 34l5k32/ managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm- Header : Body : { | ||
10 | NCMP-CM-001-5 Delete a data resource for a cmHandle | DELETE | {ncmp-root}/ncmp/v1/<handleId>/ds/ncmp- OR with datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhande>/ | Content-Type: application/yang- data+json | Scenario : Delete NRSectorCarrier=4 Method : DELETE URI : {adapter-root}/ncmp/v1/cm-handle/ _3gpp-common- 34l5k32/ managed-element:ManagedElement=Kista-001/_3gpp-nr-nrm- | ||
11 | NCMP-CM-001-3 Update a data resource for a cmHandle | PATCH | {ncmp-root}/ncmp/v1/data/<handleId>/ds/ncmp- OR with datastores defaults {ncmp-root}/ncmp/v1/cmhandle/<cmhandle>/ | Content-Type: application/yang- data+json | Scenario : : PATCH Method : {ncmp-root}/ncmp/v1/cm-handle/d32455f/_3gpp-common- URI : Header : Body { _3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 : { | ||
12 | NCMP-CM-001-8 Multiple edits under a target data | PATCH | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds OR using datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ | Content-Type: application/yang- patch+json | Scenario : Make multiple updates under the GNBDUFunction=1 data Method : PATCH URI : {ncmp-root}/ncmp/v1/cm-handle/32rf234/_3gpp-common- Header : Body : { "ietf-restconf:yang-patch" : { Response : HTTP/1.1 200 OK { | ||
13 | NCMP-CM-001-6 Execute a yang action | POST | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds Note : If the "action" statement OR using datastores defaults {ncmp-root}/ncmp/v1/cm-handle { "param1Name" : } | Content-Type: application/yang- data+json | Method : POST URI : {ncmp-root}/ncmp/v1/cm-handle/3445fff/_3gpp-common- Header : Body : | ||
14 | NCMP-CM-001-7 Execute an rpc operation | POST | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle> { Note : If there is no "input" OR using datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhandle> { | Content-Type: application/yang- data+json | Method : POST URI : {ncmp-root}/ncmp/v1/cm-handle/3445fff/operations/_3gpp- Header : Body : | ||
15 | NCMP-CM-001-9 Read a filtered set of data under a data | GET | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds options Option Description fields Request a subset of the target OR using datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhandle> | Accept: application /yang-data +json | Scenario : Read GNBDUFunction=1.userLabel and NRSectorCarrier with Method : GET URI : {ncmp-root}/ncmp/v1/cm-handle/3fsdfr3/_3gpp-common- {ncmp-root}/ncmp/v1/cm-handle/3fsdfr3/ManagedElement=Kista-001 Header : : Body Response : HTTP/1.1 200 OK _3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 { "userLabel" : "myGnodeBFunction-1", _3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=1 { _3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=3{ _3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=4 { } } | ||
16 | NCMP-CM-001-9 Read descendant data resources with | GET | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds options Option Description fields Request a subset of the target OR using datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ | Accept: application /yang-data+ json | Scenario : Read all NRCellDU MOs with attributes userLabel and id under Method : GET URI : {ncmp-root}/ncmp/v1/cmhandle/3445fff/_3gpp-common- Header : Response : HTTP/1.1 200 OK { _3gpp-nr-nrm-nrcelldu:NRCellDU=1 { _3gpp-nr-nrm-nrcelldu:NRCellDU=4 { _3gpp-nr-nrm-nrcelldu:NRCellDU=5 { | ||
17 | NCMP-CM-001-10 Read data resources to a given depth | POST | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds Option Description depth Request limited sub-tree depth If '1' then only immediate data 'unbounded' will get the full tree OR using datastores defaults {ncmp-root}/ncmp/v1/data/<cmhandle>/{data- | Accept: application /yang- data+json | Method : POST URI : {ncmp-root}/ncmp/v1/cm-handle/3445fff/_3gpp-common- Header : : Body Response : HTTP/1.1 200 OK _3gpp-nr-nrm-nrsectorcarrier: _3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=3{ _3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier=4 { _3gpp-nr-nrm-nrcelldu:NRCellDU=1 { _3gpp-nr-nrm-nrcelldu:NRCellDU=4 { _3gpp-nr-nrm-nrcelldu:NRCellDU=5 { | ||
18 | NCMP-CM-001-11 Create or replace the target data | PUT | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ds/ OR using datastores defaults {ncmp-root}/ncmp/v1/cm-handle/<cmhandle>/ | Accept: application /yang-data+ json | Method : PUT URI : {ncmp-root}/v1/cm-handle/3445fff/_3gpp-common-managed- Header : Body : | ||
19 | NCMP-CM-002-1 Get data for list of CMHandles | PUT | {ncmp-root}/ncmp/v1/ds/{datastore}/{data- OR using datastores defaults {ncmp-root}/ncmp/v1/{data-resource-identifier} | Accept: (yangData | Scenario Get the NRCellDU=Cell-001 data for multiple cmhandles Method : PUT URI : {ncmp-root}/ncmp/v1/ds/ncmp-datastores:passthrough-running? Header : Body : Response : HTTP/1.1 200 OK "response" : [ "top3gpp:id" : "NR-Cell-001" }, _3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 { "_3gpp-nr-nrm-nrcelldu:NRCellDU=NR- "top3gpp:id" : "NR-Cell-001" } } }, _3gpp-nr-nrm-gnbdufunction:GNBDUFunction=1 { "_3gpp-nr-nrm-nrcelldu:NRCellDU=NR-Cell- } { "ietf-restconf:errors" : { } } ] | ||
20 | NCMP-CM-002-2 Read resource data (with 'fields') for list | POST | {ncmp-root}/ncmp/v1/ds/{datastore}/{data- OR {ncmp-root}/ncmp/v1/{data-resource-identifier} | Accept: (yangData | Scenario Get the of NRSectorCarrier and NRCellDUs Method : POST URI : {ncmp-root}/ncmp/v1//NRSectorCarrier?fields=top3gpp:id;_3gpp- Header : : Body { Response : HTTP/1.1 200 OK "response" : [ " : " cmHandle 1231", "yangData" : { "_3gpp-nr-nrm-nrsectorcarrier: "_3gpp-nr-nrm-nrsectorcarrier: "_3gpp-nr-nrm-nrsectorcarrier: "_3gpp-nr-nrm-nrcelldu:NRCellDU=1" : { "_3gpp-nr-nrm-nrcelldu:NRCellDU=4" : { "_3gpp-nr-nrm-nrcelldu:NRCellDU=5" : { } } }, { " : " cmHandle 1232", "data" : { "_3gpp-nr-nrm-nrsectorcarrier: "_3gpp-nr-nrm-nrsectorcarrier: } }, { "_3gpp-nr-nrm-nrsectorcarrier: "_3gpp-nr-nrm-nrcelldu:NRCellDU=1" : { } }, { " : " cmHandle 1234", "yangData" : { _3gpp-nr-nrm-gnbdufunction: "_3gpp-nr-nrm-nrcelldu:NRCellDU=1 { } } ] } | ||
21 | NCMP-CM-002-4 Execute a yang action on multiple | POST | {ncmp-root}/ncmp/v1/data/{data-resource- input: { Note : If the "action" statement | Content-Type: (yangData | NCMP-CM-002-4 Execute a yang action on multiple POST {ncmp-root}/ncmp/v1/data/{data-resource- input: { Note : If the "action" statement Content-Type: (yangData Method : POST URI : {ncmp-root}/ncmp/v1/data/_3gpp-common-managed-element: Header : Body : "yangData" : { Response Success HTTP/1.1 202 Accepted //EMPTY BODY Error Response : HTTP/1.1 202 Accepted response : [ { 1232", "yangData" : { ietf.org/html/rfc6241#section-4.3 "error-type" : "protocol", 1234", "yangData" : { "error" : [ | ||
22 | NCMP-CM-002-5 Execute an rpc operation on multiple | POST | ncmp-root}/ncmp/v1/ /{module-name}: operations {action} { Note : If there is no "input" | Content-Type: application/json | Method : POST URI : {ncmp-root}/ncmp/v1/ /_3gpp-common-managed- operations element:ManagedElement=Kista-001/_3gpp-nr-nrm-gnbdufunction: Header : Body : operation : "action", | ||
23 | NCMP-DAO-004 | GET/ POST/ PATCH /PUT/ DELETE | {ncmp-root}/ncmp/v1/cm-handle/<cmhandle> =<dmaap-topic-Identifier> topic {ncmp-root}/ncmp/v1/cm-handle/<cmhandle> = topic <dmaap-topic-Identifier> **Async communication channel is DMaaP Immediate response with a requestId is sent to | Accept : application/json | Scenario : Async request to NCMP Method : GET/POST/PATCH/PUT/DELETE URI : {ncmp-root}/ncmp/v1/cm-handle/de3455/data/ds/ncmp-datastores: =5G:SectorCarrierOrchestrator-0012391:12 topic Body : // Include body where required Response : response data is published on the topic identified by <topicIdentifier> |
Output Specification
?fields={fields}&topic= {topicId}
...
# | Description | Notes | Decision | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Yml update with return types with examples of the payload | ||||||||||||
2 | Update CPS openAPI.yml with return types |
|
References
Follow principles/patterns of RESTCONF RFC-8040 https://datatracker.ietf.org/doc/html/rfc8040
Follow principles/patterns of yang-patch RFC-8072 https://datatracker.ietf.org/doc/html/rfc8040
Follow principles/patterns of RESTCONF NMDA RFC-8527 https://datatracker.ietf.org/doc/html/rfc8527