Versions Compared

Key

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

...


UsecaseREST MethodURIExample
1Add a data resource for a cmHandlePOST

{dmi-root}/dmi/v1/data/ch/<cmhandle>/ds/ncmp-datastore:running/{parent-data-resource-identifier}

{

<new-yang-data-resource>

}

Content-Type: application/json

"data" payload : yang-data+json

see example 4 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
2Delete a data resource for a cmHandlePUT{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:running/{resource-identifier}see example 7 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
3Patch a data resource for a cmHandlePATCH

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:running/{resource-identifier}

{
<yang-data-for-merging>
}

Content-Type: application/json

"data" payload : yang-data+json

see example 5 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
4Patch multiple child resources for a single cmHandlePATCH

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:running/{resource-identifier}


Content-Type: application/json

"data" payload : yang-patch+json

see example 6 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
5Execute a yang action on a cmhandle instancePOST

dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:operational/{resource-identifier}/{action}


input: {
         "param1Name" :"param1Value”,
          "param2Name" : "param2Value”

}


Note : If the "action" statement has no "input" section, the request message MUST NOT include a message-body

see example 10 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
6Execute an rpc operationPOST

{dmi-root}/dmi/v1/operations/ch/<cm-handle>/ds/ncmp-datastore:operational/ {module-name}:{action}

{
input: {
            "param1Name" : "param1Value”,
             "param2Name" : "param2Value”
}
}

Note: If there is no "input" section, the request MUST NOT include a message-body

see example 11 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
7Read a filtered set of data under a data resource for a cmHandlePUT

{dmiroot}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:operational/{resource-identifier}?fields={fields-expression}

OptionDescription
fieldsRequest a subset of the target
resource contents



8Read data resources with specified fields under a given data resource for a given cmHandlePUT

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:operational/{resource-identifier}?fields={fields-expression}


OptionDescription
fieldsRequest a subset of the target
resource contents


see example 12 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
9Get data resource with 'fileds' for a cmhandle with a given scope conditionPUT{dmi-root}/dmi/v1/data/ch/{cm-handle}/ds/ncmp-datastore:operational/{resourcepath}?fields={fields}&scope={scope}see example 2 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
10Read descendant nodes to a given depth for a given cmHandlePUT

{dmi-root}/dmi/v1/data/ch/{cm-handle}/ds/ncmp-datastore:operational/{resource-identifier}?depth={level}


OptionDescription
depthRequest limited sub-tree depth in
the reply content
If '1' then only immediate resource
is retrieved
If '2' then resource plus next level
resources are retrieved


see example 12 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI
11Replace data for a CMHandlePUT

{dmi-root}/dmi/v1/data/ch/<cm-handle>/ds/ncmp-datastore:running/{resource-identifier}

{

   data : {

            .... the complete tree config to be replaced

           }

}

see example 12 CPS-391Spike: Define and Agree NCMP REST Interface#RESTAPI

...

NCMP requests cmhandles for a datasource (may be refresh of existing
datasource or for a newly registered datasource)

NCMP DMI plugin

{dmi-root}/v1/dmi-source/{unique-data-source-id}?topic={topic-id}

Content-Type: application/json

Note - the following will refresh ALL dmi data sources managed by a dmi plugin
{dmi-root}/v1/dmi-source?topic={topic-id}

Scenario : NCMP requests sync of cmhandles for a datasource
Method : GET
URI : {dmi-root}/v1/dmi-source/dmi-source-sample?topic={topic-id}
Header :
Content-Type: application/json
Body :
{}

Event Body :
{
"dmiPluginId" : "service:sample-service", //should be resolvable sevicename in k8s DNS
"dmi-source-id" : "sample-id"
"createcmhandles" : [
    {
       "cmhandle" : "sample-cmhandle-1",
       "additionalProperties" :
    {
        "subsystemId" : "sample-subsystemId-1"
         "targetId" : "sample-targedId-1"
     }
},
    {
         "cmhandle" : "sample-cmhandle-2",
         "additionalProperties" :
     {
         "subsystemId" : "sample-subsystemId-2"
           "targetId" : "sample-targedId-2"
     }
 }
...
...
],

Topic : NCMP_INVENTORY

Event Body :
{
"dmiPluginId" : "service:sample-service",
"dmi-source-id" : "dmi-source-id-001"
"createcmhandles" : # Newly discovered/created cmhandles
cmhandle-001subsystemIdtargetId-001 cmhandle-002subsystemIdtargetId..


"updatedcmhandles":#Forexamplethecmhandlehasgotrehomestoanewsystem

Use CaseRest MethodURIExample
1DMI registers a new data source with NCMP notifies NCMP of new , deleted or
changed cmhandles DMI Plugin NCMP
POST

{ncmp-root}/ncmp/v1/dmi-plugin/
{
    "dmi-plugin-id : { dmi-plugin-id }
     "dmi-source-id" : { unique-data-source-id }
}

dmi-plugin-id should be resolvable service name ink8s DNS

Scenario : Register/Create a new dmi

ch/

Scenario : DMI notifies NCMP of new cmhandles
Method : POST
URI :
-plugin data source in NCMP
Method : POST
URI :
{ncmp-root}/ncmp/v1/
dmi-plugin
ch/
Header :
Content
    Content-Type: application/json

Body
:
{}

Body
:
{
"dmi-plugin
-id
" : "
service
system:
sample-service
5555", //should be resolvable sevicename in
"dmi-source-id" : "sample"
}

Success Response :
HTTP/1.1 202 Accepted
Date: Thu, 26 Jan 2021 20:56:30 GMT
Server: example-server
{}

Error Response:
HTTP/1.1 409 Conflict
Date: Thu, 26 Jan 2021 20:56:30 GMT
Server: example-server
{
"error" : {
"error-type" : "protocol",
"error-tag" : "data exists",
"error-message" : "Datasource service:sample-service/sample already
registered/created"
}
}

An error will tell the DMI Plugin that this datasource has already been processed - no need to recover the cmhandles again.

2Delete a data source from NCMP DMI Plugin NCMP
      k8s DNS
"createdcmhandles" : [ // Used for initial cm handle registrations or subsequent
cmhandle creations (post initial registration)
{
"cmhandle" : "rf4er5454",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001"
}
},
{
"cmhandle" : "dfget656",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,
ManagedElement=Kista-002"
}
}
...
...
],
...
# Used for updates to cmhandles
"updatedcmhandles" : # For example the cmhandle has got rehomes to a new
system.
{
"cmhandle" : "rf4er5454",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001"
}
},
{
"cmhandle" : "dfget656",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,
ManagedElement=Kista-002"
}
}
...
...
],
// Used for deleted cmhandles
"removedcmhandles" : [ "sfsdf", .... ], # array of cmhandles that have been deleted
from the network. ...
}
2Get all the registered cmhandles for a
given plugin
GETDELETE{ncmp-root}/ncmp/v1/dmi-pluiginplugins/{ dmi-plugin-id}/dmi-source/ { unique-data-source-id }

