Web Transactions
If your host needs to perform web requests with a 3rd party API or service,
the Notecard can facilitate these requests with the web.get
, web.put
,
web.post
, and web.delete
APIs. See complete details in the
web Requests API reference.
Use of these requests in the Notecard API requires the following:
1) The Notecard must be in continuous
mode and connected to Notehub.
For example:
If any of the web.*
requests are issued to a Notecard not in continuous
mode or not connected, an error will be returned:
{ "err": "web operations require being online (hub.set)" }
2) The endpoint to the 3rd party API or service must be configured as a proxy Route in Notehub as a "Proxy for Device Web Requests" type.
This allows the host to avoid hardcoded URLs, keys, and certificates, while relying on Notehub secure authentication mechanisms for performing requests.
Once the device is in continuous
mode and the proxy Route is created,
use web.get
, web.put
, web.post
, or web.delete
in accordance with the
requirements of the final endpoint.
For example, the Route shown above creates a proxy to a GET
request to the
weather
endpoint of the OpenWeatherMap API.
The route
argument corresponds to the Route Alias specified when the proxy
Route is created.
For all web requests, the Notecard returns the HTTP Status Code in the result
field. If the response also contains a body, that body is provided in the
body
field.
The Notecard can only accept valid JSON in response to a GET, POST, or PUT
request unless you override the default content
argument of
application/json
with the appropriate MIME type.
{
"result": 200,
"body": {
"base": "stations",
"clouds": {
"all": 75
},
"coord": {
"lat": 42.5776,
"lon": -70.87134
},
"name": "Beverly",
"weather": [
{
"description": "broken clouds",
"icon": "04d",
"id": 803,
"main": "Clouds"
}
],
"wind": {
"deg": 240,
"speed": 5.1
}
}
}
Data returned by a proxy Route is delivered to the Notecard unmodified. To preserve power and data, make sure the APIs you're working with return only the data needed by your host, if possible.
For web.put
and web.post
requests, a JSON body OR base64-encoded payload can
be provided using the body
or payload
arguments. Unlike the note.add
API,
you cannot use both at the same time in a single web transaction.
After performing a web request, don't forget to set your Notecard back into
a non-continuous mode, if needed, using hub.set
.
Sending Large Payloads to Notehub
If your application needs to send large payloads to Notehub, as of
Notecard firmware v3.2.1, web.post
and
web.put
support sending payload fragments and can assemble these fragments
before routing to your cloud application.
To utilize this feature, your host will need to disassemble the payload into
fragments, and send these in successive web.post
requests. Your request must
use arguments that Notehub uses to verify each fragment and understand where
the individual fragments should be placed in the reassembled payload. Those
fields are:
total
- The total size of the entire payload, in bytes, across all fragments.offset
- For a given fragment, the number of bytes to offset from 0 when reassembling fragments in Notehub.status
- A 32-character hex-encoded MD5 sum of the payload or payload fragment. Used by Notehub to perform verification upon receipt.verify
- Can optionally be set totrue
to request verification from Notehub once the payload or payload fragment is received. Automatically set totrue
whenstatus
is supplied.
Once the payload is received, it will be verified on Notehub and the verification result will be returned in the response from the Notecard.
Inbound Requests & Shared DataLow Power Design