1 .. This work is licensed under a Creative Commons Attribution 4.0
3 .. http://creativecommons.org/licenses/by/4.0
4 .. Copyright 2018 ORANGE
14 NBI stands for NorthBound Interface. It brings to ONAP a set of API that can
15 be used by external systems as BSS for example. These API are based on
18 **********************************************
19 Global NBI architecture for Casablanca release
20 **********************************************
22 Following illustration provides a global view about **NBI** architecture,
23 integration with other ONAP components and API resource/operation provided.
25 .. image:: images/ONAP_External_ID_Casablanca.jpg
32 APIs are described with a state version with “v” following the API Name,
33 e.g.: ``nbi/api/v3/productOrder``.
34 The schema associated with a REST API must have its version number aligned
35 with that of the REST API.
37 The version number has major, minor and revision numbers. E.g. v1.0.0
38 The version number (without the revision number) is held in the URI.
40 The major version number is incremented for an incompatible change.
41 The minor version number is incremented for a compatible change.
42 For minor modifications of the API, version numbering must not be updated,
43 provided the following backward compatibility rules are respected:
45 - New elements in a data type must be optional (``minOccurs=0``)
46 - Changes in the cardinality of an attribute in a data type must be from
47 mandatory to optional or from lower to greater
48 - New attributes defined in an element must be optional (absence of
50 - If new enumerated values are included, the former ones and its meaning must
52 - If new operations are added, the existing operations must be kept
53 - New parameters added to existing operations must be optional and existing
54 parameters must be kept
56 For major modifications of the API, not backward compatible and forcing client
57 implementations to be changed, the version number must be updated.
63 .. |pdf-icon| image:: images/pdf.png
66 .. |swagger-icon| image:: images/swagger.png
70 .. |swaggerUI-icon| image:: images/swaggerUI.png
73 .. |html-icon| image:: images/html.png
76 .. |plantuml-icon| image:: images/uml.jpg
79 .. |postman-icon| image:: images/postman.png
82 .. |xml-icon| image:: images/text_xml.png
86 :header: "API", "|swagger-icon|", "|swagger-icon|", "|plantuml-icon|", "|xml-icon|"
89 " ", "json file", "yaml file", "plant UML file", "xml schemas"
90 "hub", ":download:`link <api_hub/swagger.json>`", ":download:`link <api_hub/swagger.yaml>`", ":download:`link <api_hub/api.plantuml>`", ":download:`link <api_hub/model.xsd>`"
91 "serviceCatalog", ":download:`link <api_serviceCatalog/swagger.json>`", ":download:`link <api_serviceCatalog/swagger.yaml>`", ":download:`link <api_serviceCatalog/api.plantuml>`", ":download:`link <api_serviceCatalog/model.xsd>`"
92 "serviceInventory", ":download:`link <api_serviceInventory/swagger.json>`", ":download:`link <api_serviceInventory/swagger.yaml>`", ":download:`link <api_serviceInventory/api.plantuml>`", ":download:`link <api_serviceInventory/model.xsd>`"
93 "serviceOrder", ":download:`link <api_serviceOrder/swagger.json>`", ":download:`link <api_serviceOrder/swagger.yaml>`", ":download:`link <api_serviceOrder/api.plantuml>`", ":download:`link <api_serviceOrder/model.xsd>`"
94 "status", ":download:`link <api_status/swagger.json>`", ":download:`link <api_status/swagger.yaml>`", ":download:`link <api_status/api.plantuml>`", ":download:`link <api_status/model.xsd>`"
104 This API is based from TMF633 serviceCatalog. Only high level information
105 is provided - Swagger is documented.
107 Only ``serviceSpecification`` resource is provided.
108 Information are retrieved in **SDC** (and in TOSCA file)
109 - Only GET operation is provided - this API does not update **SDC**.
111 Only characteristics at service level will be retrieved in ONAP TOSCA file.
112 For example if an ONAP service is composed of VNF and the VF module, the
113 ``serviceSpecification`` resource will only feature characteristic described in
114 the ONAP service TOSCA model and not attributes in the TOSCA files for VNF
117 Only *basic* service characteristics will be managed in this release. By
118 *basic* we mean string, boolean, integer parameter type and we do not manage
119 *map* or *list* parameter type.
122 **GET serviceSpecification(list)**
124 Example: ``GET /nbi/api/v3/serviceSpecification/
125 ?category=NetworkService&distributionStatus=DISTRIBUTED``
127 It is possible to retrieve a list of ``serviceSpecification`` (get by list).
129 Only attributes ``category`` and ``distributionStatus`` are available for
130 ``serviceSpecification`` filtering. It is possible to select retrieved
131 attributes using fields attribute.
133 If no ``serviceSpecification`` matches, an empty list is send back.
135 **GET service Specification (id)**
137 Example: ``GET /nbi/api/v3/serviceSpecification/{uuid}``
139 It is use to retrieve one ``serviceSpecification`` - all available information
140 are retieved (see Swagger for description)
146 This API is based from TMF638 serviceInventory. Only high level information
147 is provided - Swagger is documented.
149 This API retrieves service(s) in the **A&AI** inventory. Only following
150 attributes will be retrieve in service inventory: ``id``, ``name``, ``state``
153 **GET Service Inventory (list)**
155 Example: ``GET /nbi/api/v3/service/?relatedParty.id=Pontus``
157 GET (by list) allows to request with following criteria (all optional) :
159 * ``id`` (id of the service instance) - id of the service instance
161 * ``serviceSpecification.id`` - id of the service specification (catalog)
162 * ``serviceSpecification.name`` - name of the service specification (catalog)
163 * ``relatedParty.id`` - id of the (**A&AI**) customer - if not filled we use
166 if no service matches, an empty list is send back.
168 1. If a request is send without any parameter, we’ll retrieve the list of
169 service-instance for the *generic* customer
170 2. If only customer parameter is filled (``relatedParty.id`` +
171 role= relatedParty’ONAPcustomer’) we’ll retrieve the list of
172 service-instance for this customer
173 3. If serviceSpecification.id or name is filled we’ll retrieve the list of
174 Service instance (from this service specification) – We’ll use the customer
175 id if provided (with Role=’ONAPcustomer) or generic if no customer id
178 **GET Service Inventory (id)**
180 Example: ``GET /nbi/api/v3/service/{id}`` When querying for a specific service
181 instance id, no additional filters are required.
183 The Service Inventory API will retrieve the service instance data from A&AI using
184 the nodes query with the service instance id as the key. ``relatedParty.id`` +
185 ``serviceSpecification.name`` are added to the response based on the A&AI service
192 This API is based from TMF641 serviceOrder. Only high level information
193 is provided - Swagger is documented.
195 It is possible to use POST operation to create new ``serviceOrder`` in **NBI**
196 and triggers service provisioning. GET operation is also available to retrieve
197 one service order by providing id or a list of service order. For this release,
198 only a subset of criteria is available:
203 • ``orderDate.gt`` (orderDate must be greater – after -than)
204 • ``orderDate.lt`` (orderDate must be lower-before - than)
205 • ``fields`` – attribute used to filter retrieved attributes (if needed) and
207 • ``offset`` and ``limit`` are used for pagination purpose
209 ServiceOrder will manage following ``actionItem`` action:
211 • ``add`` - a new service will be created
212 • ``delete`` - an existing service will be deleted
213 • ``change`` - an existing service will be deleted and then created with new
216 **Prerequisites & assumptions**
218 • Cloud & tenant information MUST BE defined in the external API property file
219 • Management of ONAP customer for add service action
221 With the current version of APIs used from **SO** and **A&AI** we need to
222 manage a *customer*. This customer concept is confusing with Customer BSS
223 concept. We took the following rules to manage the *customer* information:
225 • It could be provided through a ``serviceOrder`` in the service Order a
226 ``relatedParty`` with role ``ONAPcustomer`` should be provided in the
227 ``serviceOrder`` header (we will not consider in this release the party
228 at item level). External API component will check if this customer exists
229 and create it in **A&AI** if not.
230 • If no ``relatedParty`` is provided, the service will be affected to
231 ``generic customer`` (dummy customer) – we assume this ``generic customer``
233 • Additionally **NBI** will create in **A&AI** the service-type if it did not
234 exists for the customer
236 **ServiceOrder management in NBI will support 2 modes:**
238 • E2E integration - **NBI** calls **SO** API to perform an End-To-end
240 • Service-level only integration - **NBI** will trigger only **SO** request at
241 serviceInstance level. **SO** prerequisite: **SO** must be able to find a
242 BPMN to process service fulfillment (integrate VNF, VNF activation in
245 The choice of the mode is done in NBI depending on information retrieved in
246 **SDC**. If the serviceSpecification is within a Category “E2E Service” ,
247 **NBI** will use E2E **SO** API, if not only API at service instance level
250 There is no difference or specific expectation in the service order API used
253 **ServiceOrder tracking**
255 State management: States are only managed by ServiceOrder component and could
256 not be updated from north side via API.
257 Accordingly to service order item fulfillment progress, order item state are
258 updated. Order state is automatically updated based on item state.
259 Additionnally to this state, **NBI** provided a completion percent progress to
260 have detailled information about order progress.
261 Order Message are retrieved in the ``GET serviceOrder`` to provide **NBI** used
262 addtionnal information about ``serviceOrder`` management.
266 It is possible for an external system to subscribe to service order
267 notifications. 3 events are managed:
269 • A new service order is created in **NBI**
270 • A service order state changes
271 • A service order item state changes
273 These 3 events have distinct notification allowing any system to subscribe to
274 one, two or all notification types.
276 The implementation will be split in 2 components:
278 • A HUB resource must be managed within the NBI/serviceOrder API. This HUB
279 resource allows system to subscribe to **NBI** notification
280 • An Event API must be available at listener side in order to be able to
281 receive Listener (when event occurs). **NBI** will be upgraded to use this
282 API as client – **NBI** will shoot ``POST listener/``
284 The following diagram illustrates such notification flow:
286 .. image:: images/notification.jpg
294 Technical information about **NBI** (dependencies, configuration, running &
295 testing) could be found here:
296 :doc:`NBI_Developer_Guide <../architecture/NBI_Developer_Guide>`
298 API Flow illustration (with example messages) is described in this document:
299 :download:`nbicallflow.pdf <pdf/nbicallflow.pdf>`