<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Magali Boulet</title>
    <description>The latest articles on DEV Community by Magali Boulet (@magaliboulet).</description>
    <link>https://dev.to/magaliboulet</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F517181%2F3d61403c-86f2-4dc5-89e4-fd029870f3a8.png</url>
      <title>DEV Community: Magali Boulet</title>
      <link>https://dev.to/magaliboulet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/magaliboulet"/>
    <language>en</language>
    <item>
      <title>Understanding and Testing the PubSub+ Event Portal REST API</title>
      <dc:creator>Magali Boulet</dc:creator>
      <pubDate>Tue, 27 Oct 2020 11:30:54 +0000</pubDate>
      <link>https://dev.to/solacedevs/understanding-and-testing-the-pubsub-event-portal-rest-api-5043</link>
      <guid>https://dev.to/solacedevs/understanding-and-testing-the-pubsub-event-portal-rest-api-5043</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---nTo3Opo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/04/blog-featured-image-pubsubplus-event-portal.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---nTo3Opo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/04/blog-featured-image-pubsubplus-event-portal.jpg" alt=""&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Whether it is CI/CD pipelines, event flow documentation systems, or using &lt;a href="https://solace.com/products/portal/"&gt;PubSub+ Event Portal&lt;/a&gt; as the unique event design and documentation tool for all your events in your enterprise, I’m sure you would appreciate an API to gather all the information. This is why PubSub+ Event Portal provides a REST API, which is compliant with the OpenAPI specification.&lt;/p&gt;

&lt;p&gt;The goal of this tutorial is to explain how this API works. It will also guide you through the steps needed to REST-enable Section 4 of this &lt;a href="https://codelabs.solace.dev/codelabs/design-to-code-workshop/#3"&gt;codelab&lt;/a&gt; (done using PubSub+ Event Portal GUI).&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding PubSub+ Event Portal REST API
&lt;/h2&gt;

&lt;p&gt;The PubSub+ Event Portal REST API provides the ability to interact with the PubSub+ Event Portal using RESTful patterns. For instance, it provides ways to browse artefacts, create, update, and delete events or applications. This is an easy way to integrate systems in a programmatic manner with the PubSub+ Event Portal Designer and Catalog.&lt;/p&gt;

&lt;p&gt;The PubSub+ Event Portal REST API has an OpenAPI specification document available at &lt;a href="https://openapi.solace.cloud"&gt;https://openapi.solace.cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-1.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2b3HiioJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-1.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Prerequisites to access the REST API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In order to perform REST API calls, you need an API token. Follow the steps to get that token:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to your &lt;a href="https://console.solace.cloud/"&gt;PubSub+ Cloud&lt;/a&gt; account&lt;/li&gt;
&lt;li&gt;Click on your name and go to the &lt;a href="https://console.solace.cloud/api-tokens"&gt;Token Management&lt;/a&gt; menu in the console
&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-2.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N6AtlD82--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-2.png" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Token&lt;br&gt;
&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-3.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QxP91-YD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-3.png" alt=""&gt;&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Give it a name and enable read &amp;amp; write permissions for PubSub+ Event Portal. You could choose to only enable read or write, depending on your needs, but in this tutorial we are going to use both read and write access.
&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-4.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ui74vqO0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-4.png" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Generate Token&lt;/strong&gt; and in the popup dialogue box click &lt;strong&gt;Copy&lt;/strong&gt; to store a copy of the token.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Testing the Event Portal REST API
&lt;/h2&gt;

&lt;p&gt;In this section, you are going to REST-enable Section 4 of this &lt;a href="https://codelabs.solace.dev/codelabs/design-to-code-workshop/#3"&gt;codelab&lt;/a&gt;, which was done using the PubSub+ Event Portal GUI.&lt;/p&gt;

