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

Compare with Current View Page History

« Previous Version 6 Next »

CPS-390 - Getting issue details... STATUS

DMI URI

DMI URI format to follow below pattern Sandeep Shah

<OP>dmi/<v{v-number}>/<data|operations|dmi-action>/ch/<cmHandle>/ds/{datastore}/[rp:]<resource-path>?<query>




<OP>mandatorythe HTTP method
dmimandatorythe dmi root resource
<v{v-number}>mandatoryversion of the dmi interface is the target resource URI is the query parameter list
<data|operations|dmi-action>mandatoryyang data, rpc operation or a (non-modeled) ncmp api action
<cmHandle>mandatoryunique (string) identifier of a yang tree instance.
{datastore}optionaloptional datastore
<resource-path>optionalthe path expression identifying the resource that is
being accessed by the operation. If this field is not
present, then the target resource is the API itself.
<query>optionalthe set of parameters associated with the RESTCONF message;
see Section 3.4 of [RFC3986]. RESTCONF parameters have 
the familiar form of "name=value" pairs. Most query parameters are
optional to implement by the server and optional to use by the client. Each optional query parameter is identified by a URI

Datastore

If datastore (ds/{datastore}) is not included in the URL then the request is defaulted to ncmp-datastore:running/operational.

If the cmhandle metadata indicates that data is not synched in CPS then the request is forwarded to the dmi-plugin

RESTCONF/NETCONF relationship


REST API


UsecaseREST MethodURIExample
1Add a data resource for a cmHandlePOST

dmi-root}/dmi/v1/data/ch/<cm-handle>/{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{dmiroot}/dmi/v1/data/ch/<cm-handle>/{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>/{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>/{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>/{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>/ {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>/{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>/{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}/{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}/{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>/{resource-identifier}

{

   data : {

            .... the complete tree config to be replaced

           }

}

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


DMI Inventory



Use CaseRest MethodURIExample
1DMI registers a new data source with 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


2Delete a data source from NCMP DMI Plugin NCMPDELETE{ncmp-root}/ncmp/v1/dmi-pluigin/ { dmi-plugin-id}/dmi-source/ { unique-data-source-id }
3NCMP requests cmhandles for a datasource (may be refresh of existing
datasource or for a newly registered datasource) NCMP DMI plugin
GET

{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}


4Notify 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 initialNCMP sync request?)

Model API



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

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


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.

The truth is that RFC 7231—the RFC that deals with HTTP semantics and content—does not define what should happen to a GET request with a body! As a result, some HTTP servers allow it, and some—especially caching proxies—don’t.

The authors of Elasticsearch prefer using GET for a search request because they feel that it describes the action—retrieving information—better than the POST verb. However, because GET with a request body is not universally supported, the search API also accepts POST requests: }

The same rule applies to any other GET API that requires a request body.
See Elasticsearch details here for more info


yang-patch operations (see rfc8072)


"create", "delete", "insert", "merge", "move", "replace", and "remove"


YANG Data Structure Extensions


https://tools.ietf.org/html/rfc8791

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


  • No labels