iot-sol
Version:
Intel(r) IoT Services Orchestration Layer - HTML5 IDE + Node.js middleware to create and host distributed IoT Apps in minutes
587 lines (586 loc) • 48.3 kB
HTML
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<meta name="author" content="Copyright 2015 Intel Corporation All Rights Reserved." />
<title>IoT Services Orchestration Layer</title>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
div.sourceCode { overflow-x: auto; }
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
code > span.dt { color: #902000; } /* DataType */
code > span.dv { color: #40a070; } /* DecVal */
code > span.bn { color: #40a070; } /* BaseN */
code > span.fl { color: #40a070; } /* Float */
code > span.ch { color: #4070a0; } /* Char */
code > span.st { color: #4070a0; } /* String */
code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
code > span.ot { color: #007020; } /* Other */
code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
code > span.fu { color: #06287e; } /* Function */
code > span.er { color: #ff0000; font-weight: bold; } /* Error */
code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code > span.cn { color: #880000; } /* Constant */
code > span.sc { color: #4070a0; } /* SpecialChar */
code > span.vs { color: #4070a0; } /* VerbatimString */
code > span.ss { color: #bb6688; } /* SpecialString */
code > span.im { } /* Import */
code > span.va { color: #19177c; } /* Variable */
code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code > span.op { color: #666666; } /* Operator */
code > span.bu { } /* BuiltIn */
code > span.ex { } /* Extension */
code > span.pp { color: #bc7a00; } /* Preprocessor */
code > span.at { color: #7d9029; } /* Attribute */
code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
</style>
<link href="data:text/css;charset=utf-8,body%20%7B%0Amargin%3A%20auto%3B%0Apadding%2Dright%3A%201em%3B%0Apadding%2Dleft%3A%201em%3B%0Amax%2Dwidth%3A%2044em%3B%20border%2Dleft%3A%201px%20solid%20black%3B%0Aborder%2Dright%3A%201px%20solid%20black%3B%0Acolor%3A%20black%3B%0Afont%2Dfamily%3A%20Verdana%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%20100%25%3B%0Aline%2Dheight%3A%20140%25%3B%0Acolor%3A%20%23333%3B%20%7D%0Apre%20%7B%0Aborder%3A%201px%20dotted%20gray%3B%0Abackground%2Dcolor%3A%20%23ececec%3B%0Acolor%3A%20%231111111%3B%0Apadding%3A%200%2E5em%3B%0A%7D%0Acode%20%7B%0Afont%2Dfamily%3A%20monospace%3B%0A%7D%0Ah1%20a%2C%20h2%20a%2C%20h3%20a%2C%20h4%20a%2C%20h5%20a%20%7B%20text%2Ddecoration%3A%20none%3B%0Acolor%3A%20%237a5ada%3B%20%7D%0Ah1%2C%20h2%2C%20h3%2C%20h4%2C%20h5%20%7B%20font%2Dfamily%3A%20verdana%3B%0Afont%2Dweight%3A%20bold%3B%0Aborder%2Dbottom%3A%201px%20dotted%20black%3B%0Acolor%3A%20%237a5ada%3B%20%7D%0Ah1%20%7B%0Afont%2Dsize%3A%20130%25%3B%0A%7D%0Ah2%20%7B%0Afont%2Dsize%3A%20110%25%3B%0A%7D%0Ah3%20%7B%0Afont%2Dsize%3A%2095%25%3B%0A%7D%0Ah4%20%7B%0Afont%2Dsize%3A%2090%25%3B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0Ah5%20%7B%0Afont%2Dsize%3A%2090%25%3B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0Ah1%2Etitle%20%7B%0Afont%2Dsize%3A%20200%25%3B%0Afont%2Dweight%3A%20bold%3B%0Apadding%2Dtop%3A%200%2E2em%3B%0Apadding%2Dbottom%3A%200%2E2em%3B%0Atext%2Dalign%3A%20left%3B%0Aborder%3A%20none%3B%0A%7D%0Adt%20code%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Add%20p%20%7B%0Amargin%2Dtop%3A%200%3B%0A%7D%0A%23footer%20%7B%0Apadding%2Dtop%3A%201em%3B%0Afont%2Dsize%3A%2070%25%3B%0Acolor%3A%20gray%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Apre%20%7B%0Abackground%2Dcolor%3A%20%23FDF6E3%0A%7D%0Aimg%20%7B%0Amax%2Dwidth%3A%2044em%3B%0A%7D%0A%2F%2F%20KeyWordTok%0A%2EsourceCode%20%2Ekw%20%7B%20color%3A%20%23268BD2%3B%20%7D%0A%2F%2F%20DataTypeTok%0A%2EsourceCode%20%2Edt%20%7B%20color%3A%20%23268BD2%3B%20%7D%0A%2F%2F%20DecValTok%20%28decimal%20value%29%2C%20BaseNTok%2C%20FloatTok%0A%2EsourceCode%20%2Edv%2C%20%2EsourceCode%20%2Ebn%2C%20%2EsourceCode%20%2Efl%20%7B%20color%3A%20%23D33682%3B%20%7D%0A%2F%2F%20CharTok%0A%2EsourceCode%20%2Ech%20%7B%20color%3A%20%23DC322F%3B%20%7D%0A%2F%2F%20StringTok%0A%2EsourceCode%20%2Est%20%7B%20color%3A%20%232AA198%3B%20%7D%0A%2F%2F%20CommentTok%0A%2EsourceCode%20%2Eco%20%7B%20color%3A%20%2393A1A1%3B%20%7D%0A%2F%2F%20OtherTok%0A%2EsourceCode%20%2Eot%20%7B%20color%3A%20%23A57800%3B%20%7D%0A%2F%2F%20AlertTok%0A%2EsourceCode%20%2Eal%20%7B%20color%3A%20%23CB4B16%3B%20font%2Dweight%3A%20bold%3B%20%7D%0A%2F%2F%20FunctionTok%0A%2EsourceCode%20%2Efu%20%7B%20color%3A%20%23268BD2%3B%20%7D%0A%2F%2F%20RegionMarkerTok%0A%2EsourceCode%20%2Ere%20%7B%20%7D%0A%2F%2F%20ErrorTok%0A%2EsourceCode%20%2Eer%20%7B%20color%3A%20%23D30102%3B%20font%2Dweight%3A%20bold%3B%20%7D%0A" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="header">
<h1 class="title">IoT Services Orchestration Layer</h1>
<h2 class="author">Copyright 2015 Intel Corporation All Rights Reserved.</h2>
</div>
<div id="TOC">
<ul>
<li><a href="#frontend-api">Frontend API</a><ul>
<li><a href="#introduction">Introduction</a><ul>
<li><a href="#example">Example</a></li>
</ul></li>
<li><a href="#category">Category</a><ul>
<li><a href="#app">App</a></li>
<li><a href="#graph">Graph</a></li>
<li><a href="#ui">UI</a></li>
<li><a href="#spec">Spec</a></li>
<li><a href="#hub">Hub</a></li>
<li><a href="#thing">Thing</a></li>
<li><a href="#service">Service</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<h1 id="frontend-api">Frontend API</h1>
<h2 id="introduction">Introduction</h2>
<p>REST API provides a powerful and simple Web services API for interacting with Intel(R) <em>IoT Services Orchestration Layer</em>. The API consist of two groups:</p>
<ul>
<li><strong>DevFrontEnd</strong></li>
<li><strong>UserFrontEnd</strong></li>
</ul>
<p>Currently, all of API using the standard <strong>POST</strong> HTTP method.</p>
<table>
<thead>
<tr class="header">
<th>API</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>DevFrontEnd</code></td>
<td><code>http://<host>:8080/apis/dev</code></td>
</tr>
<tr class="even">
<td><code>UserFrontEnd</code></td>
<td><code>http://<host>:3000/apis/user</code></td>
</tr>
</tbody>
</table>
<h3 id="example">Example</h3>
<p>Fetch the list of apps.</p>
<h4 id="request">Request</h4>
<p>Request URL:</p>
<p><code>http://localhost:8080/apis/dev</code></p>
<p>Requst body:</p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.list"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[]</span><span class="fu">}</span></code></pre></div>
<h4 id="response">Response</h4>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"name"</span><span class="fu">:</span><span class="st">"A4"</span><span class="fu">,</span><span class="dt">"id"</span><span class="fu">:</span><span class="st">"HOPE_APP_184c1560"</span><span class="fu">,</span><span class="dt">"description"</span><span class="fu">:</span><span class="st">"A4 XXX"</span><span class="fu">,</span>
<span class="dt">"graphs"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span><span class="st">"GRAPH_0014b930"</span><span class="fu">,</span><span class="dt">"name"</span><span class="fu">:</span><span class="st">"G1"</span><span class="fu">,</span><span class="dt">"description"</span><span class="fu">:</span><span class="st">""</span>
<span class="fu">}</span><span class="ot">,</span><span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span><span class="st">"GRAPH_4058fec0"</span><span class="fu">,</span><span class="dt">"name"</span><span class="fu">:</span><span class="st">"ox"</span><span class="fu">,</span><span class="dt">"description"</span><span class="fu">:</span><span class="st">""</span>
<span class="fu">}</span><span class="ot">]</span><span class="fu">,</span>
<span class="dt">"uis"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span><span class="st">"UI_1bb298f0"</span><span class="fu">,</span><span class="dt">"name"</span><span class="fu">:</span><span class="st">"U1"</span><span class="fu">,</span><span class="dt">"description"</span><span class="fu">:</span><span class="st">""</span>
<span class="fu">}</span><span class="ot">]</span><span class="fu">,</span>
<span class="fu">}</span><span class="ot">,</span><span class="fu">{</span>
<span class="dt">"name"</span><span class="fu">:</span><span class="st">"A1"</span><span class="fu">,</span><span class="dt">"id"</span><span class="fu">:</span><span class="st">"HOPE_APP_27598be0"</span><span class="fu">,</span><span class="dt">"description"</span><span class="fu">:</span><span class="st">""</span><span class="fu">,</span>
<span class="dt">"graphs"</span><span class="fu">:</span><span class="ot">[]</span><span class="fu">,</span><span class="dt">"uis"</span><span class="fu">:</span><span class="ot">[]</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<h2 id="category">Category</h2>
<h3 id="app">App</h3>
<h4 id="app.list">app.list</h4>
<p><strong>Description</strong></p>
<pre><code>Get the list of app.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
<li><em>UserFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.list"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">app_info</span> <span class="ot">]</span></code></pre></div>
<h4 id="app.get">app.get</h4>
<p><strong>Description</strong></p>
<pre><code>Get a list of app that given in array of app_id.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
<li><em>UserFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.get"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">app_id</span> <span class="ot">]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">app_info</span> <span class="ot">]</span></code></pre></div>
<h4 id="app.get_widget_data">app.get_widget_data</h4>
<p><strong>Description</strong></p>
<pre><code>Get widget data cached in server.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
<li><em>UserFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.get_widget_data"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"app"</span><span class="fu">:</span> <span class="er">app_id</span><span class="fu">,</span>
<span class="dt">"widget"</span><span class="fu">:</span> <span class="er">widget_id</span><span class="fu">,</span>
<span class="fu">}</span><span class="ot">]</span>
<span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">widget</span> <span class="er">data</span> <span class="ot">]</span></code></pre></div>
<h4 id="app.send_widget_data">app.send_widget_data</h4>
<p><strong>Description</strong></p>
<pre><code>Post the data to server, this data will be consumed by workflow engine.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
<li><em>UserFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.send_widget_data"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"app"</span><span class="fu">:</span> <span class="er">app_id</span><span class="fu">,</span>
<span class="dt">"widget"</span><span class="fu">:</span> <span class="er">widget_id</span><span class="fu">,</span>
<span class="dt">"data"</span><span class="fu">:</span> <span class="er">data</span>
<span class="fu">}</span><span class="ot">]</span>
<span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<p>N/A</p>
<h4 id="app.create">app.create</h4>
<p><strong>Description</strong></p>
<pre><code>Create and return an app.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.create"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"name"</span><span class="fu">:</span> <span class="er">app_name</span><span class="fu">,</span>
<span class="dt">"description"</span><span class="fu">:</span> <span class="er">app_desc</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span> <span class="er">app_info</span> <span class="fu">}</span></code></pre></div>
<h4 id="app.update">app.update</h4>
<p><strong>Description</strong></p>
<pre><code>Update the app information.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.update"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"app"</span><span class="fu">:</span> <span class="er">app_id</span><span class="fu">,</span>
<span class="dt">"props"</span><span class="fu">:</span> <span class="fu">{</span><span class="er">...</span><span class="fu">}</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="er">command</span> <span class="er">log</span><span class="fu">}</span></code></pre></div>
<h4 id="app.remove">app.remove</h4>
<p><strong>Description</strong></p>
<pre><code>Delete one app on the server, this operation will also automatically delete all
workflows and UI belong it.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.remove"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span> <span class="dt">"app"</span><span class="fu">:</span> <span class="er">app_id</span> <span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="er">command</span> <span class="er">log</span><span class="fu">}</span></code></pre></div>
<h4 id="app.create_graph">app.create_graph</h4>
<p><strong>Description</strong></p>
<pre><code>Create a new workflow.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.create_graph"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"app"</span><span class="fu">:</span> <span class="er">app_id</span><span class="fu">,</span>
<span class="dt">"graph"</span><span class="fu">:</span> <span class="er">graph_info</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="er">command</span> <span class="er">log</span><span class="fu">}</span></code></pre></div>
<h4 id="app.create_ui">app.create_ui</h4>
<p><strong>Description</strong></p>
<pre><code>Create a new UI.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"app.create_ui"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"app"</span><span class="fu">:</span> <span class="er">app_id</span><span class="fu">,</span>
<span class="dt">"ui"</span><span class="fu">:</span> <span class="er">ui_info</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="er">command</span> <span class="er">log</span><span class="fu">}</span></code></pre></div>
<h3 id="graph">Graph</h3>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<h4 id="graph.get">graph.get</h4>
<p><strong>Description</strong></p>
<pre><code>Get a list of workflow that given in array of graph_id.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"graph.get"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">graph_id</span> <span class="ot">]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">graph_info</span> <span class="ot">]</span></code></pre></div>
<h4 id="graph.update">graph.update</h4>
<p><strong>Description</strong></p>
<pre><code>Update one graph.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"graph.update"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">graph_info</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="er">command</span> <span class="er">log</span><span class="fu">}</span></code></pre></div>
<h4 id="graph.remove">graph.remove</h4>
<p><strong>Description</strong></p>
<pre><code>Delete workflows on the server.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"graph.remove"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">graph_id</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="er">command</span> <span class="er">log</span><span class="fu">}</span></code></pre></div>
<h4 id="graph.start">graph.start</h4>
<p><strong>Description</strong></p>
<pre><code>Start workflows on the server.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"graph.start"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">graph_id</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{}</span></code></pre></div>
<h4 id="graph.stop">graph.stop</h4>
<p><strong>Description</strong></p>
<pre><code>Stop workflows on the server.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"graph.stop"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">graph_id</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{}</span></code></pre></div>
<h4 id="graph.status">graph.status</h4>
<p><strong>Description</strong></p>
<pre><code>Get the status of workflows, valid status is "Non-exist", "Working", "Paused", "Stopped"
or "Idle".</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"graph.status"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">graph_id</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="fu">{</span>
<span class="dt">"graph"</span><span class="fu">:</span> <span class="er">graph_id</span><span class="fu">,</span>
<span class="dt">"status"</span><span class="fu">:</span> <span class="er">status</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<h4 id="graph.trace">graph.trace</h4>
<p><strong>Description</strong></p>
<pre><code>Get the tracing data of workflows.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"graph.trace"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">graph_id</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span> <span class="er">graph_id</span><span class="fu">,</span>
<span class="dt">"trace"</span><span class="fu">:</span> <span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">records</span> <span class="ot">]</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<h3 id="ui">UI</h3>
<h4 id="ui.get">ui.get</h4>
<p><strong>Description</strong></p>
<pre><code>Get a list of UI that given in array of ui_id.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
<li><em>UserFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"ui.get"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">ui_id</span> <span class="ot">]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">ui_info</span> <span class="ot">]</span></code></pre></div>
<h4 id="ui.update">ui.update</h4>
<p><strong>Description</strong></p>
<pre><code>Update one UI.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"ui.update"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">ui_info</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="er">command</span> <span class="er">log</span><span class="fu">}</span></code></pre></div>
<h4 id="ui.remove">ui.remove</h4>
<p><strong>Description</strong></p>
<pre><code>Delete workflows on the server.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"ui.remove"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">ui_id</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="er">command</span> <span class="er">log</span><span class="fu">}</span></code></pre></div>
<h3 id="spec">Spec</h3>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
<li><em>UserFrontEnd</em></li>
</ul>
<h4 id="spec_bundle.list">spec_bundle.list</h4>
<p><strong>Description</strong></p>
<pre><code>Get the list of all available spec bundle.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"spec_bundle.list"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">spec_bundle_info</span> <span class="ot">]</span></code></pre></div>
<h4 id="spec_bundle.get">spec_bundle.get</h4>
<p><strong>Description</strong></p>
<pre><code>Get the list of spec bundle that given in array of spec_bundle_id.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"spec_bundle.get"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">spec_bundle_id</span> <span class="ot">]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">spec_bundle_info</span> <span class="ot">]</span></code></pre></div>
<h4 id="spec_bundle.get_for_specs">spec_bundle.get_for_specs</h4>
<p><strong>Description</strong></p>
<pre><code>Get the list of spec bundle that includes spec in array of spec_id.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"spec_bundle.get_for_specs"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">spec_id</span> <span class="ot">]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">spec_bundle_info</span> <span class="ot">]</span></code></pre></div>
<h3 id="hub">Hub</h3>
<h4 id="hub.list">hub.list</h4>
<p><strong>Description</strong></p>
<pre><code>Get the brief list of all available Hub.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
<li><em>UserFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"hub.list"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span> <span class="er">hub_id</span><span class="fu">,</span>
<span class="dt">"name"</span><span class="fu">:</span> <span class="er">hub_name</span><span class="fu">,</span>
<span class="dt">"description"</span><span class="fu">:</span> <span class="er">hub_desc</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<h4 id="hub.get">hub.get</h4>
<p><strong>Description</strong></p>
<pre><code>Get a list of Hub given in array of hub_id.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
<li><em>UserFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span><span class="dt">"api"</span><span class="fu">:</span><span class="st">"hub.get"</span><span class="fu">,</span><span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">hub_id</span> <span class="ot">]</span><span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">hub_info</span><span class="ot">]</span></code></pre></div>
<h4 id="hub.create_thing">hub.create_thing</h4>
<p><strong>Description</strong></p>
<pre><code>Create a new thing on the Hub.</code></pre>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"hub.create_thing"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"hub"</span><span class="fu">:</span> <span class="er">hub_id</span><span class="fu">,</span>
<span class="dt">"thing"</span><span class="fu">:</span> <span class="fu">{</span>
<span class="dt">"type"</span><span class="fu">:</span> <span class="st">"hope_thing"</span><span class="fu">,</span>
<span class="dt">"name"</span><span class="fu">:</span> <span class="er">thing_name</span><span class="fu">,</span>
<span class="dt">"description"</span><span class="fu">:</span> <span class="er">thing_desc</span>
<span class="fu">}</span>
<span class="fu">}</span><span class="ot">]</span>
<span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span> <span class="er">thing_id</span><span class="fu">,</span>
<span class="dt">"name"</span><span class="fu">:</span> <span class="er">thing_name</span><span class="fu">,</span>
<span class="dt">"type"</span><span class="fu">:</span> <span class="st">"hope_thing"</span>
<span class="fu">}</span></code></pre></div>
<h3 id="thing">Thing</h3>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<h4 id="thing.update">thing.update</h4>
<p><strong>Description</strong></p>
<pre><code>Update the thing information.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"thing.update"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span> <span class="er">thing_id</span><span class="fu">,</span>
<span class="er">...</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{}</span></code></pre></div>
<h4 id="thing.remove">thing.remove</h4>
<p><strong>Description</strong></p>
<pre><code>Delete things on the server, this operation will also automatically delete all
services belong it.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"thing.remove"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[[</span> <span class="er">thing_id</span> <span class="ot">]]</span></code></pre></div>
<p><strong>Response</strong></p>
<p>N/A</p>
<h4 id="thing.create_service">thing.create_service</h4>
<p><strong>Description</strong></p>
<pre><code>Create a new service on the Thing.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"thing.create_service"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"thing"</span><span class="fu">:</span> <span class="er">thing_id</span><span class="fu">,</span>
<span class="dt">"service"</span><span class="fu">:</span> <span class="fu">{</span>
<span class="dt">"type"</span><span class="fu">:</span> <span class="st">"hope_service"</span><span class="fu">,</span>
<span class="dt">"spec"</span><span class="fu">:</span> <span class="er">spec_id</span> <span class="er">or</span> <span class="er">spec</span><span class="fu">,</span>
<span class="dt">"name"</span><span class="fu">:</span> <span class="er">service_name</span><span class="fu">,</span>
<span class="dt">"description"</span><span class="fu">:</span> <span class="er">service_desc</span>
<span class="fu">}</span>
<span class="fu">}</span><span class="ot">]</span>
<span class="fu">}</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span> <span class="er">service_id</span><span class="fu">,</span>
<span class="dt">"name"</span><span class="fu">:</span> <span class="er">service_name</span><span class="fu">,</span>
<span class="dt">"type"</span><span class="fu">:</span> <span class="st">"hope_service"</span>
<span class="fu">}</span></code></pre></div>
<h3 id="service">Service</h3>
<p><strong>Applicability</strong></p>
<ul>
<li><em>DevFrontEnd</em></li>
</ul>
<h4 id="service.update">service.update</h4>
<p><strong>Description</strong></p>
<pre><code>Update the service information.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"service.update"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"id"</span><span class="fu">:</span> <span class="er">service_id</span><span class="fu">,</span>
<span class="er">...</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{}</span></code></pre></div>
<h4 id="service.remove">service.remove</h4>
<p><strong>Description</strong></p>
<pre><code>Delete services on the server, this operation will also automatically delete all codes
for it.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"service.remove"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[[</span> <span class="er">service_id</span> <span class="ot">]]</span></code></pre></div>
<p><strong>Response</strong></p>
<p>N/A</p>
<h4 id="service.list_files">service.list_files</h4>
<p><strong>Description</strong></p>
<pre><code>Get a list of file that service had and/or expected for.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"service.list_files"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span> <span class="er">service_id</span> <span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"expected"</span><span class="fu">:</span> <span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">filename</span> <span class="ot">]</span><span class="fu">,</span>
<span class="dt">"existing"</span><span class="fu">:</span> <span class="ot">[</span> <span class="er">Array</span> <span class="er">of</span> <span class="er">filename</span> <span class="ot">]</span>
<span class="fu">}</span></code></pre></div>
<h4 id="service.read_file">service.read_file</h4>
<p><strong>Description</strong></p>
<pre><code>Read a service file.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"service.read_file"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"service_id"</span><span class="fu">:</span> <span class="er">service_id</span><span class="fu">,</span>
<span class="dt">"file_path"</span><span class="fu">:</span> <span class="er">file_path</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"content"</span><span class="fu">:</span> <span class="er">String</span> <span class="er">of</span> <span class="er">file</span> <span class="er">content</span>
<span class="fu">}</span></code></pre></div>
<h4 id="service.write_file">service.write_file</h4>
<p><strong>Description</strong></p>
<pre><code>Write a service file.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"service.write_file"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"service_id"</span><span class="fu">:</span> <span class="er">service_id</span><span class="fu">,</span>
<span class="dt">"file_path"</span><span class="fu">:</span> <span class="er">file_path</span><span class="fu">,</span>
<span class="dt">"content"</span><span class="fu">:</span> <span class="er">String</span> <span class="er">of</span> <span class="er">file</span> <span class="er">content</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="er">service_brief_object</span>
<span class="fu">}</span></code></pre></div>
<h4 id="service.remove_file">service.remove_file</h4>
<p><strong>Description</strong></p>
<pre><code>Delete a service file.</code></pre>
<p><strong>Request</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="dt">"api"</span><span class="fu">:</span><span class="st">"service.remove_file"</span><span class="fu">,</span>
<span class="dt">"params"</span><span class="fu">:</span><span class="ot">[</span><span class="fu">{</span>
<span class="dt">"service_id"</span><span class="fu">:</span> <span class="er">service_id</span><span class="fu">,</span>
<span class="dt">"file_path"</span><span class="fu">:</span> <span class="er">file_path</span>
<span class="fu">}</span><span class="ot">]</span></code></pre></div>
<p><strong>Response</strong></p>
<div class="sourceCode"><pre class="sourceCode json"><code class="sourceCode json"><span class="fu">{</span>
<span class="er">service_brief_object</span>
<span class="fu">}</span></code></pre></div>
</body>
</html>