&lt;p&gt;From &lt;a href="https://console.solace.cloud"&gt;https://console.solace.cloud&lt;/a&gt;, click the PubSub+ Event Portal &lt;strong&gt;Designer&lt;/strong&gt; , either by clicking on the left menu or the right-hand side Event Portal Designer menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-5.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b2Fncpvr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-5-1024x573.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter the &lt;strong&gt;Acme Rideshare&lt;/strong&gt; domain, which is created by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-6.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aRVo-8tt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As described in the &lt;a href="https://codelabs.solace.dev/codelabs/design-to-code-workshop/#3"&gt;codelab&lt;/a&gt;, we are going to follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an application&lt;/li&gt;
&lt;li&gt;Create an event&lt;/li&gt;
&lt;li&gt;Update the created application to publish this event&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Creating the &lt;em&gt;RideDropoffProcessor&lt;/em&gt; Application&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;According to the &lt;a href="https://openapi.solace.cloud/"&gt;Event Portal OpenAPI specification&lt;/a&gt;, to create an application using the &lt;em&gt;POST&lt;/em&gt; verb for the &lt;em&gt;Applications&lt;/em&gt; resource, we first need a domain id.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-7.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cOT7fWQ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-7.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, let’s get the Acme Rideshare domain id. For this, choose the tool you are comfortable with to perform HTTP requests. This tutorial uses Postman, but curl would also be fine.  To get the domain id, use the GET verb on the &lt;em&gt;applicationDomains&lt;/em&gt; resource with the &lt;em&gt;name&lt;/em&gt; parameter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-8.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1Qjb99ir--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should then use the following parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Url: &lt;a href="https://solace.cloud/api/v1/eventPortal/applicationDomains?name=Acme%20Rideshare"&gt;https://solace.cloud/api/v1/eventPortal/applicationDomains?name=Acme%20Rideshare&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;HTTP verb: &lt;strong&gt;GET&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Authorization header: add the previously generated token as &lt;strong&gt;Bearer Token&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are using Postman, you should get the following response:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-9.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--knAzt4iG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the response, locate the &lt;strong&gt;id&lt;/strong&gt; element. This is your domain id. In this example, the id is &lt;em&gt;pjn25g5eqlz&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You can now go ahead and create your application by using the following settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Url: &lt;a href="https://solace.cloud/api/v1/eventPortal/applications"&gt;https://solace.cloud/api/v1/eventPortal/applications&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;HTTP verb: &lt;strong&gt;POST&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Content-type: &lt;strong&gt;application/json&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Authorization header: add the previously generated token as &lt;strong&gt;Bearer Token&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Payload: make sure you use your own domain id
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{
"name": "RideDropoffProcessor",
"description": "Application created by Solace Event Portal REST API",
"applicationDomainId": "pjn25g5eqlz",
"revisionComment": "application creation",
"applicationClass": "unspecified"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using Postman to post this request, you should get the following response:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-10.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d2WoExsr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-10.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this stage, write down your application id (you will need it at a later step). In this example, the application id is q956yss2nqj.&lt;/p&gt;

&lt;p&gt;Switch back to Designer, in the &lt;strong&gt;Applications&lt;/strong&gt; tab, you now see the newly created application. In my case, it is at the end of the list:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-11.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1kWruY9x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-11.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Creating the Event &lt;em&gt;RideAverageUpdate&lt;/em&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Start by understanding the &lt;a href="https://openapi.solace.cloud/#/Events/add"&gt;OpenAPI specification&lt;/a&gt; to create an event.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-12.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cLMKUaez--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-12.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The mandatory elements are name and topic, but since we are following Section 4 of the &lt;a href="https://codelabs.solace.dev/codelabs/design-to-code-workshop/#3"&gt;codelab&lt;/a&gt;, we also need to link this event to a schema id. This means that the schema has to be created first, and then we’ll get its id.&lt;/p&gt;

&lt;p&gt;So, let’s first create the schema. Same as before, we start by having a look at the OpenAPI specification for creating a schema.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-13.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--brizb3Fu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-13.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our context, this means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Url: &lt;a href="https://solace.cloud/api/v1/eventPortal/schemas"&gt;https://solace.cloud/api/v1/eventPortal/schemas&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;HTTP verb: &lt;strong&gt;POST&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Content-type: &lt;strong&gt;application/json&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Authorization header: add the previously generated token as &lt;strong&gt;Bearer Token&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Payload: (make sure you use your own domain id)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{
"name": "RideAveragePayload",
"shared": false,
"description": "Event Payload which contains average meter readings, average passenger counts, and the number of rides in a given window duration",
"revisionComment": "Schema creation",
"contentType": "JSON",
"content": "{ \"$schema\": \"http://json-schema.org/draft-07/schema\",\"$id\": \"http://example.com/example.json\",\"type\": \"object\",\"title\": \"The root schema\",\"description\": \"The root schema comprises the entire JSON document.\",\"default\": {},\"examples\": [{\"timestamp\": \"2020-06-04T20:09:59.99832-04:00\",\"avg_meter_reading\": 21.615217,\"avg_passenger_count\": 1.5,\"window_duration_sec\": 300,\"window_ride_count\": 5}],\"required\": [\"timestamp\",\"avg_meter_reading\",\"avg_passenger_count\",\"window_duration_sec\",\"window_ride_count\"],\"additionalProperties\": true,\"properties\": {\"timestamp\": {\"$id\": \"#/properties/timestamp\",\"type\": \"string\",\"title\": \"The timestamp schema\",\"description\": \"An explanation about the purpose of this instance.\",\"default\": \"\",\"examples\": [\"2020-06-04T20:09:59.99832-04:00\"]},\"avg_meter_reading\": {\"$id\": \"#/properties/avg_meter_reading\",\"type\": \"number\",\"title\": \"The avg_meter_reading schema\",\"description\": \"An explanation about the purpose of this instance.\",\"default\": 0.0,\"examples\": [21.615217]},\"avg_passenger_count\": {\"$id\": \"#/properties/avg_passenger_count\",\"type\": \"number\",\"title\": \"The avg_passenger_count schema\",\"description\": \"An explanation about the purpose of this instance.\",\"default\": 0.0,\"examples\": [1.5]},\"window_duration_sec\": {\"$id\": \"#/properties/window_duration_sec\",\"type\": \"integer\",\"title\": \"The window_duration_sec schema\",\"description\": \"An explanation about the purpose of this instance.\",\"default\": 0,\"examples\": [300]},\"window_ride_count\": {\"$id\": \"#/properties/window_ride_count\",\"type\": \"integer\",\"title\": \"The window_ride_count schema\",\"description\": \"An explanation about the purpose of this instance.\",\"default\": 0,\"examples\": [5]}}}",
"applicationDomainId": "pjn25g5eqlz"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using Postman to post this request, you should get the following response:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-14.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mAZsO8M8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-14.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy and paste the id from the response. In my case, the schema id is &lt;em&gt;q956yss2o5t&lt;/em&gt;. If you switch back to Designer and go to the &lt;strong&gt;Schemas&lt;/strong&gt; tab, you’ll see the newly created schema.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-15.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MnowRILT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-15.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can now create the &lt;em&gt;RideAverageUpdate&lt;/em&gt; event using the following settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Url: &lt;a href="https://solace.cloud/api/v1/eventPortal/events"&gt;https://solace.cloud/api/v1/eventPortal/events&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;HTTP verb: &lt;strong&gt;POST&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Content-type: &lt;strong&gt;application/json&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Authorization header: add the previously generated token as &lt;strong&gt;Bearer Token&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Payload: make sure you add your own schema id and domain id
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{
"name": "RideAverageUpdate",
"shared": false,
"topicName": "taxi/nyc/v1/stats/dropoff/avg",
"description": "This event contains the average cost of rides over a specified duration",
"schemaId": "q956yss2o5t",
"applicationDomainId": "pjn25g5eqlz",
"revisionComment": "Event creation",
"brokerType": "solace",
"type": "event"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-16.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jeGV9sZv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-16.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this stage, write down your event id (you will need it at a later step). In this example, the event id is &lt;em&gt;q956yss2oiv&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Finally, switch back to Designer to visualize the &lt;em&gt;RideAverageUpdate&lt;/em&gt; event that was created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-17.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jsWvYr5r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-17.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also check the details of the event and you’ll find attached the &lt;em&gt;RideAveragePayload&lt;/em&gt; schema:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-18.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HFOrynik--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-18.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Update the created application&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Finally, in order to complete Step 4 of the &lt;a href="https://codelabs.solace.dev/codelabs/design-to-code-workshop/#3"&gt;codelab&lt;/a&gt;, you need to update the application &lt;em&gt;RideDropoffProcessor&lt;/em&gt; to publish the &lt;em&gt;RideAverageUpdate&lt;/em&gt; event. As always, start by understanding how to update an application by reading the OpenAPI specification, in the Applications resource, PATCH verb.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-19.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--giNCb8_1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-19.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need the application id (which will be added to the URI) and the fields that need to be updated. In this example, they are the &lt;em&gt;revisioncomment&lt;/em&gt; element and the &lt;em&gt;producedEventIds&lt;/em&gt; element.&lt;/p&gt;

&lt;p&gt;You can now update the application with the following settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Url: &lt;a href="https://solace.cloud/api/v1/eventPortal/applications/q956yss2nqj"&gt;https://solace.cloud/api/v1/eventPortal/applications/q956yss2nqj&lt;/a&gt; (make sure you use your own application id)&lt;/li&gt;
&lt;li&gt;HTTP verb: &lt;strong&gt;PATCH&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Content-type: &lt;strong&gt;application/json&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Authorization header: add the previously generated token as &lt;strong&gt;Bearer Token&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Payload: make sure you add your own event id
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{
"revisionComment": "Changed published event",
"producedEventIds": [
"q956yss2oiv"
]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using Postman, you should get a response similar to the one below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-20.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BcvhUJjK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-20.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, switch back to Designer to see the event &lt;em&gt;RideAverageUpdate&lt;/em&gt; published by the &lt;em&gt;RideDropoffProcessor&lt;/em&gt; application:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-21.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EaqDIMc6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-21.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also check the application revision history by clicking the three dots button at the end of the application line:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-22.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7oIcKl3P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-22-1024x228.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The revision history displays the update performed:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-23.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K0DrBaZL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-23.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Optional last step: AsyncAPI generation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now that you have created the application &lt;em&gt;RideDropOffProcessor&lt;/em&gt;, you can now begin implementing it. But where to start? And how? One easy way is to start with AsyncAPI, and then use an AsyncAPI code generator.&lt;/p&gt;

&lt;p&gt;AsyncAPI has emerged as the industry standard for defining asynchronous, event-driven APIs. You can think of it as OpenAPI for the asynchronous world. It is an open source initiative that provides both a specification to describe and document your asynchronous applications in a machine-readable format, and tooling (such as code generators) to make life easier for developers tasked with implementing them.&lt;/p&gt;

&lt;p&gt;The Event Portal REST API enables you to automate the creation of an AsyncAPI document. That will define the application you want to develop. This step describes how to generate this document using the REST API.&lt;/p&gt;

&lt;p&gt;So, let’s have a look at the &lt;a href="https://openapi.solace.cloud/#/AsyncAPI"&gt;AsyncAPI resource&lt;/a&gt; in the PubSub+ Event Portal REST API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-24.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bbq33BSB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-24.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All you need is the application id, which you got previously. It  will be passed in the URI and the AsyncAPI version to be generated which will be part of the payload to be sent. You can then generate your AsyncAPI document for the application by using the following settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Url: &lt;a href="https://solace.cloud/api/v1/eventPortal/applications/q956yss2nqj/generateAsyncApiRequest"&gt;https://solace.cloud/api/v1/eventPortal/applications/q956yss2nqj/generateAsyncApiRequest&lt;/a&gt; (make sure you use your own application id)&lt;/li&gt;
&lt;li&gt;HTTP verb: &lt;strong&gt;POST&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Content-type: &lt;strong&gt;application/json&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;HTTP Authorization header: add the previously generated token as &lt;strong&gt;Bearer Token&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Payload:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{
"asyncApiVersion": "2.0.0"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using Postman, you should get a similar response:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-25.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7872zCGY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2020/10/event-portal-rest-api-25.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The response contains the AsyncAPI document, describing the &lt;em&gt;RideDropOffProcessor&lt;/em&gt; application. Looking for a next step to generate the application code? Refer to Steps &lt;a href="https://codelabs.solace.dev/codelabs/design-to-code-workshop/#4"&gt;5&lt;/a&gt; and &lt;a href="https://codelabs.solace.dev/codelabs/design-to-code-workshop/#5"&gt;6&lt;/a&gt; of the &lt;a href="https://codelabs.solace.dev/codelabs/design-to-code-workshop/#0"&gt;codelab&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;PubSub+ Event Portal is an excellent tool to design and visualize your event-driven architecture, discover what events exist, and collaborate with your team. Using its REST API, you can automate the creation and modification of all your event-driven artefacts. Using AsyncAPI, your developers can generate the application code skeleton by leveraging the AsyncAPI code generator.  If you have any questions about PubSub+ Event Portal and its REST API, post them to the &lt;a href="https://solace.community/"&gt;&lt;strong&gt;Solace Developer Community&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://solace.com/blog/testing-the-pubsub-event-portal-rest-api/"&gt;Understanding and Testing the PubSub+ Event Portal REST API&lt;/a&gt; appeared first on &lt;a href="https://solace.com"&gt;Solace&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>fordevelopers</category>
    </item>
    <item>
      <title>Integrating IoT Devices with Datacenter Resources on the SigFox Network</title>
      <dc:creator>Magali Boulet</dc:creator>
      <pubDate>Wed, 17 May 2017 05:00:00 +0000</pubDate>
      <link>https://dev.to/solacedevs/integrating-iot-devices-with-datacenter-resources-on-the-sigfox-network-499i</link>
      <guid>https://dev.to/solacedevs/integrating-iot-devices-with-datacenter-resources-on-the-sigfox-network-499i</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q4ZvfL11--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2018/12/sigfox-blog-featured-image.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q4ZvfL11--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2018/12/sigfox-blog-featured-image.jpg" alt="" width="860" height="325"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We’ve recently been doing some work with a French company called Sigfox that has some ambitious goals for enabling the Internet of Things. Rather than using a general-purpose IP-based cellular network, which requires significant power and silicon for basic connectivity, they’ve developed a purpose-built network designed to meet the needs of millions or even billions of low-powered IoT devices. They believe they can reduce power requirements enough that many devices can run without batteries (powered by solar for example) and with a fraction of the communications silicon required to connect via other wireless networks. Exciting stuff!&lt;/p&gt;

&lt;p&gt;At Solace, we have taken a similar approach to tackling the challenges of data movement by tackling the right tools for the right jobs. Sophisticated messaging and streaming in the back office, WAN optimization for efficient cloud synchronization and lightweight protocols and APIs for IoT devices.&lt;/p&gt;

&lt;p&gt;This shared vision is what brought our two companies together and what has led to some of my efforts building a proof-of-concept application that shows the capabilities of our combined solutions. Sigfox brings best-in-class connectivity for sensors and devices, and Solace brings a flexible means of delivering that data to enterprise apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t8b4m0d3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t8b4m0d3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_1.png" alt="" width="880" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the PoC, Sigfox device data is distributed to two databases (SAP Hana and Cloudant), as well as to a mobile application using MQTT. I have deployed these two databases in two different public cloud: SAP Hana in AWS and Cloudant in Buemix, as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MFa9FpOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MFa9FpOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_2.png" alt="" width="880" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This PoC features Solace open data movement and SigFox IoT network capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bridging low-powered devices with Enterprise applications&lt;/li&gt;
&lt;li&gt;Messaging protocol transformation&lt;/li&gt;
&lt;li&gt;Dynamic message and stream routing&lt;/li&gt;
&lt;li&gt;Fan in from many devices&lt;/li&gt;
&lt;li&gt;Fan out to many enterprise applications&lt;/li&gt;
&lt;li&gt;Easy configuration&lt;/li&gt;
&lt;li&gt;Decoupling consumers from producers&lt;/li&gt;
&lt;li&gt;Scalable and resilient architecture&lt;/li&gt;
&lt;li&gt;Choice of public clouds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have worked with Sigfox to connect test devices to a Solace appliance deployed in our London offices. Messages sent by the devices are published to a topic that with subscribers in both SAP Hana and Cloudant.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q4BN5r0F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q4BN5r0F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_3.jpg" alt="" width="500" height="667"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s the sensor data collection portal management site: &lt;a href="https://www.sensit.io"&gt;https://www.sensit.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tntiW0Hn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tntiW0Hn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_4.png" alt="" width="880" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Solace Configuration&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Configuration in Solace for running this demo simply consists in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Activating REST and MQTT service ports&lt;/li&gt;
&lt;li&gt;Configuring HTTP(S) targets for sending messages to Hana and Cloudant. No coding is required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: there is no need to configure anything for the MQTT mobile connectivity: by default, any message received by Solace is available to any supported protocol (if the security mechanisms permit). So, a MQTT client can easily subscribe to the messages posted by Sigfox.&lt;/p&gt;

&lt;p&gt;It has been decided to include the sensor ID in the URI: Sigfox sends the sensor information to a URL like &lt;a href="http://solace:port/"&gt;http://solace:port/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The configuration of the HTTP targets to send POST over HTTP (or HTTPS) messages is accomplished using the &lt;em&gt;REST Delivery Point&lt;/em&gt; object which is bound to a &lt;em&gt;REST Consumer&lt;/em&gt; and a Queue binding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;em&gt;REST Consumer&lt;/em&gt; object defines the target of the POST over HTTP(S) message&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;Queue binding&lt;/em&gt; is used to attract messages (based on a topic namespace) to be sent by a REST Consumer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The below schema summarizes the Solace configuration:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qj11UZYf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_5-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qj11UZYf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_5-1.png" alt="" width="880" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same configuration has been done for Hana.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Let’s have a look at what happens when running the demo.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The sensor is configured to send light information every hour. This can be configured a more or less frequent update period – up to 8 messages per sliding hour, which is a limit by Sigfox network. Also, you can force the sensor to send information by pushing a button, which is handy for the demo.&lt;/p&gt;

&lt;p&gt;At each update, the sensor data is sent by Sigfox to Solace, which then distributes to Hana, Cloudant and the Mobile MQTT client installed on my iPhone.&lt;/p&gt;

&lt;p&gt;In Cloudant, there is a very easy and intuitive user interface showing all the database documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The DeviceID displays the identifier of the sensor and the rest of the columns represent information sent by Sigfox sensor.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vkajky2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_6.jpg" alt="" width="880" height="408"&gt;
&lt;/li&gt;
&lt;li&gt;Let’s have a look at the sensor information whose Sequence is #408:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wQuywvGF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_7.jpg" alt="" width="880" height="425"&gt;
&lt;/li&gt;
&lt;li&gt;Now let’s start browsing Hana using Studio for Hana and search for this same sequence number. The selected row on the below screenshot corresponds to the same sequence number #408 and contains the same sensor information.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1t3vo60f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_8.jpg" alt="" width="880" height="495"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, let’s have a look at the Mobile MQTT app for iPhone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First you need to fill in connectivity information to the Solace broker:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wdqWt3zO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_9.png" alt="" width="500" height="889"&gt;
&lt;/li&gt;
&lt;li&gt;Then, using the Subscribe menu, you type the sensor id:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o2KPgi4K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_10.png" alt="" width="500" height="863"&gt;
&lt;/li&gt;
&lt;li&gt;And finally the message with sequence number #408 is received:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NDBJT-62--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2017/05/sigfox-blog_11.png" alt="" width="500" height="889"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Implementing Solace’s open data movement capabilities in conjunction with Sigfox’s innovative connectivity solution for sensors and devices has some serious potential. I look forward to seeing how our customers tap into the combination to link IoT devices with enterprise applications and business processes.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://solace.com/blog/integrating-iot-with-datacenter-sigfox-network/"&gt;Integrating IoT Devices with Datacenter Resources on the SigFox Network&lt;/a&gt; appeared first on &lt;a href="https://solace.com"&gt;Solace&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>usecases</category>
      <category>iot</category>
    </item>
    <item>
      <title>Demonstrating IoT at SAP TechEd Barcelona</title>
      <dc:creator>Magali Boulet</dc:creator>
      <pubDate>Tue, 15 Nov 2016 06:00:00 +0000</pubDate>
      <link>https://dev.to/solacedevs/demonstrating-iot-at-sap-teched-barcelona-31b1</link>
      <guid>https://dev.to/solacedevs/demonstrating-iot-at-sap-teched-barcelona-31b1</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bMt7Z8K1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2019/08/solace-default-blog-thumbnail-600x285.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bMt7Z8K1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2019/08/solace-default-blog-thumbnail-600x285.jpg" alt="Further thoughts on FPGA co-processing and performance"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last week I attended SAP TechEd in Barcelona. As a strategic partner of SAP, Solace had a booth where I had set up an Internet of Things demo. It consisted of a toy train carrying a sensor which collected information about temperature, direction and speed, and sent the data to a Raspberry Pi via Bluebooth. The Raspberry Pi in turn published this information to a topic in a Solace appliance in London using the MQTT protocol. A consumer represented by a Java program deployed locally on my Macbook in Barcelona subscribed to the topic and provisioned an influx database, which was used by a Grafana Dashboard to display the sensor information.&lt;/p&gt;

&lt;p&gt;Here is the architecture of the demo:&lt;br&gt;&lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hQoj_CvA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2016/11/sap-teched-demo-architecture.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hQoj_CvA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2016/11/sap-teched-demo-architecture.png" alt="sap-teched-demo-architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This simple demo illustrated the ability of Solace to easily provide a pub/sub architecture that’s robust, scalable and highly available. On top of this, Solace serving as the messaging back-bone of SAP Hana Cloud Platform was another real life example of the reliability of our solution, being used already in many SAP datacenters worldwide.&lt;/p&gt;

&lt;p&gt;Tweets of the demo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our &lt;a href="https://twitter.com/hashtag/iot?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#iot&lt;/a&gt; demo is ready! Come to the &lt;a href="https://twitter.com/hashtag/solacedotcom?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#solacedotcom&lt;/a&gt; booth &lt;a href="https://twitter.com/hashtag/SAPTechEd?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#SAPTechEd&lt;/a&gt; &lt;a href="https://t.co/Vr12AC96It"&gt;pic.twitter.com/Vr12AC96It&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Magali Boulet (&lt;a class="comment-mentioned-user" href="https://dev.to/magaliboulet"&gt;@magaliboulet&lt;/a&gt;
) &lt;a href="https://twitter.com/MagaliBoulet/status/795948211047432192?ref_src=twsrc%5Etfw"&gt;November 8, 2016&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;Come visit our booth &lt;a href="https://twitter.com/hashtag/SAPTechEd?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#SAPTechEd&lt;/a&gt; &lt;a href="https://t.co/JOvpcRVoQF"&gt;pic.twitter.com/JOvpcRVoQF&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Magali Boulet (&lt;a class="comment-mentioned-user" href="https://dev.to/magaliboulet"&gt;@magaliboulet&lt;/a&gt;
) &lt;a href="https://twitter.com/MagaliBoulet/status/795942235615457280?ref_src=twsrc%5Etfw"&gt;November 8, 2016&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here’s a video I made of the demo:  &lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://solace.com/blog/demonstrating-iot-sap-teched-barcelona/"&gt;Demonstrating IoT at SAP TechEd Barcelona&lt;/a&gt; appeared first on &lt;a href="https://solace.com"&gt;Solace&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>usecases</category>
      <category>cloud</category>
      <category>iot</category>
    </item>
  </channel>
</rss>
