{"info":{"_postman_id":"35d014dc-aa73-4424-8307-2e177af64f2a","name":"FIWARE CRUD Operations","description":"<html><head></head><body><p>This tutorial builds on the data created in the previous <a href=\"http://fiware.github.io/tutorials.Entity-Relationships/\">stock management example</a> and introduces the concept of <a href=\"https://en.wikipedia.org/wiki/Create,_read,_update_and_delete\">CRUD operations</a>, allowing users to manipulate the data held within the context.</p>\n<p>The <code>docker-compose</code> file for this tutorial can be found on GitHub: </p>\n<p><img src=\"https://fiware.github.io/tutorials.CRUD-Operations/icon/GitHub-Mark-32px.png\" alt=\"GitHub\"> <a href=\"https://github.com/Fiware/tutorials.CRUD-Operations\">FIWARE 103: Manipulating Context Data through CRUD Operations </a></p>\n<h1 id=\"data-entities\">Data Entities</h1>\n<p>Within the FIWARE platform, an entity represents the state of a physical or\nconceptual object which exists in the real world.</p>\n<h2 id=\"entities-within-a-stock-management-system\">Entities within a stock management system</h2>\n<p>Within our simple stock management system, we currently have four entity types.\nThe relationships between our entities are defined as shown below:</p>\n<p><img src=\"https://fiware.github.io/tutorials.Entity-Relationships/img/entities.png\" alt=\"\"></p>\n<ul>\n<li>A <strong>Store</strong> is a real world bricks and mortar building. Stores would have\nproperties such as:<ul>\n<li>Store name, e.g. \"Checkpoint Markt\"</li>\n<li>Address, e.g. \"Friedrichstraße 44, 10969 Kreuzberg, Berlin\"</li>\n<li>Physical location, e.g. <em>52.5075 N, 13.3903 E</em></li>\n</ul>\n</li>\n<li>A <strong>Shelf</strong> is a real world object to hold items which we wish to sell.\nEach shelf would have properties such as:<ul>\n<li>Shelf name, e.g. \"Wall Unit\"</li>\n<li>Physical location, e.g. <em>52.5075 N, 13.3903 E</em></li>\n<li>Maximum capacity</li>\n<li>An association to the store in which the shelf is located</li>\n</ul>\n</li>\n<li>A <strong>Product</strong> is defined as something that we sell - it is a conceptual\nobject. Products would have properties such as:<ul>\n<li>Product name, e.g. \"Vodka\"</li>\n<li>Price, e.g. 13.99 Euros</li>\n<li>Size, e.g. Small</li>\n</ul>\n</li>\n<li>An <strong>Inventory Item</strong> is another conceptual entity, used to associate\nproducts, stores, shelves and physical objects. It would have properties\nsuch as:<ul>\n<li>An association to the product being sold</li>\n<li>An association to the store in which the product is being sold</li>\n<li>An association to the shelf where the product is being displayed</li>\n<li>Stock count, i.e. product quantity available in the warehouse</li>\n<li>Shelf count, i.e. number of items available on the shelf</li>\n</ul>\n</li>\n</ul>\n<p>As you can see, each of the entities defined above contain some properties which\nare liable to change. For example, product price could change, stock could be sold\nand the number of items on the shelves would drop.</p>\n<h1 id=\"architecture\">Architecture</h1>\n<p>This application will only make use of one FIWARE component - the\n<a href=\"https://fiware-orion.readthedocs.io/en/latest/\">Orion Context Broker</a>. Using\nthe Orion Context Broker is sufficient for an application to qualify as\n<em>“Powered by FIWARE”</em>.</p>\n<p>Currently, the Orion Context Broker relies on open source\n<a href=\"https://www.mongodb.com/\">MongoDB</a> technology to store the context data it\nmanages. Therefore, the architecture will consist of two components:</p>\n<ul>\n<li>The <a href=\"https://fiware-orion.readthedocs.io/en/latest/\">Orion Context Broker</a>\nwhich will receive requests using\n<a href=\"https://fiware.github.io/specifications/OpenAPI/ngsiv2\">NGSI</a></li>\n<li>The underlying <a href=\"https://www.mongodb.com/\">MongoDB</a> database:<ul>\n<li>Used by the Orion Context Broker to store context information such\nas data entities, subscriptions and registrations</li>\n</ul>\n</li>\n</ul>\n<p>Since the two components interact by means of HTTP requests, they can be\ncontainerized and run from exposed ports.</p>\n<p><img src=\"https://fiware.github.io/tutorials.CRUD-Operations/img/architecture.png\" alt=\"\"></p>\n<p>The necessary configuration information can be seen in the services section of\nthe associated <code>docker-compose.yml</code> file:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-yaml\">orion:\n    image: fiware/orion:latest\n    hostname: orion\n    container_name: orion\n    depends_on:\n        - mongo-db\n    networks:\n        - default\n    expose:\n        - \"1026\"\n    ports:\n        - \"1026:1026\"\n    command: -dbhost mongo-db -logLevel DEBUG\n</code></pre>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-yaml\">mongo-db:\n    image: mongo:3.6\n    hostname: mongo-db\n    container_name: db-mongo\n    expose:\n        - \"27017\"\n    ports:\n        - \"27017:27017\"\n    networks:\n        - default\n    command: --bind_ip_all --smallfiles\n</code></pre>\n<p>Both containers reside on the same network - the Orion Context Broker is\nlistening on port <code>1026</code> and MongoDB is listening on the default port <code>271071</code>.\nFor the sake of this tutorial, we have also made the two ports available from\noutside the network so that cUrl or Postman can access them without having to\nbe run from inside the network. The command-line initialization should be self\nexplanatory.</p>\n<h1 id=\"prerequisites\">Prerequisites</h1>\n<h2 id=\"docker\">Docker</h2>\n<p>To keep things simple both components will be run using\n<a href=\"https://www.docker.com\">Docker</a>. <strong>Docker</strong> is a container technology which\nallows to package each component with its environment and run it in isolation.</p>\n<ul>\n<li>To install Docker on Windows follow the instructions\n<a href=\"https://docs.docker.com/docker-for-windows/\">here</a></li>\n<li>To install Docker on Mac follow the instructions\n<a href=\"https://docs.docker.com/docker-for-mac/\">here</a></li>\n<li>To install Docker on Linux follow the instructions\n<a href=\"https://docs.docker.com/install/\">here</a></li>\n</ul>\n<p><strong>Docker Compose</strong> is a tool for defining and running multi-container Docker\napplications. A\n<a href=\"https://raw.githubusercontent.com/Fiware/tutorials.Entity-Relationships/master/docker-compose.yml\">YAML file</a>\nis used configure the required services for the application. This means all\ncontainer services can be brought up with a single command. Docker Compose is\ninstalled by default as part of Docker for Windows and Docker for Mac, however\nLinux users will need to follow the instructions found\n<a href=\"https://docs.docker.com/compose/install/\">here</a></p>\n<p>You can check your current <strong>Docker</strong> and <strong>Docker Compose</strong> versions using the\nfollowing commands:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-console\">docker-compose -v\ndocker version\n</code></pre>\n<p>Please ensure that you are using Docker version 18.03 or higher and Docker\nCompose 1.21 or higher and upgrade if necessary.</p>\n<h2 id=\"cygwin\">Cygwin</h2>\n<p>We will start up our services using a simple bash script. Windows users should\ndownload <a href=\"http://www.cygwin.com/\">cygwin</a> to provide a command-line\nfunctionality similar to a Linux distribution on Windows.</p>\n<h1 id=\"start-up\">Start Up</h1>\n<p>All services can be initialised from the command-line by running the bash script\nprovided within the repository. Please clone the repository and create the\nnecessary images by running the commands as shown below:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-console\">git clone git@github.com:Fiware/tutorials.CRUD-Operations.git\ncd tutorials.CRUD-Operations\n\n./services start\n</code></pre>\n<p>This command will also import seed data from the previous\n<a href=\"https://github.com/Fiware/tutorials.Entity-Relationships\">Store Finder tutorial</a>\non startup.</p>\n<blockquote>\n<p>:information_source: <strong>Note:</strong> If you want to clean up and start over again\nyou can do so with the following command:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-console\">./services stop\n</code></pre>\n</blockquote>\n<h1 id=\"what-is-crud\">What is CRUD?</h1>\n<p><strong>Create</strong>, <strong>Read</strong>, <strong>Update</strong> and <strong>Delete</strong> are the four basic functions of\npersistent storage. These operations are usually referred to using the acronym\n<strong>CRUD</strong>. Within a database each of these operations map directly to a series of\ncommands, however their relationship with a RESTful API is slightly more complex.</p>\n<p>The <a href=\"https://fiware-orion.readthedocs.io/en/latest/\">Orion Context Broker</a> uses\n<a href=\"https://fiware.github.io/specifications/OpenAPI/ngsiv2\">NGSI</a> to manipulate the\ncontext data. As a RESTful API, requests to manipulate the data held within the\ncontext follow the standard conventions found when mapping HTTP verbs to CRUD\noperations.</p>\n<h2 id=\"entity-crud-operations\">Entity CRUD Operations</h2>\n<p>For operations where the <code>&lt;entity-id&gt;</code> is not yet known within the context, or\nis unspecified, the <code>/v2/entities</code> endpoint is used.</p>\n<p>Once an <code>&lt;entity-id&gt;</code> is known within the context, individual data entities can\nbe manipulated using the <code>/v2/entities/&lt;entity-id&gt;</code> endpoint.</p>\n<p>It is recommended that entity identifiers should be URNs following the\n<a href=\"https://docbox.etsi.org/ISG/CIM/Open/ISG_CIM_NGSI-LD_API_Draft_for_public_review.pdf\">NGSI-LD guidelines</a>,\ntherefore each <code>id</code> is a URN which follows a standard format:\n<code>urn:ngsi-ld:&lt;entity-type&gt;:&lt;entity-id&gt;</code>. This helps making every <code>id</code> in the\ncontext data unique.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP Verb</th>\n<th><code>/v2/entities</code></th>\n<th><code>/v2/entities/&lt;entity-id&gt;</code></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>POST</strong></td>\n<td>CREATE a new entity and add to the context.</td>\n<td>CREATE or UPDATE an attribute of a specified entity.</td>\n</tr>\n<tr>\n<td><strong>GET</strong></td>\n<td>READ entity data from the context. This will return data from multiple entities. The data can be filtered.</td>\n<td>READ entity data from a specified entity. This will return data from a single entity only. The data can be filtered.</td>\n</tr>\n<tr>\n<td><strong>PUT</strong></td>\n<td>:x:</td>\n<td>:x:</td>\n</tr>\n<tr>\n<td><strong>PATCH</strong></td>\n<td>:x:</td>\n<td>:x:</td>\n</tr>\n<tr>\n<td><strong>DELETE</strong></td>\n<td>:x:</td>\n<td>DELETE an entity from the context</td>\n</tr>\n</tbody>\n</table>\n</div><p>A complete list of entity endpoints can be found in the\n<a href=\"https://fiware.github.io/specifications/OpenAPI/ngsiv2#/Entities\">NGSI v2 Swagger Specification</a></p>\n<h2 id=\"attribute-crud-operations\">Attribute CRUD Operations</h2>\n<p>To perform CRUD operations on attributes, the <code>&lt;entity-id&gt;</code> must be known. Each\nattribute is effectively a key-value pair.</p>\n<p>There are three endpoints:</p>\n<ul>\n<li><code>/v2/entities/&lt;entity-id&gt;/attrs</code> is only used for a patch operation to\nupdate one or more exisiting attributes.</li>\n<li><code>/v2/entities/&lt;entity-id&gt;/attrs/&lt;attribute&gt;</code> is used to manipulate an\nattribute as a whole.</li>\n<li><code>/v2/entities/&lt;entity-id&gt;/attrs/&lt;attribute&gt;/value</code> is used to read or update\nthe <code>value</code> of an attribute, leaving the <code>type</code> untouched.</li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP Verb</th>\n<th><code>.../attrs</code></th>\n<th><code>.../attrs/&lt;attribute&gt;</code></th>\n<th><code>.../attrs/&lt;attribute&gt;/value</code></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>POST</strong></td>\n<td>:x:</td>\n<td>:x:</td>\n<td>:x:</td>\n</tr>\n<tr>\n<td><strong>GET</strong></td>\n<td>:x:</td>\n<td>:x:</td>\n<td>READ the value of an attribute from a specified entity. This will return a single field.</td>\n</tr>\n<tr>\n<td><strong>PUT</strong></td>\n<td>:x:</td>\n<td>:x:</td>\n<td>UPDATE the value of single attribute from a specified entity.</td>\n</tr>\n<tr>\n<td><strong>PATCH</strong></td>\n<td>UPDATE one or more existing attributes from an existing entity.</td>\n<td>:x:</td>\n<td>:x:</td>\n</tr>\n<tr>\n<td><strong>DELETE</strong>.</td>\n<td>:x:</td>\n<td>DELETE an existing attribute from an existing entity.</td>\n<td>:x:</td>\n</tr>\n</tbody>\n</table>\n</div><p>A complete list of attribute endpoints can be found in the\n<a href=\"https://fiware.github.io/specifications/OpenAPI/ngsiv2#/Attributes\">NGSI v2 Swagger Specification</a></p>\n<h2 id=\"batch-crud-operations\">Batch CRUD Operations</h2>\n<p>Additionally the Orion Context Broker has a convenience batch operation endpoint\n<code>/v2/op/update</code> to manipulate multiple entities in a single operation.</p>\n<p>Batch operations are always triggered by a POST request where the payload is an\nobject with two properties:</p>\n<ul>\n<li><code>actionType</code> specifies the kind of action to invoke (e.g. <code>delete</code>)</li>\n<li><code>entities</code> is an array of objects holding the list of entities to update, along\nwith the relevant entity data used to perform the operation.</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Data Entities","slug":"data-entities"},{"content":"Architecture","slug":"architecture"},{"content":"Prerequisites","slug":"prerequisites"},{"content":"Start Up","slug":"start-up"},{"content":"What is CRUD?","slug":"what-is-crud"}],"owner":"513743","collectionId":"35d014dc-aa73-4424-8307-2e177af64f2a","publishedId":"RWToNwzF","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"233C68"},"publishDate":"2020-01-02T11:02:53.000Z"},"item":[{"name":"Create Operations","item":[{"name":"Create a New Data Entity","id":"4426003b-9086-4312-aebb-5c7f3c4c3836","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":" {\n      \"id\":\"urn:ngsi-ld:Product:010\", \"type\":\"Product\",\n      \"name\":{\"type\":\"Text\", \"value\":\"Lemonade\"},\n      \"size\":{\"type\":\"Text\", \"value\": \"S\"},\n      \"price\":{\"type\":\"Integer\", \"value\": 99}\n}"},"url":"http://localhost:1026/v2/entities/","description":"<p>This example adds a new <strong>Product</strong> entity to the context.</p>\n<p>New entities can be added by making a POST request to the <code>/v2/entities/</code> endpoint.</p>\n<p>The request will <strong>fail</strong> if any of the attributes already exist in the context.</p>\n<p>Any entity must have a <code>id</code> and <code>type</code> attributes, each additional attributes are optional \nand will depend on the system being described. Each additional attribute should also have a \ndefined <code>type</code> and a <code>value</code> attribute. The product has been assigned a unique <code>id</code> following\nthe NGSI-LD  <a href=\"https://docbox.etsi.org/ISG/CIM/Open/ISG_CIM_NGSI-LD_API_Draft_for_public_review.pdf\">draft recommendation</a>  and has been assigned <code>type=Product</code>.</p>\n<hr />\n<p>Subsequent requests using the same <code>id</code> will result in an error response.</p>\n","urlObject":{"protocol":"http","path":["v2","entities",""],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"4426003b-9086-4312-aebb-5c7f3c4c3836"},{"name":"Create a New Attribute","id":"a4c8c466-3cad-465f-bfea-6c670ea2ee3a","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n      \"specialOffer\":{\"value\": true}\n}"},"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:001/attrs","description":"<p>This example adds a new <code>specialOffer</code> attribute to the existing <strong>Product</strong> entity with <code>id=urn:ngsi-ld:Product:001</code></p>\n<p>New attributes can be added by making a POST request to the <code>/v2/entities/&lt;entity&gt;/attrs</code> endpoint. </p>\n<p>The payload should consist of a JSON object holding the attribute names and values as shown. </p>\n<p>If no <code>type</code> is specified a default <code>type</code> (<code>Boolean</code>, <code>Text</code> or <code>Number</code> or <code>StructuredValue</code>) will be assigned.</p>\n<hr />\n<p>Subsequent requests using the same <code>id</code> will update the value of the attribute in the context</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:001","attrs"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"a4c8c466-3cad-465f-bfea-6c670ea2ee3a"},{"name":"Batch Create New Data Entities or Attributes","id":"69712fa2-5ade-4a0b-9f54-f024ba3ff2d8","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"actionType\":\"append_strict\",\n  \"entities\":[\n    {\n      \"id\":\"urn:ngsi-ld:Product:011\", \"type\":\"Product\",\n      \"name\":{\"type\":\"Text\", \"value\":\"Brandy\"},\n      \"size\":{\"type\":\"Text\", \"value\": \"M\"},\n      \"price\":{\"type\":\"Integer\", \"value\": 1199}\n    },\n    {\n      \"id\":\"urn:ngsi-ld:Product:012\", \"type\":\"Product\",\n      \"name\":{\"type\":\"Text\", \"value\":\"Port\"},\n      \"size\":{\"type\":\"Text\", \"value\": \"M\"},\n      \"price\":{\"type\":\"Integer\", \"value\": 1099}\n    },\n    {\n      \"id\":\"urn:ngsi-ld:Product:001\", \"type\":\"Product\",\n      \"offerPrice\":{\"type\":\"Integer\", \"value\": 89}\n    }\n  ]\n}"},"url":"http://localhost:1026/v2/op/update/","description":"<p>This example uses the convenience batch processing endpoint to add two new <strong>Product</strong> entities and one new attribute (<code>offerPrice</code>)\nto the context. </p>\n<p>The request will <strong>fail</strong> if any of the attributes already exist in the context.</p>\n<p>Batch processing uses the <code>/v2/op/update</code> endpoint with a payload with two attributes</p>\n<ul>\n<li><code>actionType=append_strict</code> means that the request only succeed if all entities / attributes are new.</li>\n<li>The <code>entities</code> attribute holds an array of entities we wish to create.</li>\n</ul>\n<p>Each product has a unique <code>id</code> following the NGSI-LD  <a href=\"https://docbox.etsi.org/ISG/CIM/Open/ISG_CIM_NGSI-LD_API_Draft_for_public_review.pdf\">draft recommendation</a>  and has been assigned <code>type=Product</code>.</p>\n<hr />\n<p>Subsequent requests using the same data with the <code>actionType=append_strict</code> batch operation will result in an error response.</p>\n","urlObject":{"protocol":"http","path":["v2","op","update",""],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"69712fa2-5ade-4a0b-9f54-f024ba3ff2d8"},{"name":"Batch Create/Overwrite New Data Entities","id":"f43c662d-7127-41ae-b4ac-22551c7ffdf6","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"actionType\":\"append\",\n  \"entities\":[\n    {\n      \"id\":\"urn:ngsi-ld:Product:011\", \"type\":\"Product\",\n      \"name\":{\"type\":\"Text\", \"value\":\"Brandy\"},\n      \"size\":{\"type\":\"Text\", \"value\": \"M\"},\n      \"price\":{\"type\":\"Integer\", \"value\": 1199}\n    },\n    {\n      \"id\":\"urn:ngsi-ld:Product:012\", \"type\":\"Product\",\n      \"name\":{\"type\":\"Text\", \"value\":\"Port\"},\n      \"size\":{\"type\":\"Text\", \"value\": \"M\"},\n      \"price\":{\"type\":\"Integer\", \"value\": 1099}\n    }\n  ]\n}"},"url":"http://localhost:1026/v2/op/update/","description":"<p>This example uses the convenience batch processing endpoint to add or amend two <strong>Product</strong> entities and one attribute (<code>offerPrice</code>) to the context.</p>\n<ul>\n<li><code>actionType=append</code> means we will overwrite existing entities if they exist</li>\n<li>The entities attribute holds an array of entities we wish to\ncreate/overwrite.</li>\n</ul>\n<p>A subsequent request containing the same data (i.e. same entities and <code>actionType=append</code>)\nwon't change the context state.</p>\n<p>Batch processing uses the <code>/v2/op/update</code> endpoint with a payload with two attributes:</p>\n<ul>\n<li><code>actionType=append</code> means we will overwrite existing entities if they exist</li>\n<li>The <code>entities</code> attribute holds an array of entities we wish to create/overwrite.</li>\n</ul>\n<p>Each product has a unique <code>id</code> following the NGSI-LD  <a href=\"https://docbox.etsi.org/ISG/CIM/Open/ISG_CIM_NGSI-LD_API_Draft_for_public_review.pdf\">draft recommendation</a>  and has been assigned <code>type=Product</code>.</p>\n","urlObject":{"protocol":"http","path":["v2","op","update",""],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"f43c662d-7127-41ae-b4ac-22551c7ffdf6"}],"id":"f75eabf1-1a66-45ab-b4c5-47d3dc0696f9","description":"<p>Create Operations map to HTTP POST.</p>\n<ul>\n<li>The <code>/v2/entities</code> endpoint is used for creating new entities</li>\n<li>The <code>/v2/entities/&lt;entity&gt;</code> endpoint is used for adding new attributes</li>\n</ul>\n<p>Any newly created entity must have <code>id</code> and <code>type</code> attributes, other attributes\nare optional and will depend on the system being modelled. If additional\nattributes are present though, each should specify both a <code>type</code> and a <code>value</code>.</p>\n<p>The response will be <strong>204 - No Content</strong> if the operation is successful or\n<strong>422 - Unprocessable Entity</strong> if the operation fails.</p>\n","event":[{"listen":"prerequest","script":{"id":"e188a3c9-0964-40d4-bb85-30f8dba187dd","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"50a197ae-0c79-49f9-9f06-850bcee94f15","type":"text/javascript","exec":[""]}}],"_postman_id":"f75eabf1-1a66-45ab-b4c5-47d3dc0696f9"},{"name":"Read Operations","item":[{"name":"Read a Data Entity (verbose)","id":"89b9da60-9976-4e38-8057-6212d20e8705","request":{"method":"GET","header":[],"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:010","description":"<p>This example reads the full context from an existing <strong>Product</strong> entity with a known id.</p>\n<p>Context data can be retrieved by making a GET request to the <code>/v2/entities/&lt;entity&gt;</code> endpoint.</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:010"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"89b9da60-9976-4e38-8057-6212d20e8705"},{"name":"Read an Attribute from a Data Entity","id":"c4c1af37-e691-400c-a0cc-88d3252ac479","request":{"method":"GET","header":[],"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:001/attrs/name/value","description":"<p>This example reads the value of a single attribute (<code>name</code>)  from an existing <strong>Product</strong> entity with a known <code>id</code>.</p>\n<p>Context data can be retrieved by making a GET request to the <code>/v2/entities/&lt;entity&gt;/attrs/&lt;attribute&gt;/value</code> endpoint.</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:001","attrs","name","value"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"c4c1af37-e691-400c-a0cc-88d3252ac479"},{"name":"Read a Data Entity (key value pairs)","id":"c201c35c-e5f7-41c1-b3b4-177c45066ea3","request":{"method":"GET","header":[],"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:001/?options=keyValues&attrs=name,price","description":"<p>This example reads the key-value pairs for two requested attributes (<code>name</code> and <code>price</code>) from the context of existing <strong>Product</strong> entity with a known <code>id</code>.</p>\n<p>Combine the <code>options=keyValues</code> parameter and the <code>attrs</code> parameter to obtain key-values.</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:001",""],"host":["localhost:1026"],"query":[{"description":{"content":"<ul>\n<li><code>keyValues</code> option in order to get a more compact and brief representation, including just attribute values</li>\n<li><code>values</code> option combined with a list of attribute values  <code>attrs</code>  for an ordered list of attributes only</li>\n</ul>\n","type":"text/plain"},"key":"options","value":"keyValues"},{"description":{"content":"<p>Ordered list of attribute names to display</p>\n","type":"text/plain"},"key":"attrs","value":"name,price"}],"variable":[]}},"response":[],"_postman_id":"c201c35c-e5f7-41c1-b3b4-177c45066ea3"},{"name":"Read Multiple attributes values from a Data Entity","id":"6f8ad5c6-c2c0-4a80-9de6-c172d841bf37","request":{"method":"GET","header":[],"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:001/?options=values&attrs=name,price","description":"<p>This example reads the value of two requested attributes (<code>name</code> and <code>price</code>) from the context of existing <strong>Product</strong> entity with a known <code>id</code>.</p>\n<p>Combine the <code>options=values</code> parameter and the <code>attrs</code> parameter to return a list of values in an array</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:001",""],"host":["localhost:1026"],"query":[{"description":{"content":"<ul>\n<li><code>keyValues</code> option in order to get a more compact and brief representation, including just attribute values</li>\n<li><code>values</code> option combined with a list of attribute values  <code>attrs</code>  for an ordered list of attributes only</li>\n</ul>\n","type":"text/plain"},"key":"options","value":"values"},{"description":{"content":"<p>Ordered list of attribute names to display</p>\n","type":"text/plain"},"key":"attrs","value":"name,price"}],"variable":[]}},"response":[],"_postman_id":"6f8ad5c6-c2c0-4a80-9de6-c172d841bf37"},{"name":"List all Data Entities (verbose)","id":"f9b62645-5c6e-4a35-a701-e9740f3c0bba","request":{"method":"GET","header":[],"url":"http://localhost:1026/v2/entities/?type=Product","description":"<p>This example lists the full context of all <strong>Product</strong> entities.</p>\n<p>Full context data  for a specified entity type can be retrieved by making a GET request to the <code>/v2/entities/</code> endpoint and supplying the <code>type</code> parameter.</p>\n","urlObject":{"protocol":"http","path":["v2","entities",""],"host":["localhost:1026"],"query":[{"key":"type","value":"Product"}],"variable":[]}},"response":[],"_postman_id":"f9b62645-5c6e-4a35-a701-e9740f3c0bba"},{"name":"List all Data Entities (key value pairs)","id":"e51734e1-f879-4b77-b539-fb6083f43a0a","request":{"method":"GET","header":[],"url":"http://localhost:1026/v2/entities/?type=Product&options=keyValues&attrs=name,price","description":"<p>This example lists the <code>name</code> and <code>price</code> attributes of all <strong>Product</strong> entities.</p>\n<p>Full context data  for a specified entity type can be retrieved by making a GET request to the <code>/v2/entities/</code> endpoint and supplying the <code>type</code> parameter  combine this with the <code>options=keyValues</code> parameter and the <code>attrs</code> parameter to obtain key-values.</p>\n","urlObject":{"protocol":"http","path":["v2","entities",""],"host":["localhost:1026"],"query":[{"description":{"content":"<p>Entity type</p>\n","type":"text/plain"},"key":"type","value":"Product"},{"description":{"content":"<ul>\n<li><code>keyValues</code> option in order to get a more compact and brief representation, including just attribute values</li>\n<li><code>values</code> option combined with a list of attribute values  <code>attrs</code>  for an ordered list of attributes only</li>\n</ul>\n","type":"text/plain"},"key":"options","value":"keyValues"},{"description":{"content":"<p>Ordered list of attribute names to display</p>\n","type":"text/plain"},"key":"attrs","value":"name,price"}],"variable":[]}},"response":[],"_postman_id":"e51734e1-f879-4b77-b539-fb6083f43a0a"},{"name":"List Data Entity by id","id":"baa32fe6-fa77-46d8-938e-05eaba831c33","request":{"method":"GET","header":[],"url":"http://localhost:1026/v2/entities/?type=Product&options=count&attrs=id","description":"<p>This example lists the <code>id</code> and <code>type</code> of all <strong>Product</strong> entities.</p>\n<p>Context data  for a specified entity type can be retrieved by making a GET request to the <code>/v2/entities/</code> endpoint and supplying the <code>type</code> parameter. Combine this with <code>options=count</code> and <code>attrs=id</code> to return the <code>id</code> attributes of the given <code>type</code></p>\n","urlObject":{"protocol":"http","path":["v2","entities",""],"host":["localhost:1026"],"query":[{"description":{"content":"<p>Entity type</p>\n","type":"text/plain"},"key":"type","value":"Product"},{"description":{"content":"<ul>\n<li><code>keyValues</code> option in order to get a more compact and brief representation, including just attribute values</li>\n<li><code>values</code> option combined with a list of attribute values  <code>attrs</code>  for an ordered list of attributes only</li>\n</ul>\n","type":"text/plain"},"key":"options","value":"count"},{"description":{"content":"<p>Ordered list of attribute names to display</p>\n","type":"text/plain"},"key":"attrs","value":"id"}],"variable":[]}},"response":[],"_postman_id":"baa32fe6-fa77-46d8-938e-05eaba831c33"}],"id":"8ff1dc7a-3929-4e5b-a6c1-0b4a8074cc03","description":"<p>Read Operations map to HTTP GET.</p>\n<ul>\n<li>The <code>/v2/entities/</code> endpoint is used for listing operations</li>\n<li>The <code>/v2/entities/&lt;entity&gt;</code> endpoint is used for retrieving the details of a single entity</li>\n</ul>\n<h2 id=\"filtering\">Filtering</h2>\n<ul>\n<li>The <code>options</code> parameter (combined with the <code>attrs</code> parameter) is used to filter the fields returned</li>\n<li>The <code>q</code> parameter can be used to filter the entities returned</li>\n</ul>\n","event":[{"listen":"prerequest","script":{"id":"dc10dc62-ba5f-4e31-b75e-20e743651cb4","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"6d3402d3-9f76-4770-96a6-3ea6b7325376","type":"text/javascript","exec":[""]}}],"_postman_id":"8ff1dc7a-3929-4e5b-a6c1-0b4a8074cc03"},{"name":"Update Operations","item":[{"name":"Overwrite the value of an Attribute value","id":"1b9f852b-fe9f-4774-9f07-6189ac1e2b22","request":{"method":"PUT","header":[{"key":"Content-Type","value":"text/plain"}],"body":{"mode":"raw","raw":"89"},"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:001/attrs/price/value","description":"<p>This example updates the value of the <code>price</code> attribute of the Entity with <code>id=urn:ngsi-ld:Product:001</code></p>\n<p>Exisiting attribute values can be altered by making a PUT request to the <code>/v2/entities/&lt;entity&gt;/attrs/&lt;attribute&gt;/value</code> endpoint.</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:001","attrs","price","value"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"1b9f852b-fe9f-4774-9f07-6189ac1e2b22"},{"name":"Overwrite Multiple Attributes of a Data Entity","id":"233d4f57-e851-46a0-a02e-8138f950409c","request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":" {\n      \"price\":{\"type\":\"Integer\", \"value\": 89}\n}"},"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:001/attrs","description":"<p>This example simultaneously updates the values of both the <code>price</code> and <code>name</code> attributes of the Entity with <code>id=urn:ngsi-ld:Product:001</code></p>\n<p>Multiple Existing attribute values can be updated by making a PATCH request to the <code>/v2/entities/&lt;entity&gt;/attrs</code> endpoint.</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:001","attrs"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"233d4f57-e851-46a0-a02e-8138f950409c"},{"name":"Batch Overwrite Attributes of Multiple Data Entities","id":"d78aaf69-fada-4483-b7e4-56cd18935a42","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"actionType\":\"update\",\n  \"entities\":[\n    {\n      \"id\":\"urn:ngsi-ld:Product:001\", \"type\":\"Product\",\n      \"price\":{\"type\":\"Integer\", \"value\": 1199}\n    },\n    {\n      \"id\":\"urn:ngsi-ld:Product:002\", \"type\":\"Product\",\n      \"price\":{\"type\":\"Integer\", \"value\": 1199},\n      \"size\": {\"type\":\"Text\", \"value\": \"L\"}\n    }\n  ]\n}"},"url":"http://localhost:1026/v2/op/update","description":"<p>This example uses the convenience batch processing endpoint to create a series of available products.</p>\n<p>Batch processing uses the <code>/v2/op/update</code> endpoint with a payload with two attributes - <code>actionType=update</code> means we will overwrite existing entities if they exist whereas the <code>entities</code> attribute holds an array of entities we wish to update.</p>\n<p>Each product has a unique <code>id</code> following the NGSI-LD  <a href=\"https://docbox.etsi.org/ISG/CIM/Open/ISG_CIM_NGSI-LD_API_Draft_for_public_review.pdf\">draft recommendation</a>  and has been assigned <code>type=Product</code>.</p>\n","urlObject":{"protocol":"http","path":["v2","op","update"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"d78aaf69-fada-4483-b7e4-56cd18935a42"},{"name":"Batch  Create/Overwrite Attributes of Multiple Data Entities","id":"d6593aca-25b7-4f77-8e3d-687762b90e99","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"actionType\":\"append\",\n  \"entities\":[\n    {\n      \"id\":\"urn:ngsi-ld:Product:001\", \"type\":\"Product\",\n      \"price\":{\"type\":\"Integer\", \"value\": 1199}\n    },\n    {\n      \"id\":\"urn:ngsi-ld:Product:002\", \"type\":\"Product\",\n      \"price\":{\"type\":\"Integer\", \"value\": 1199},\n      \"specialOffer\": {\"type\":\"Boolean\", \"value\":  true}\n    }\n  ]\n}"},"url":"http://localhost:1026/v2/op/update","description":"<p>This example uses the convenience batch processing endpoint to create a series of available products.</p>\n<p>Batch processing uses the <code>/v2/op/update</code> endpoint with a payload with two attributes - <code>actionType=append</code> means we will overwrite existing entities if they exist whereas the <code>entities</code> attribute holds an array of entities we wish to update.</p>\n<p>Each product has a unique <code>id</code> following the NGSI-LD  <a href=\"https://docbox.etsi.org/ISG/CIM/Open/ISG_CIM_NGSI-LD_API_Draft_for_public_review.pdf\">draft recommendation</a>  and has been assigned <code>type=Product</code>.</p>\n","urlObject":{"protocol":"http","path":["v2","op","update"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"d6593aca-25b7-4f77-8e3d-687762b90e99"},{"name":"Batch Replace Entity Data","id":"ce1aebed-16eb-4e3f-8cef-b009aa17a9d1","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"actionType\":\"replace\",\n  \"entities\":[\n    {\n      \"id\":\"urn:ngsi-ld:Product:010\", \"type\":\"Product\",\n      \"price\":{\"type\":\"Integer\", \"value\": 1199}\n    }\n  ]\n}"},"url":"http://localhost:1026/v2/op/update","description":"<p>This example uses the convenience batch processing endpoint to create a series of available products.</p>\n<p>Batch processing uses the <code>/v2/op/update</code> endpoint with a payload with two attributes - <code>actionType=replace</code> means we will overwrite existing entities if they exist whereas the <code>entities</code> attribute holds an array of entities we wish to update.</p>\n<p>Each product has a unique <code>id</code> following the NGSI-LD  <a href=\"https://docbox.etsi.org/ISG/CIM/Open/ISG_CIM_NGSI-LD_API_Draft_for_public_review.pdf\">draft recommendation</a>  and has been assigned <code>type=Product</code>.</p>\n","urlObject":{"protocol":"http","path":["v2","op","update"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"ce1aebed-16eb-4e3f-8cef-b009aa17a9d1"}],"id":"6474be41-c4b5-4c32-8372-f153fd970e3e","description":"<p>Overwrite operations are mapped to HTTP PUT.\nHTTP PATCH can be used to update several attributes at once.</p>\n","event":[{"listen":"prerequest","script":{"id":"061914f4-8b31-4177-a3e2-5a7d0bf58522","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"b098aeb4-22e9-4224-a638-ac10bb75d84f","type":"text/javascript","exec":[""]}}],"_postman_id":"6474be41-c4b5-4c32-8372-f153fd970e3e"},{"name":"Delete Operations","item":[{"name":"Delete a Data Entity","id":"87223590-54a2-4a23-ad8e-b71c2556d314","request":{"method":"DELETE","header":[],"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:010","description":"<p>This example deletes the Entity with <code>id=urn:ngsi-ld:Product:001</code> from the context</p>\n<p>Entities be deleted by making a DELETE request to the <code>/v2/entities/&lt;entity&gt;</code> endpoint.</p>\n<hr />\n<p>Subsequent requests using the same <code>id</code> will result in an error response since the entity no longer exists</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:010"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"87223590-54a2-4a23-ad8e-b71c2556d314"},{"name":"Delete an Attribute from a Data Entity","id":"d64545a0-2851-4554-a9e6-93acedf78b72","request":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":""},"url":"http://localhost:1026/v2/entities/urn:ngsi-ld:Product:010/attrs/specialOffer","description":"<p>This example remove the <code>specialOffer</code> attribute from the Entity with <code>id=urn:ngsi-ld:Product:010</code> </p>\n<p>Attributes be deleted by making a DELETE request to the <code>/v2/entities/&lt;entity&gt;/attrs/&lt;attribute&gt;</code> endpoint.</p>\n<hr />\n<p>If the attribute does not exist in the context, the result in an error response.</p>\n","urlObject":{"protocol":"http","path":["v2","entities","urn:ngsi-ld:Product:010","attrs","specialOffer"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"d64545a0-2851-4554-a9e6-93acedf78b72"},{"name":"Batch Delete Multiple Data Entities","id":"edeb9ba3-d2a5-4f46-8e9d-0d1f33ba6e62","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"actionType\":\"delete\",\n  \"entities\":[\n    {\n      \"id\":\"urn:ngsi-ld:Product:001\", \"type\":\"Product\"\n    },\n    {\n      \"id\":\"urn:ngsi-ld:Product:002\", \"type\":\"Product\"\n    }\n  ]\n}"},"url":"http://localhost:1026/v2/op/update","description":"<p>This example uses the convenience batch processing endpoint to delete a series of available products.</p>\n<p>Batch processing uses the <code>/v2/op/update</code> endpoint with a payload with two attributes - <code>actionType=delete</code> means we will\ndelete something from the context and the <code>entities</code> attribute holds the <code>id</code> of the entities we wish to update.</p>\n<hr />\n<p>If any entity does not exist in the context, the result in an error response.</p>\n","urlObject":{"protocol":"http","path":["v2","op","update"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"edeb9ba3-d2a5-4f46-8e9d-0d1f33ba6e62"},{"name":"Batch Delete  Multiple Attributes from a Data Entity","id":"fdf30b5d-4970-4c13-bdcc-b26c1ce21a00","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"actionType\":\"delete\",\n  \"entities\":[\n    {\n      \"id\":\"urn:ngsi-ld:Product:010\", \"type\":\"Product\",\n      \"price\":{},\n      \"name\": {}\n    }\n  ]\n}"},"url":"http://localhost:1026/v2/op/update","description":"<p>This example uses the convenience batch processing endpoint to delete a series of attributes from  an available product.</p>\n<p>Batch processing uses the <code>/v2/op/update</code> endpoint with a payload with two attributes - <code>actionType=delete</code> means we will\ndelete something from the context and the <code>entities</code> attribute holds an array of attributes we wish to update.</p>\n<hr />\n<p>If any attribute does not exist in the context, the result in an error response.</p>\n","urlObject":{"protocol":"http","path":["v2","op","update"],"host":["localhost:1026"],"query":[],"variable":[]}},"response":[],"_postman_id":"fdf30b5d-4970-4c13-bdcc-b26c1ce21a00"},{"name":"Find existing data relationships","id":"d6a3e12c-4541-46e7-8808-f378b666a6fe","request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"{\n  \"actionType\": \"APPEND\",\n  \"entities\": [\n    {\n    \"id\": \"7770\",\n    \"type\": \"Shelf\",\n    \"store\": { \n      \"type\": \"Relationship\",\n      \"value\": \"urn:ngsi-ld:Store:store1\"\n    },\n    \"location\": {\n        \"type\": \"geo:json\",\n        \"value\": {\n           \"type\": \"Point\",\n           \"coordinates\": [13.3986112, 52.554699]\n        }\n    },\n    \"name\": {\n        \"type\": \"Text\",\n        \"value\": \"Corner Unit\"\n    },\n    \"maxCapacity\": {\n        \"type\": \"Integer\",\n        \"value\": 50\n    }\n},\n\n {\n      \"id\": \"7771\",\n      \"type\": \"Shelf\",\n      \"store\": {\n        \"type\": \"Relationship\",\n        \"value\": \"urn:ngsi-ld:Store:store1\"\n      },\n      \"location\": {\n        \"type\": \"geo:json\",\n        \"value\": {\n          \"type\": \"Point\",\n          \"coordinates\": [\n            13.3987221,\n            52.5546640\n          ]\n        }\n      },\n      \"name\": {\n        \"type\": \"Text\",\n        \"value\": \"Wall Unit 1\"\n      },\n      \"maxCapacity\": {\n        \"type\": \"Integer\",\n        \"value\": 100\n      }\n    },\n    \n    {\n      \"id\": \"7772\",\n      \"type\": \"Shelf\",\n      \"store\": {\n        \"type\": \"Relationship\",\n        \"value\": \"urn:ngsi-ld:Store:store1\"\n      },\n      \"location\": {\n        \"type\": \"geo:json\",\n        \"value\": {\n          \"type\": \"Point\",\n          \"coordinates\": [\n            13.3987221,\n            52.5546640\n          ]\n        }\n      },\n      \"name\": {\n        \"type\": \"Text\",\n        \"value\": \"Wall Unit 2\"\n      },\n      \"maxCapacity\": {\n        \"type\": \"Integer\",\n        \"value\": 100\n      }\n    }\n    \n    \n\n\n\n\n  ]\n}"},"url":"http://localhost:1026/v2/entities/?q=refProduct==urn:ngsi-ld:Product:001&options=count&attrs=type","description":"<p>This example returns the key of all entities directly associated with the <code>urn:ngsi-ld:Product:001</code>.</p>\n<ul>\n<li>If this request returns an empty array, the entity has no associates - it can be safely deleted</li>\n<li>If the response lists a series of <strong>InventoryItem</strong> entities they should be deleted before the product is removed from the context.</li>\n</ul>\n<p>Note that we deleted <strong>Product</strong> <code>urn:ngsi-ld:Product:001</code> earlier, so what we\nsee above is actually a dangling reference, i.e. the returned <strong>InventoryItem</strong>\nreferences a <strong>Product</strong> that no longer exists.</p>\n","urlObject":{"protocol":"http","path":["v2","entities",""],"host":["localhost:1026"],"query":[{"key":"q","value":"refProduct==urn:ngsi-ld:Product:001"},{"description":{"content":"<ul>\n<li><code>keyValues</code> option in order to get a more compact and brief representation, including just attribute values</li>\n<li><code>values</code> option combined with a list of attribute values  <code>attrs</code>  for an ordered list of attributes only</li>\n</ul>\n","type":"text/plain"},"key":"options","value":"count"},{"description":{"content":"<p>Ordered list of attribute names to display</p>\n","type":"text/plain"},"key":"attrs","value":"type"}],"variable":[]}},"response":[],"_postman_id":"d6a3e12c-4541-46e7-8808-f378b666a6fe"}],"id":"25eb20a8-66e6-4b41-924e-1f43337024c7","description":"<p>Delete Operations map to HTTP DELETE.</p>\n<h2 id=\"data-relationships\">Data Relationships</h2>\n<p>If there are entities within the context which relate to one another, you must be careful when deleting an entity. You will need to check that no references are left dangling once the entity has been deleted. </p>\n<p>Organizing a cascade of deletions is beyond the scope of this tutorial, but it would be possible using a batch delete request.</p>\n","event":[{"listen":"prerequest","script":{"id":"add1245d-f9c3-4610-ae32-d12708236de5","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"0dd3c8e8-b424-43ae-a176-72bcb7b2ba7c","type":"text/javascript","exec":[""]}}],"_postman_id":"25eb20a8-66e6-4b41-924e-1f43337024c7"}],"event":[{"listen":"prerequest","script":{"id":"dff76437-6762-4f0f-9258-d0e5c77cca33","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"afdd2592-13bb-436d-a728-8af2d8c3d958","type":"text/javascript","exec":[""]}}],"variable":[{"id":"0b237012-4447-4688-bc10-bd8332c946c3","key":"orion","value":"localhost:1026"}]}