blob: 44063792bc68defc6c0e333ec892204ea20fbc58 [file] [log] [blame]
<!DOCTYPE html>
<html lang="1.2" class="js csstransforms3d">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Hugo 0.81.0" />
<meta name="description" content="A set of micro-services for connecting millions of devices.">
<meta name="author" content="The Eclipse Hono Project">
<link rel="apple-touch-icon" sizes="180x180" href="/hono/docs/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="48x48" href="/hono/docs/favicon/favicon-48x48.png">
<link rel="icon" type="image/png" sizes="32x32" href="/hono/docs/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/hono/docs/favicon/favicon-16x16.png">
<link rel="manifest" href="/hono/docs/favicon/site.webmanifest">
<link rel="mask-icon" href="/hono/docs/favicon/safari-pinned-tab.svg" color="#5bbad5">
<link rel="shortcut icon" href="/hono/docs/favicon/favicon.ico">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-config" content="/hono/docs/favicon/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<title>Implement a Custom Hono HTTP Protocol Adapter :: Eclipse Hono&trade; Vers.: 1.2</title>
<link href="/hono/docs/css/nucleus.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/fontawesome-all.min.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/hybrid.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/featherlight.min.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/perfect-scrollbar.min.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/auto-complete.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/atom-one-dark-reasonable.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/theme.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/hugo-theme.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/theme-hono.css?1626138731" rel="stylesheet">
<link href="/hono/docs/css/hono.css?1626138731" rel="stylesheet">
<script src="/hono/docs/js/jquery-3.3.1.min.js?1626138731"></script>
<style>
:root #header + #content > #left > #rlblock_left{
display:none !important;
}
:not(pre) > code + span.copy-to-clipboard {
display: none;
}
</style>
<link rel="stylesheet" href="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@EclipseHono">
<meta name="twitter:title" content="Implement a Custom Hono HTTP Protocol Adapter :: Eclipse Hono&amp;trade; Vers.: 1.2">
<meta name="twitter:image" content="https://www.eclipse.org/hono/docs/images/twitter_image.png">
<meta name="twitter:description" content="A set of micro-services for connecting millions of devices.">
<meta property="og:title" content="Implement a Custom Hono HTTP Protocol Adapter :: Eclipse Hono&amp;trade; Vers.: 1.2" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.eclipse.org/hono/docs/1.2/dev-guide/custom_http_adapter//" />
<meta property="og:image" content="https://www.eclipse.org/hono/docs/images/twitter_image.png" />
</head>
<body class="" data-url="/hono/docs/1.2/dev-guide/custom_http_adapter/">
<nav id="sidebar" class="">
<div id="header-wrapper">
<div id="header">
<a href="https://www.eclipse.org/hono/">
<img src="/hono/docs/images/HONO-Logo_Bild-Wort_quer-w-310x120px.svg" alt="Hono logo" class="logo-img">
</a>
</div>
<div class="searchbox">
<label for="search-by"><i class="fas fa-search"></i></label>
<input data-search-input id="search-by" type="search" placeholder="Search...">
<span data-search-clear=""><i class="fas fa-times"></i></span>
</div>
<script type="text/javascript" src="/hono/docs/js/lunr.min.js?1626138731"></script>
<script type="text/javascript" src="/hono/docs/js/auto-complete.js?1626138731"></script>
<script type="text/javascript">
var baseurl = "https:\/\/www.eclipse.org\/hono\/docs\/\/1.2";
</script>
<script type="text/javascript" src="/hono/docs/js/search.js?1626138731"></script>
</div>
<div class="highlightable">
<ul class="topics">
<li data-nav-id="/hono/docs/1.2/concepts/" title="Concepts" class="dd-item
">
<a href="/hono/docs/1.2/concepts/">
<i class="far fa-lightbulb"></i> Concepts
</a>
<ul>
<li data-nav-id="/hono/docs/1.2/concepts/device-identity/" title="Device Identity" class="dd-item ">
<a href="/hono/docs/1.2/concepts/device-identity/">
Device Identity
</a>
</li>
<li data-nav-id="/hono/docs/1.2/concepts/tenancy/" title="Multi-Tenancy" class="dd-item ">
<a href="/hono/docs/1.2/concepts/tenancy/">
Multi-Tenancy
</a>
</li>
<li data-nav-id="/hono/docs/1.2/concepts/device-provisioning/" title="Device Provisioning" class="dd-item ">
<a href="/hono/docs/1.2/concepts/device-provisioning/">
Device Provisioning
</a>
</li>
<li data-nav-id="/hono/docs/1.2/concepts/connecting-devices/" title="Connecting Devices" class="dd-item ">
<a href="/hono/docs/1.2/concepts/connecting-devices/">
Connecting Devices
</a>
</li>
<li data-nav-id="/hono/docs/1.2/concepts/device-notifications/" title="Device Notifications" class="dd-item ">
<a href="/hono/docs/1.2/concepts/device-notifications/">
Device Notifications
</a>
</li>
<li data-nav-id="/hono/docs/1.2/concepts/command-and-control/" title="Command &amp; Control" class="dd-item ">
<a href="/hono/docs/1.2/concepts/command-and-control/">
Command &amp; Control
</a>
</li>
<li data-nav-id="/hono/docs/1.2/concepts/resource-limits/" title="Resource limits" class="dd-item ">
<a href="/hono/docs/1.2/concepts/resource-limits/">
Resource limits
</a>
</li>
<li data-nav-id="/hono/docs/1.2/concepts/connection-events/" title="Connection Events" class="dd-item ">
<a href="/hono/docs/1.2/concepts/connection-events/">
Connection Events
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.2/user-guide/" title="User Guide" class="dd-item
">
<a href="/hono/docs/1.2/user-guide/">
<i class="fas fa-book-reader"></i> User Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.2/user-guide/device-registry/" title="Device Registry" class="dd-item ">
<a href="/hono/docs/1.2/user-guide/device-registry/">
Device Registry
</a>
</li>
<li data-nav-id="/hono/docs/1.2/user-guide/http-adapter/" title="HTTP Adapter" class="dd-item ">
<a href="/hono/docs/1.2/user-guide/http-adapter/">
HTTP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.2/user-guide/mqtt-adapter/" title="MQTT Adapter" class="dd-item ">
<a href="/hono/docs/1.2/user-guide/mqtt-adapter/">
MQTT Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.2/user-guide/amqp-adapter/" title="AMQP Adapter" class="dd-item ">
<a href="/hono/docs/1.2/user-guide/amqp-adapter/">
AMQP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.2/user-guide/coap-adapter/" title="CoAP Adapter" class="dd-item ">
<a href="/hono/docs/1.2/user-guide/coap-adapter/">
CoAP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.2/user-guide/kura-adapter/" title="Kura Adapter" class="dd-item ">
<a href="/hono/docs/1.2/user-guide/kura-adapter/">
Kura Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.2/user-guide/sigfox-adapter/" title="Sigfox Adapter" class="dd-item ">
<a href="/hono/docs/1.2/user-guide/sigfox-adapter/">
Sigfox Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.2/user-guide/jmeter_load_tests/" title="Load Tests with JMeter" class="dd-item ">
<a href="/hono/docs/1.2/user-guide/jmeter_load_tests/">
Load Tests with JMeter
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/" title="Admin Guide" class="dd-item
">
<a href="/hono/docs/1.2/admin-guide/">
<i class="fas fa-sliders-h"></i> Admin Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.2/admin-guide/common-config/" title="Common Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/common-config/">
Common Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/auth-server-config/" title="Auth Server Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/auth-server-config/">
Auth Server Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/device-registry-config/" title="Device Registry Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/device-registry-config/">
Device Registry Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/device-connection-config/" title="Configuring the Device Connection Service" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/device-connection-config/">
Device Connection Service Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/http-adapter-config/" title="HTTP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/http-adapter-config/">
HTTP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/amqp-adapter-config/" title="AMQP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/amqp-adapter-config/">
AMQP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/mqtt-adapter-config/" title="MQTT Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/mqtt-adapter-config/">
MQTT Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/kura-adapter-config/" title="Kura Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/kura-adapter-config/">
Kura Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/hono-client-configuration/" title="Hono Client Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/hono-client-configuration/">
Hono Client Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/amqp-network-config/" title="AMQP 1.0 Messaging Network Configuration" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/amqp-network-config/">
AMQP 1.0 Messaging Network Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/secure_communication/" title="Secure Communication" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/secure_communication/">
Secure Communication
</a>
</li>
<li data-nav-id="/hono/docs/1.2/admin-guide/monitoring-tracing-config/" title="Monitoring &amp; Tracing" class="dd-item ">
<a href="/hono/docs/1.2/admin-guide/monitoring-tracing-config/">
Monitoring &amp; Tracing
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.2/dev-guide/" title="Developer Guide" class="dd-item
parent
">
<a href="/hono/docs/1.2/dev-guide/">
<i class="fas fa-tools"></i> Developer Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.2/dev-guide/building_hono/" title="Building from Source" class="dd-item ">
<a href="/hono/docs/1.2/dev-guide/building_hono/">
Building from Source
</a>
</li>
<li data-nav-id="/hono/docs/1.2/dev-guide/amqp_adapter_client/" title="AMQP Adapter Client for Java" class="dd-item ">
<a href="/hono/docs/1.2/dev-guide/amqp_adapter_client/">
AMQP Adapter Client for Java
</a>
</li>
<li data-nav-id="/hono/docs/1.2/dev-guide/java_client_consumer/" title="Consuming Messages from Java" class="dd-item ">
<a href="/hono/docs/1.2/dev-guide/java_client_consumer/">
Consuming Messages from Java
</a>
</li>
<li data-nav-id="/hono/docs/1.2/dev-guide/custom_http_adapter/" title="Implement a Custom Hono HTTP Protocol Adapter" class="dd-item active">
<a href="/hono/docs/1.2/dev-guide/custom_http_adapter/">
Implement a Custom Hono HTTP Protocol Adapter
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.2/api/" title="API" class="dd-item
">
<a href="/hono/docs/1.2/api/">
&nbsp;<i class='fas fa-plug'></i>&nbsp;API
</a>
<ul>
<li data-nav-id="/hono/docs/1.2/api/telemetry/" title="Telemetry API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/telemetry/">
Telemetry API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/event/" title="Event API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/event/">
Event API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/command-and-control/" title="Command &amp; Control API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/command-and-control/">
Command &amp; Control API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/tenant/" title="Tenant API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/tenant/">
Tenant API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/device-connection/" title="Device Connection API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/device-connection/">
Device Connection API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/device-registration/" title="Device Registration API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/device-registration/">
Device Registration API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/credentials/" title="Credentials API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/credentials/">
Credentials API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/authentication/" title="Authentication API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/authentication/">
Authentication API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/management/" title="Device Registry Management API Specification" class="dd-item ">
<a href="/hono/docs/1.2/api/management/">
Device Registry Management API
</a>
</li>
<li data-nav-id="/hono/docs/1.2/api/metrics/" title="Metrics" class="dd-item ">
<a href="/hono/docs/1.2/api/metrics/">
Metrics
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.2/deployment/" title="Deployment" class="dd-item
">
<a href="/hono/docs/1.2/deployment/">
<i class="fas fa-shipping-fast"></i> Deployment
</a>
<ul>
<li data-nav-id="/hono/docs/1.2/deployment/helm-based-deployment/" title="Helm based Deployment" class="dd-item ">
<a href="/hono/docs/1.2/deployment/helm-based-deployment/">
Helm based Deployment
</a>
</li>
<li data-nav-id="/hono/docs/1.2/deployment/openshift/" title="OpenShift / OKD" class="dd-item ">
<a href="/hono/docs/1.2/deployment/openshift/">
OpenShift / OKD
</a>
</li>
<li data-nav-id="/hono/docs/1.2/deployment/create-kubernetes-cluster/" title="Setting up a Kubernetes Cluster" class="dd-item ">
<a href="/hono/docs/1.2/deployment/create-kubernetes-cluster/">
Setting up a Kubernetes Cluster
</a>
</li>
<li data-nav-id="/hono/docs/1.2/deployment/resource-limitation/" title="Limiting Resource Usage" class="dd-item ">
<a href="/hono/docs/1.2/deployment/resource-limitation/">
Limiting Resource Usage
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.2/architecture/" title="Architecture" class="dd-item
">
<a href="/hono/docs/1.2/architecture/">
<i class="fas fa-landmark"></i> Architecture
</a>
<ul>
<li data-nav-id="/hono/docs/1.2/architecture/component-view/" title="Component View" class="dd-item ">
<a href="/hono/docs/1.2/architecture/component-view/">
Component View
</a>
</li>
<li data-nav-id="/hono/docs/1.2/architecture/auth/" title="Authentication/Authorization" class="dd-item ">
<a href="/hono/docs/1.2/architecture/auth/">
Authentication/Authorization
</a>
</li>
</ul>
</li>
</ul>
<section id="shortcuts">
<h3></h3>
<ul>
<li>
<a class="padding" href="https://www.eclipse.org/hono/" title="Hono&#39;s Homepage"><i class='fas fa-home'></i> Hono Home</a>
</li>
<li>
<a class="padding" href="https://www.eclipse.org/hono/getting-started/" title="Getting started with Eclipse Hono"><i class='fas fa-plane-departure'></i> Getting Started</a>
</li>
</ul>
</section>
<section id="prefooter">
<hr/>
<ul>
<li>
<div id="select-box-wrapper">
<div id="select-box">
<a class="padding">
Version:&nbsp;
<div class="select-style">
<select id="select-language" onchange="location = this.value;">
<option id="stable" value="https://www.eclipse.org/hono/docs/dev-guide/custom_http_adapter/">stable (1.8)</option>
<option id="1.8" value="https://www.eclipse.org/hono/docs/1.8/dev-guide/custom_http_adapter/">1.8</option>
<option id="1.7" value="https://www.eclipse.org/hono/docs/1.7/dev-guide/custom_http_adapter/">1.7</option>
<option id="1.6" value="https://www.eclipse.org/hono/docs/1.6/dev-guide/custom_http_adapter/">1.6</option>
<option id="1.5" value="https://www.eclipse.org/hono/docs/1.5/dev-guide/custom_http_adapter/">1.5</option>
<option id="1.4" value="https://www.eclipse.org/hono/docs/1.4/dev-guide/custom_http_adapter/">1.4</option>
<option id="1.3" value="https://www.eclipse.org/hono/docs/1.3/dev-guide/custom_http_adapter/">1.3</option>
<option id="1.2" value="https://www.eclipse.org/hono/docs/1.2/dev-guide/custom_http_adapter/" selected>1.2</option>
<option id="1.1" value="https://www.eclipse.org/hono/docs/1.1/dev-guide/custom_http_adapter/">1.1</option>
<option id="1.0" value="https://www.eclipse.org/hono/docs/1.0/dev-guide/custom_http_adapter/">1.0</option>
<option id="dev" value="https://www.eclipse.org/hono/docs/dev/dev-guide/custom_http_adapter/">dev</option>
</select>
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="255px" height="255px" viewBox="0 0 255 255" style="enable-background:new 0 0 255 255;" xml:space="preserve">
<g>
<g id="arrow-drop-down">
<polygon points="0,63.75 127.5,191.25 255,63.75 " />
</g>
</g>
</svg>
</div>
</a>
</div>
</div>
</li>
</ul>
</section>
<section id="footer">
<p>&copy; 2021 <a href="https://www.eclipse.org/hono/">The Eclipse Hono Project</a></p>
<p>
Documentation built with
<a href="https://gohugo.io/" target="_blank">Hugo</a>
using the
<a href="https://github.com/matcornic/hugo-theme-learn" target="_blank">Learn</a> theme.
</p>
<div class="eclipse-logo">
<a href="https://www.eclipse.org" target="_blank">
<img src="https://www.eclipse.org/hono/docs/images/eclipse_foundation_logo.svg"/>
</a>
</div>
</section>
</div>
</nav>
<section id="body">
<div id="overlay"></div>
<div class="old-version-hint">
<p>This page refers to version <em>1.2</em>.
You might want to use the <a href="https://www.eclipse.org/hono/docs/">current stable</a> version.
</p>
</div>
<div class="padding highlightable">
<div>
<div id="top-bar">
<div id="top-github-link">
<a class="github-link" title='Edit this page' href="https://github.com/eclipse/hono/edit/master/site/documentation/content/dev-guide/custom_http_adapter.md" target="blank">
<i class="fas fa-code-branch"></i>
<span id="top-github-link-text">Edit this page</span>
</a>
</div>
<div id="breadcrumbs" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<span id="sidebar-toggle-span">
<a href="#" id="sidebar-toggle" data-sidebar-toggle="">
<i class="fas fa-bars"></i>
</a>
</span>
<span id="toc-menu"><i class="fas fa-list-alt"></i></span>
<span class="links">
<a href='/hono/docs/1.2/'>Documentation</a> > <a href='/hono/docs/1.2/dev-guide/'>Developer Guide</a> > Implement a Custom Hono HTTP Protocol Adapter
</span>
</div>
<div class="progress">
<div class="wrapper">
<nav id="TableOfContents">
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#the-standard-http-adapter">The standard HTTP Adapter</a></li>
<li><a href="#anatomy-of-the-standard-http-adapter">Anatomy of the standard HTTP Adapter</a></li>
<li><a href="#derive-a-custom-http-protocol-adapter">Derive a custom HTTP Protocol Adapter</a>
<ul>
<li><a href="#adding-routes">Adding Routes</a></li>
</ul>
</li>
<li><a href="#build-and-run-the-custom-http-protocol-adapter">Build and run the custom HTTP Protocol Adapter</a></li>
<li><a href="#using-the-custom-http-protocol-adapter">Using the custom HTTP Protocol Adapter</a></li>
<li><a href="#further-extend-the-custom-http-protocol-adapter">Further extend the custom HTTP Protocol Adapter</a></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="head-tags">
</div>
<div id="body-inner">
<h1>
Implement a Custom Hono HTTP Protocol Adapter
</h1>
<p>Eclipse Honoâ„¢ comes with a default <em>HTTP Adapter</em> which can be used to interact with devices via HTTP.
The default HTTP Adapter also serves as a blueprint for implementing a <em>custom</em> HTTP protocol adapter.</p>
<p>This section will guide you through the steps to build your own custom HTTP protocol adapter.</p>
<h2 id="prerequisites">Prerequisites</h2>
<p>You should be familiar with the setup and start of Hono. Refer to the
<a href="https://www.eclipse.org/hono/getting-started/">Getting Started</a> guide.</p>
<h2 id="the-standard-http-adapter">The standard HTTP Adapter</h2>
<p>Hono&rsquo;s HTTP Adapter supports telemetry and event data processing. Please refer to the <a href="/hono/docs/1.2/user-guide/http-adapter/">HTTP Adapter User Guide</a> and <a href="/hono/docs/1.2/admin-guide/http-adapter-config/">HTTP Adapter Admin Guide</a> for details regarding the usage and configuration of the HTTP Adapter.</p>
<p>You can find the source of the HTTP Adapter at <a href="https://github.com/eclipse/hono/tree/master/adapters/http-vertx">https://github.com/eclipse/hono/tree/master/adapters/http-vertx</a>.</p>
<h2 id="anatomy-of-the-standard-http-adapter">Anatomy of the standard HTTP Adapter</h2>
<p>Like many other Hono components, the HTTP Adapter is built on top of the <a href="https://vertx.io">Vert.x</a> framework.</p>
<p>The HTTP Adapter&rsquo;s <code>VertxBasedHttpProtocolAdapter</code> class is derived from an abstract base class. This base class implements the standard functionality for component initialization, receiving HTTP requests from devices or external clients, and forwarding of data to the downstream <em>AMQP Messaging Network</em>.</p>
<h2 id="derive-a-custom-http-protocol-adapter">Derive a custom HTTP Protocol Adapter</h2>
<p>Use the standard HTTP Adapter as a blueprint.</p>
<h3 id="adding-routes">Adding Routes</h3>
<p>In Vert.x, a <em>route</em> is a mapping of an HTTP request to a <em>handler</em>. Inside a route, Vert.x provides a <code>RoutingContext</code>
instance which gives access to the HTTP request (and response) object containing the HTTP headers.</p>
<p>The standard HTTP Adapter overrides the abstract method <code>addRoutes()</code>, provided by the base class, and adds routes for processing telemetry data and events.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java"><span style="color:#75715e">// route for uploading telemetry data
</span><span style="color:#75715e"></span>router<span style="color:#f92672">.</span><span style="color:#a6e22e">route</span><span style="color:#f92672">(</span>HttpMethod<span style="color:#f92672">.</span><span style="color:#a6e22e">PUT</span><span style="color:#f92672">,</span> String<span style="color:#f92672">.</span><span style="color:#a6e22e">format</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;/telemetry/:%s/:%s&#34;</span><span style="color:#f92672">,</span> PARAM_TENANT<span style="color:#f92672">,</span> PARAM_DEVICE_ID<span style="color:#f92672">))</span>
<span style="color:#f92672">.</span><span style="color:#a6e22e">handler</span><span style="color:#f92672">(</span>ctx <span style="color:#f92672">-&gt;</span> uploadTelemetryMessage<span style="color:#f92672">(</span>ctx<span style="color:#f92672">,</span> getTenantParam<span style="color:#f92672">(</span>ctx<span style="color:#f92672">),</span> getDeviceIdParam<span style="color:#f92672">(</span>ctx<span style="color:#f92672">)));</span>
</code></pre></div><p>The route for telemetry data parses the HTTP request, extracts the <em>tenant</em> and <em>deviceId</em> parameters from the
request URL path, and forwards the message payload to the method <code>uploadTelemetryMessage()</code>, provided by the base class.</p>
<p><strong>NB</strong> Note the Vert.x place holder indicators <code>:</code> inside the URL path pattern <code>/telemetry/:%s/:%s</code>. Vert.x makes matching
place holders available as request parameters. See <a href="http://vertx.io/docs/vertx-web/java/#_capturing_path_parameters">Capturing path parameters</a> in the Vert.x documentation.</p>
<p>The route for events looks very similar to the route for telemetry data. It forwards the event message payload to the <code>uploadEventMessage()</code> method.</p>
<p>Please refer to the <a href="/hono/docs/1.2/api/telemetry/">Telemetry API</a> and <a href="/hono/docs/1.2/api/event/">Event API</a>
for details about the different Hono APIs.</p>
<p>In the custom HTTP protocol adapter adapt the routes according to your needs.</p>
<h2 id="build-and-run-the-custom-http-protocol-adapter">Build and run the custom HTTP Protocol Adapter</h2>
<p>If you have Hono running, you can launch your custom HTTP protocol adapter as a Docker Container or a Spring Boot application.</p>
<p>You may adopt the Maven profile <code>build-docker-image</code> from the Maven POM file of the standard HTTP Adapter into your
custom adapter&rsquo;s Maven POM file.</p>
<p>Follow the guidelines for running the HTTP Adapter in <a href="/hono/docs/1.2/admin-guide/http-adapter-config/">HTTP Adapter</a>. Don&rsquo;t forget to configure the custom protocol adapter to bind to a different port than the standard HTTP Adapter if you intend to run them both at the same time. See the <a href="/hono/docs/1.2/admin-guide/http-adapter-config/">Port Configuration section</a> of the HTTP Adapter documentation for details.</p>
<h2 id="using-the-custom-http-protocol-adapter">Using the custom HTTP Protocol Adapter</h2>
<p>Now that you have your custom HTTP protocol adapter up and running, you can use any HTTP client, like <code>curl</code> or
<code>HTTPie</code>, to publish data to your custom adapter.</p>
<p>Note that before publishing data to your custom HTTP protocol adapter, you need to start a <em>consumer</em> for the tenant you intend to publish data for.
Otherwise you will not be able to successfully send data. For this purpose, you may use the example consumer as described in the <a href="https://www.eclipse.org/hono/getting-started/">Getting Started</a> guide.</p>
<h2 id="further-extend-the-custom-http-protocol-adapter">Further extend the custom HTTP Protocol Adapter</h2>
<p>The abstract base class includes additional hooks which you may use to <em>plug into</em> the adapter&rsquo;s life cycle:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Hook</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>preStartup()</code></td>
<td style="text-align:left">called before start of adapter&rsquo;s HTTP server</td>
</tr>
<tr>
<td style="text-align:left"><code>onStartupSuccess()</code></td>
<td style="text-align:left">called after successful start of adapter</td>
</tr>
<tr>
<td style="text-align:left"><code>preShutdown()</code></td>
<td style="text-align:left">called before stop of adapter&rsquo;s HTTP server</td>
</tr>
<tr>
<td style="text-align:left"><code>postShutdown</code></td>
<td style="text-align:left">called after successful stop of adapter</td>
</tr>
</tbody>
</table>
<footer class="footline">
</footer>
</div>
</div>
<div id="navigation">
</div>
</section>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
<div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
</div>
<script src="/hono/docs/js/clipboard.min.js?1626138732"></script>
<script src="/hono/docs/js/perfect-scrollbar.min.js?1626138732"></script>
<script src="/hono/docs/js/perfect-scrollbar.jquery.min.js?1626138732"></script>
<script src="/hono/docs/js/jquery.sticky.js?1626138732"></script>
<script src="/hono/docs/js/featherlight.min.js?1626138732"></script>
<script src="/hono/docs/js/highlight.pack.js?1626138732"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="/hono/docs/js/modernizr.custom-3.6.0.js?1626138732"></script>
<script src="/hono/docs/js/learn.js?1626138732"></script>
<script src="/hono/docs/js/hugo-learn.js?1626138732"></script>
<link href="/hono/docs/mermaid/mermaid.css?1626138732" rel="stylesheet" />
<script src="/hono/docs/mermaid/mermaid.js?1626138732"></script>
<script>
mermaid.initialize({ startOnLoad: true });
</script>
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5WLCZXC');
</script>
<script src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script>
</body>
</html>