[AAI] Fix TOC for the release notes documentation
[aai/aai-common.git] / docs / AAI REST API Documentation / AAIRESTAPI_AMSTERDAM.rst
1 .. contents::
2    :depth: 3
3 ..
4 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
5 .. http://creativecommons.org/licenses/by/4.0
6
7 \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
8
9 AAI REST API
10 ++++++++++++
11
12 Overview
13 ========
14
15 The AAI REST API provides access to the AAI active inventory graph. The
16 API is largely configured off of models and configuration files. Each
17 vertex in the graph has an API that can be called separately or, if part
18 of a tree structure, as a nested element with one or more generations
19 (parent, grandparent, etc.).
20
21 The edges of the graph are provisioned using a relationship list
22 construct. For PUT methods, a relationship contains the vertex type or
23 category (related-to) and a list of relationship data which captures the
24 key pieces of data required to uniquely identify the resource. On a GET
25 method, the above information and a URL are returned. The URL can be
26 used to GET all the details of that object. The URL returned is suitable
27 for retrying failed commands but should not be expected to be cacheable
28 for very long periods (e.g., the version of the URL may get deprecated
29 when the release changes).
30
31 Concurrency control for AAI is in place. The assumptions made for the
32 implementation are as follows:
33
34 -  A client always gets a resource before updating through PUT or
35    deleting it.
36
37 -  All resource updates and deletions are done via the AAI REST APIs
38
39 -  This solution will apply to PUT and DELETE operations.
40
41 -  The resource-version attribute is now in every container
42
43 -  The update API is not subject to concurrency control because it is
44    only intended to be used by clients who are the definitive source of
45    truth for the attributes they are changing. An update through the
46    update API will however reset the resource-version so clients using
47    PUT and DELETE will not risk updating with stale data.
48
49 -  The PATCH REST verb is not subject to concurrency control because it
50    is only intended to be used by clients who are the definitive source
51    of truth for the attributes they are changing. An update through the
52    update API will however reset the resource-version so clients using
53    PUT and DELETE will not risk updating with stale data.
54
55 How to Use this Document
56 ========================
57
58 When you click on the API documentation, you will see the Summary of
59 APIs broken down by namespace (e.g., cloud-infrastructure, business,
60 network, service-design-and-creation). You can search for **Tag:**
61 (matching the explicit case) to move from namespace to namespace through
62 the Summary.
63
64 Search for **Paths** to skip past the Summary section where there will
65 be more detail about each API. Query parameters are provided here, as
66 well as links to our error codes.
67
68 Search for **Schema definitions** to see the definitions of the
69 payloads. In your browser URL, you can type /#/definitions/node-name at
70 the end of the html address to skip directly to a payload definition.
71
72 Note that the schema definitions now contain information about the
73 delete scope of a node (also referenced in this document) and some
74 related node information (also reference in this document as Edges).
75
76 Once AAI has a model and configured it, the AAI development server can
77 be used to generate sample XML and JSON payloads, according to the
78 Accept header passed in the request. This is done by calling the
79 "plural" version of an API followed by the word example (e.g.,
80 /vserver/vservers/example). This returns a GET result array with one
81 entry. That single entry can be sent in a PUT request with actual data
82 (the resource-id does not need to be in the PUT payload as it is on the
83 URL).
84
85 Document Conventions
86 ====================
87
88 Information that is largely guidance or aspirational will be show in
89 gray italicized text. This information should not be relied upon or
90 referenced at this point except with the understanding that it WILL
91 change.
92
93 **Bold blue text** will be used to cover communication to our clients
94 that may not be enforced by AAI. The sources of truth (our clients)
95 populate AAI and are expected to send the correct information, having
96 applied business rules that live in the client systems.
97
98 Deprecation Warnings and History
99 ================================
100
101 V11
102
103 API retirements:
104
105 -  The actions/update API will be retired. Clients must switch to PATCH.
106    There is one grandfathered usage for vpe update flows which will be
107    retired in v11.
108
109 -  The edge tag query will be retired.
110
111 Notable attribute and/or valid value changes (generally also impacts
112 events):
113
114 -  The persona-model-id and persona-version will be replaced with
115    model-invariant-id (same value as persona-model-id) and
116    model-version-id (the UUID of the specific version of a model).
117    Persona-model-customization-id will be replaced by
118    model-customization-id.
119
120 -  The operational-state attribute will be replaced by
121    operational-status and the only valid values will be in-service-path
122    and out-of-service-path
123
124 -  The vpn-binding object will be split in two to reflect more than one
125    route-target per binding. The route-target will be a child of
126    vpn-binding and some attributes will move from vpn-binding to
127    route-target.
128
129 -  The following license related attributes will be removed from
130    generic-vnf: license-key, entitlement-assignment-group-uuid,
131    entitlement-resource-uuid, license-assignment-group-uuid, and
132    license-key-uuid due to the introduction of the entitlement and
133    license children.
134
135 Event Specific:
136
137 -  Normal impacts due to renaming or adding attributes, splitting
138    objects, etc. Please see swagger documentation for objects of
139    interest.
140
141 -  In v11, clients that require lineage, children, or relationship
142    information need to subscribe to a different DMaaP topic than the
143    current one.
144
145 Relationship List
146
147 -  The related-link will be a URI and thus not contain
148    https://{serverroot} (impacts events)
149
150 -  Thhe related-link will be used on a PUT as the "first choice" to
151    identify the related resource. The relationship-data structure, which
152    contains the unordered set of keys, is still an acceptable way to
153    relate two objects but, *if both the relationship-data and the
154    related-link are passed, and they don't agree, the related-link will
155    be used without warning that the data is inconsistent*.
156
157 -  The relationship-data will be ignored on PUT.
158
159 AAI API Definition
160 ==================
161
162 The API structure is composed of:
163
164 -  The HTTP command, which indicates the operation to perform
165
166 -  The HTTP URI, which defines what object this operation is related to
167
168 -  The HTTP version, which MUST be 1.1
169
170 Available HTTP commands are:
171
172 -  PUT: used to create or update an object
173
174 -  DELETE: used to delete an object or a set of objects
175
176 -  GET : used to query an object or set of objects
177
178 -  PATCH : used to update specific fields owned by the client doing the
179    update
180
181 The HTTP URI is built according to this pattern:
182
183 https://{serverRoot}/{namespace}/{resource}
184
185 -  (serverRoot} refers to the server base url: hostname+port+base
186    path+version. Port and base path are OPTIONAL but AAI will use port
187    8443 and base path aai. The Amsterdam release version will be v11.
188
189 -  {namespace} refers to the API namespace. Supported namespaces are
190    cloud-infrastructure, business, service-design-and-creation, and
191    network
192
193 -  {resource} refers to how the object is identified according to the
194    namespace specifications.
195
196 Example
197
198 GET https://{hostname}:8443/aai
199 /v11/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}
200
201 The GET requests support a depth query parameter allowing a query to
202 stop after it has reached a certain point in the graph. This allows
203 clients to minimize the data that is returned to them. A depth=0 returns
204 the resource itself and none of its children.
205
206 Data Assumptions
207 ----------------
208
209 Given AAI is largely a correlation engine among disparate inventory
210 types, AAI will accept values as they are sent, without validating the
211 format or value of the input. It is incumbent upon the source of truth
212 to provide valid information to AAI.
213
214 Clients should do a GET prior to a PUT and change only the data that
215 they mean to affect. The REST APIs expect the payload passed to replace
216 the resource in AAI. **This is vital in our concurrency scheme. The
217 client will be returned an opaque value per entity which needs to be
218 returned back in the PUT. AAI will reject the PUT or DELETE if the
219 opaque value doesn't match what AAI has stored for that entity.**
220
221 If a leaf has been added to a model in vN+1, and a GET/PUT of a vN
222 resource is done, AAI should not affect the new leaf (i.e., it should be
223 left unchanged).
224
225 PUT and Lists
226 -------------
227
228 The PUT verb is used to both create and replace a resource. A given
229 resource may have child resources (e.g., customers have service
230 subscriptions; tenants have vservers and vservers have volumes).
231
232 The following convention will be followed:
233
234 If a resource is replaced and there are no tags for children, the
235 children that exist will be left alone.
236
237 If a resource is replaced and there are tags for children, the children
238 will be replaced by the list passed. If the list is empty, then children
239 will be deleted.
240
241 Note that the relationship list is a type of child resource. The same
242 conventions are followed. It is especially critical to ensure that you
243 do not send an incomplete relationship list and therefore remove edges
244 in the graph. See section 5.10 for more information on relationship
245 lists.
246
247 PATCH
248 -----
249
250 To move towards industry standards and to make our APIs easier to use by
251 clients who own specific attributes and do not require AAI to enforce
252 concurrency control around them, the PATCH verb has been introduced.
253
254 -  RFC Algorithm implemented JSON Merge PATCH
255    `tools.ietf.org/html/rfc7386 <https://tools.ietf.org/html/rfc7386>`__
256
257 -  *HTTP Verb = PATCH*
258
259 -  PATCH requires a Content-Type of "application/merge-patch+json" in
260    your HTTP headers.
261
262 -  PATCH does not support XML
263
264 -  PATCH does not require a resource version to preform these
265    modifications
266
267 -  Clients should only send what they wish to modify and whose value
268    they "own"
269
270 Example:
271
272 PATCH \ `https://<hostname>:8443/aai/v11/network/generic-vnfs/generic-vnf/cscf0001v <https://aai-int1.test.att.com:8443/aai/v7/network/generic-vnfs/generic-vnf/cscf0001v>`__
273
274     {
275
276       "vnf-id": "cscf0001v", This key needs to be here but you cannot
277 modify the key
278
279       "regional-resource-zone": null,
280
281       "ipv4-oam-address": "1.2.3.4"   
282
283 }
284
285 This payload would result in the generic-vnf with the vnf-id = cscf0001v
286 having ipv4-oam-address set to "1.2.3.4" and regional-resource-zone
287 having its value removed from the database.
288
289 Referential Integrity
290 ---------------------
291
292 AAI is primarily a view to the relationships between customers,
293 products, services, physical and virtual components, etc. It stores just
294 the details it needs to be efficient to its tasks and knows how to get
295 more details if needed.
296
297 As such, a transaction sent to AAI may be refused if would break
298 referential integrity. The referential integrity rules of AAI are still
299 evolving as we understand the services and customers that will use us.
300
301 AAI uses a graph database on a NoSQL data store. The following are true
302 for AAI:
303
304 -  Some vertices are exposed to the outside world through APIs, others
305    are internal to how we store the data (i.e., it may look like one
306    resource to our customers but it is expressed as more than one vertex
307    in our graph)
308
309 -  Vertices that are internal to AAI will be deleted when the parent
310    vertex is deleted, if deletion of the parent leaves the child vertex
311    orphaned
312
313 -  Vertices that are exposed need to be managed using specific rules for
314    each vertex.
315
316 -  Vertices may have more than just parent/child relationships. One
317    example is a vserver, which will be owned by a tenant and used by a
318    VNF.
319
320 Delete Rules
321 ------------
322
323 The following options are available as actions to be take upon deletion
324 of a resource:
325
326 -  ERROR\_IF\_ANY\_EDGES â€“ If the resource being deleted has any edges
327    at all, an error should be returned
328
329 -  ERROR\_IF\_ANY\_IN\_EDGES â€“ if the resource being deleted has any
330    edges that point IN towards it, an error should be returned
331
332 -  THIS\_NODE\_ONLY â€“ delete the vertex being requested by first
333    deleting its edge to other vertices, but do not delete the other
334    vertices. Note, the delete will be rejected if the deletion target
335    has DEPENDENT children (e.g., tenants that have vservers)
336
337 -  CASCADE\_TO\_CHILDREN â€“ cascade the delete through vertices who have
338    a parentOf relationship to the vertex being deleted, as long as the
339    vertex is orphaned by the delete of its parent
340
341 -  ERROR\_4\_IN\_EDGES\_OR\_CASCADE â€“ error if there are any in edges
342    and, if not, cascade to children
343
344 Security
345 --------
346
347 All REST APIs must be called using https.
348
349 The current release is configured to support BasicAuth. 2-way SSL using
350 client certificates should be configured for production deployments or
351 as needed.
352
353 Headers
354 -------
355
356 The following will be used for logging and interface diagnostic
357 purposes.
358
359 -  X-FromAppId Unique Application ID assigned to the user of these APIs
360
361 -  X-TransactionId Unique ID that identifies an API request
362
363 The X-FromAppId will be assigned to each application by the AAI team.
364 The X-TransactionId must be unique to each transaction within the
365 context of an X-FromAppId.
366
367 OpenECOMP components that call AAI use the Java UUID class to generate
368 unique ids for X-TransactionId.
369
370 The Accept header should be set to either application/json or
371 application/xml.
372
373 +-------------------------------+---------------+
374 | Client                        | X-FromAppId   |
375 +===============================+===============+
376 | Policy                        | Policy        |
377 +-------------------------------+---------------+
378 | Master Service Orchestrator   | MSO           |
379 +-------------------------------+---------------+
380 | SDN Controller                | SDNC          |
381 +-------------------------------+---------------+
382 | Application Controller        | APPC          |
383 +-------------------------------+---------------+
384
385 Response Codes and Error Handling
386 ---------------------------------
387
388 HTTP response codes and error codes are described in the API
389 documentation.
390
391 URLs Sent To and Retrieved From AAI
392 -----------------------------------
393
394 AAI receives URLs from clients that point back to that client in order
395 to get more details about the data sent to AAI. AAI expects the URLs
396 sent by clients (e.g., self links) to be URL encoded (UTF-8) and AAI
397 will store them unchanged.
398
399 URLs that AAI constructs that point to AAI resources will be returned
400 URLEncoded (UTF-8) to clients. This affects URLs in relationship lists
401 and search results.
402
403 AAI expects space to be %20, and not plus(+).
404
405 The Relationship-List
406 ---------------------
407
408 The REST interface does not lend itself to creating more than
409 parent-child relationships and the backend structure of AAI is a graph.
410 A goal of AAI is to do as little coding as possible to introduce a new
411 service into the service design and creation environment.
412
413 To that end, we've introduced a relationship-list structure. AAI will
414 ask its clients to provide certain data in the relationship-list
415 structure.
416
417 Each relationship has a related-to attribute and a list of key/value
418 pairs. The related-to attribute identifies the node type that the
419 resource being acted on is to be related to using the data in the
420 key/value pairs. AAI will encode a set of rules for each resource type
421 to verify that only valid edges are being made. AAI will keep the name
422 of the edge itself, the directionality and cardinality, and the edge
423 attributes within its own logic.
424
425 If an attempt is made to add a relationship to a node that doesn't exist
426 (e.g., from a vserver to a vnf, and the vnf doesn't exist), a unique
427 message Id (3003) will be returned with a specific error code
428 (ERR.5.4.6129). Arguments will tell the client which node type was
429 missing (e.g., generic-vnf) and the key data for that node type
430 (generic-vnf.vnf-id).
431
432 Single relationships can be PUT to the graph in the following way:
433
434 .. code-block:: none
435
436    https://{serverRoot}/{namespace}/{resource}/relationship-list/relationship
437
438 or
439
440 .. code-block:: none
441
442    https://{hostname}:8443/aai/v11/cloud-infrastructure/pservers/pserver/pserver-123456789-01/p-interfaces/p-interface/p-interface-name-123456789-01/l-interfaces/l-interface/l-interface-name-123456789-01/relationship-list/relationship
443
444 with a payload containing the relationship information in XML
445
446 .. code-block:: xml
447
448    <relationship xmlns="http://org.openecomp.aai.inventory/v11">
449    <related-to>logical-link</related-to>
450    <relationship-data>
451        <relationship-key>logical-link.link-name</relationship-key>
452        <relationship-value>logical-link-123456789-01</relationship-value>
453    </relationship-data>
454    </relationship>
455
456 or JSON.
457
458 .. code-block:: json
459
460    {
461    "related-to": "logical-link",
462    "relationship-data": [
463         {
464            "relationship-key": "logical-link.link-name",
465            "relationship-value": " logical-link-123456789-01"
466         }
467         ]
468    }
469
470 Edges
471 =====
472
473 The following are the properties used for edge definitions. T is true, F
474 is false
475
476 -  From and To are the node types for the ends of the edges.
477
478 -  EdgeLabel is the name of the label within the graph.
479
480 -  Direction shows the direction of the edge.
481
482 -  Multiplicity shows the multiplicity rule between two nodes. This
483    helps govern what AAI does when modifying relationships between edges
484    using the relationship REST APIs
485
486 -  ParentOf indicates whether From is a parent of To.
487
488 -  UsesResource specifies whether the From node uses resources of the To
489    node, to be able to view the data in the context of "what uses what".
490
491 -  hasDelTarget specifies whether to try to delete the To node when the
492    From node is deleted.
493
494 -  SVC-INFRA (deprecated)
495
496 The configuration for different edges supported by the AAI model are
497 defined in the DbEdgeRules.java class.
498
499 Indexed Attributes 
500 ===================
501
502 AAI supports query parameters on its indexed attributes.
503
504 As an example, if you wanted to GET a tenant by tenant-name, you would
505 do something like
506
507 /aai/vX/cloud-infrastructure/cloud-regions/cloud-region/cloud\_owner\_1/cloud-region\_1/tenants/tenant?tenant-name=value
508
509 The properties that are indexed are defined in the aai-schema.
510
511 Namespaces
512 ==========
513
514 Util Domain
515 -----------
516
517 The util domain is where AAI locates utility functions. There is
518 currently one utility function, echo, which serves as a ping test that
519 authenticated authorized clients can call to ensure there is
520 connectivity with AAI.
521
522 The URL for the echo utility is:
523
524 .. code-block:: none
525
526    https://load-balanced-address:8443/aai/util/echo
527
528 If the response is unsuccessful, an error will be returned following the
529 standard format.
530
531 The successful payload returns the X-FromAppId and X-TransactionId sent
532 by the client.
533
534 Successful XML Response Payload
535 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
536
537 .. code-block:: xml
538
539    <Info>
540    <responseMessages>
541    <responseMessage>
542    <messageId>INF0001</messageId>
543    <text>Success X-FromAppId=%1 X-TransactionId=%2 (msg=%3) (rc=%4)</text>
544    <variables>
545    <variable>XYZ</variable>
546    <variable>XYZ123</variable>
547    <variable>Successful health check:OK</variable>
548    <variable>0.0.0002</variable>
549    </variables>
550    </responseMessage>
551    </responseMessages>
552    </Info>
553
554 Successful JSON Response Payload
555 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
556
557 .. code-block:: json
558
559    {"responseMessages": {"responseMessage": [{
560    "messageId": "INF0001",
561    "text": "Success X-FromAppId=%1 X-TransactionId=%2 (msg=%3) (rc=%4)",
562    "variables": {"variable": [
563    "XYZ",
564    "XYZ123",
565    "Successful health check:OK",
566    "0.0.0002"
567    ]}
568    }]}}
569
570 Cloud Infrastructure Domain
571 ---------------------------
572
573 The Cloud Infrastructure domain (cloud-infrastructure) represents the
574 assets managed within a cloud infrastructure site. This includes the
575 physical servers, tenants, vservers and cloud-region.
576
577 Network Domain
578 --------------
579
580 The network namespace contains virtual and physical network resources as
581 well as connection resources such as physical links, logical links, etc.
582
583 Business Domain
584 ---------------
585
586 The business namespace captures customers, service subscriptions, and
587 service instances. This domain is immature and will be evolving as
588 service design and creation starts to gel.
589
590 Service Design and Creation
591 ---------------------------
592
593 The service design and creation namespace captures data we invented
594 based on what we thought SDC would eventually provide.
595
596 To date, there are only five containers:
597
598 1. Service-capabilities capture the pairings of service to resources.
599
600 2. Service captures the service model instances and this will be
601    deprecated in the future as things mature
602
603 3. Models captures model definitions (subgraph definitions using the AAI
604    widgets)
605
606 4. named-queries capture subgraph definitions that allow different data
607    to be retrieved for a given type of asset