Scenario
Remove a data source and all related NCMP handles from NCMP

Method :
DELETE
URI
ch
Scenario : Get all cmhandles from NCMP for a given dmi-plugin. May be used
for conciliation
Method : GET
URI : {ncmp-root}/ncmp/v1
/cmhandle-source
/dmi-
pluigin/service:sample-service/
plugins/{dmi-
source/sample-dmi-source
plugin}/ch
Header :
Content-Type: application/json

Body
:
{}

Success Response :
HTTP/1.1 202 Accepted
Date: Thu, 26 Jan 2021 20:56:30 GMT
Server: example-server
{}

Error Response:
 :
// EMPTY BODY

Success Response :
HTTP/1.1
409 Conflict
 200 Ok
Date: Thu, 26 Jan 2021 20:56:30 GMT
Server: example-server
{
"error" : {
"error-type" : "protocol",
"error-tag" : "data exists",
"error-message" : "Datasource service:sample-service/sample-dmi-source already
registered/created"
     }
}
An error will tell the DMI Plugin that this datasource has already been processed - no need to recover the cmhandles again.
3GET
      "cmhandles" : [
{
"cmhandle" : "sdf8fs0d8",
"additionalProperties" : [
"target" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001",
"subSystem" : "system-001"
]
},
{
"cmhandle" : "sdsd6567687",
"additionalProperties" : [
"target" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista002",
"subSystem" : "system-001"
]
}
...
}
3

Notify of change to CMHandle(s)

-

Topic : 'NCMP_INVENTORY' / sync request topic
Topic name should come from Data Catalog OR
should DMI registry store the topic from the initial
NCMP sync request?)

Topic : NCMP_INVENTORY


Event Body :
{
"dmi-plugin" : "sample-adapter:5555",
"createdcmhandles" : # Newly discovered/created cmhandles
{
"cmhandle" : "rf4er5454",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001"
}
},
{
"cmhandle" : "dfget656",
"additionalProperties" :
{
"subsystemId" : "system-001"
"targetId" : "Subnetwork=Stockholm,MeContext=Kista,
ManagedElement=Kista-002"
}
}
...
...
],
"updatedcmhandles" : # For example the cmhandle has got rehomes to a new system.
4Notify of change to CMHandle(s)Topic : 'NCMP_INVENTORY' / sync request topic
The topic name should come from Data Catalog OR should DMI registry store the topic from the initial NCMP sync request?)
    {
"cmhandle" : "
rf4er5454",
"additionalProperties" :
{
"subsystemId" : "
system-001"
"targetId" : "
Subnetwork=Stockholm,MeContext=Kista,ManagedElement=Kista001"
}
},
{
"cmhandle" : "
dfget656",
"additionalProperties" :
{
"subsystemId" : "
system-001"
"targetId" : "
Subnetwork=Stockholm,MeContext=Kista,
ManagedElement=Kista-002"
}
}
.
..
...
],
"removedcmhandles" : [ "sfsdf", ...
. 
],
 # array of cmhandles 
that 
have 
been 
deleted 

 
 
 
 
 
from 
the 
network. 
...
}
4Sync the model to NCMPPUT{dmi-root}/dmi/v1/sync/ch/<cmhandle>
Scenario : NCMP requests sync of cmhandle yang tree
Method : PUT
URI : {dmi-root}/dmi/v1/sync/ch/243234
Header :
Content-Type: application/json
Body :
{}


Body
:
{
{
"cmhandle" : "cmhandle-003",
"additionalProperties" :
{
"subsystemId" : "subsystemId-001"
      "
targetId
additionalProperties" :
"targetId-001"

}
{
},
    
{
    
"
cmhandle
subsystemId" : "
cmhandle
sample-
004
subsystemId"
,

"additionalProperties" :
          "targetId" 
{
: "Subnetwork=Stockholm,MeContext=Kista,ManagedElement=1"
}
"subsystemId"
}


Response
:
"subsystemId-001"

HTTP/1.1 200 OK
Date: Thu, 26 Jan
"targetId"
2017 20:
"targetId-002"}
56:30 GMT
Server: example-server

}
...
Content-Type: application/yang-data-json
...
{
],
    
"removedcmhandles" :
_3gpp-common-managed-element:ManagedElement [
"cmhandle-005", .... ], # array of cmhandles that have been deleted
 {
id=1,
from
 
the
 
network
...
"migratedcmhandles"
 _3gpp-nr-nrm-gnbdufunction:GNBDUFunction :
[
{
"cmhandle"
 
: "cmhandle-005"
 id=1,
"additionalProperties"
 
:
   nrsectcarr3gpp:NRSectorCarrier=1 { # level 
{
2
"
subsystemId
_3gpp-common-top:id" : "
subsystemId
NRSectorCarrier-
001
1"

, # level 3
"
targetId
attributes" :
"targetId-001"
}
 { # level 3
},
    
{
      "
cmhandle
txDirection" : "
cmhandle-006
DL_AND_UL", # level 4
"additionalProperties
      "arfcnUL" :

 "55555", # level 4
{
          
"subsystemId"
 
:
 
"subsystemId-001"
            
"targetId" : "targetId-002"
...
}
},
...
      ...
]
}

Model API



Use CaseRest MethodURIExample
1Get model (module set) for cmhandlesPUT

{dmi-root}/dmi/v1/model/ch/<cm-handle>

Scenario : Get the model data for a given cmhandle

Method : PUT

URI : {dmi-root}/dmi/v1/model/ch/cmhandle-001?fields=ietf-yang-library:modules-set

Header :
Content-Type: application/json
Accept: application/json

Body :

{
"operation" : "read",
"cmhandle" : "cmhandle-001",
"additionalProperties" : [
"target" : "sample-target",
"subSystemoperation" : "subSystem-001"
]
}
Response:
{read",
"cmHandlecmhandle" : "cmhandle-001",
"ietf-yang-library:modules-setadditionalProperties" : [ # from RFC 8525
{
"nametarget" : "123456sample-target",
"module" : [
"subSystem" : {"subSystem-001"
]
}

Response:

{
"namecmHandle" : "storecmhandle-001",
"ietf-yang-library:modules-set" : [ # "revision"from : "2020-12-09",RFC 8525
{
"namespacename" : "org:onap:cps:test:store: "123456",
"submodulemodule" : [
{
"name" : "bookstorestore",
"revision" : "2020-12-1709",
"namespace" : "org:onap:cps:test:bookstorestore",
"submodule" : [
{
"name" ...: "bookstore",
}
"revision" : "2020-12-17",
]
"namespace" : "org:onap:cps:test:bookstore",
}
"submodule" : ][
},
{
"name" : "ietf-yang-library", ...
"revision" : "2016-06-21", }
"namespace" : "urn:ietf:params:xml:ns:yang:ietfyang-library"
]
}
]
}
}

GET Request with body


The HTTP libraries of certain languages (notably JavaScript) don’t allow GET requests to have a request body. In fact, some users are surprised that GET requests are ever allowed to have a body.

...