nRF Cloud REST¶
The nRF Cloud REST library enables applications to use nRF Cloud’s REST-based device API. This library is an enhancement to the nRF Cloud library.
To make a REST call, configure a nrf_cloud_rest_context
structure with your desired parameters.
auth
- Use Modem JWT to generate a JWT string. Thesec_tag
used for JWT generation must contain a credential that has been registered with nRF Cloud.
Pass the REST context structure, along with any other required parameters, to the desired function.
When the function returns, the context contains the status of the API call.
If the API call is successful, the context also contains the response data and length.
Some functions also have an optional result
parameter.
If this parameter is provided, the response data is parsed into result
.
Response is handled in the following way:
nrf_cloud_rest_pgps_data_get()
- Pass response data to the P-GPS library nRF Cloud P-GPS.nrf_cloud_rest_agps_data_get()
- Pass response data to the A-GPS library nRF Cloud A-GPS.nrf_cloud_rest_fota_job_get()
- If a FOTA job exists, FOTA download can perform the firmware download and installation. Call thenrf_cloud_rest_fota_job_update()
function to report the status of the job.
Configuration¶
Configure the CONFIG_NRF_CLOUD_REST
option to enable or disable the use of this library.
Additionally, configure the following options for the needs of your application:
API documentation¶
include/net/nrf_cloud_rest.h
subsys/net/lib/nrf_cloud/src/
-
group
nrf_cloud_rest
-
Enums
-
enum
nrf_cloud_http_status
¶ HTTP status codes returned from nRF Cloud.
Values:
-
enumerator
NRF_CLOUD_HTTP_STATUS_UNHANDLED
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_NONE
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_OK
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_ACCEPTED
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_PARTIAL
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_BAD_REQ
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_UNAUTH
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_FORBIDDEN
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_NOT_FOUND
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_BAD_RANGE
¶
-
enumerator
NRF_CLOUD_HTTP_STATUS_UNPROC_ENTITY
¶
-
enumerator
Functions
-
int
nrf_cloud_rest_cell_pos_get
(struct nrf_cloud_rest_context *const rest_ctx, struct nrf_cloud_rest_cell_pos_request const *const request, struct nrf_cloud_cell_pos_result *const result)¶ nRF Cloud location request.
- Parameters
rest_ctx – [inout] Context for communicating with nRF Cloud’s REST API.
request – [in] Data to be provided in API call.
result – [inout] Optional; parsed results of API response. If NULL, user should inspect the response buffer of nrf_cloud_rest_context.
- Returns
0 – If successful. Otherwise, a (negative) error code is returned.
-
int
nrf_cloud_rest_agps_data_get
(struct nrf_cloud_rest_context *const rest_ctx, struct nrf_cloud_rest_agps_request const *const request, struct nrf_cloud_rest_agps_result *const result)¶ nRF Cloud Assisted GPS (A-GPS) data request.
- Parameters
rest_ctx – [inout] Context for communicating with nRF Cloud’s REST API.
request – [in] Data to be provided in API call.
result – [inout] Optional; Additional buffer for A-GPS data. This is necessary when the A-GPS data from the cloud is larger than the fragment size specified by rest_ctx->fragment_size.
- Returns
0 – If successful. If result is NULL and the A-GPS data is larger than the fragment size specified by rest_ctx->fragment_size, a positive value is returned, which indicates the size (in bytes) of the necessary result buffer. Otherwise, a (negative) error code is returned.
-
int
nrf_cloud_rest_pgps_data_get
(struct nrf_cloud_rest_context *const rest_ctx, struct nrf_cloud_rest_pgps_request const *const request)¶ nRF Cloud Predicted GPS (P-GPS) data request.
- Parameters
rest_ctx – [inout] Context for communicating with nRF Cloud’s REST API. If successful, rest_ctx->result will point to the P-GPS data; which, along with rest_ctx->response_len, can be passed into nrf_cloud_pgps_process.
request – [in] Data to be provided in API call.
- Returns
0 – If successful. Otherwise, a (negative) error code is returned.
-
int
nrf_cloud_rest_fota_job_get
(struct nrf_cloud_rest_context *const rest_ctx, const char *const device_id, struct nrf_cloud_fota_job_info *const job)¶ Requests nRF Cloud FOTA job info for the specified device.
- Parameters
rest_ctx – [inout] Context for communicating with nRF Cloud’s REST API.
device_id – [in] Null-terminated, unique device ID registered with nRF Cloud.
job – [out] Optional; parsed job info. If no job exists, type will be set to invalid. If a job exists, user must call nrf_cloud_rest_fota_job_free to free the memory allocated by this function. If NULL, user should inspect the response buffer of nrf_cloud_rest_context.
- Returns
0 – If successful. Otherwise, a (negative) error code is returned.
-
void
nrf_cloud_rest_fota_job_free
(struct nrf_cloud_fota_job_info *const job)¶ Frees memory allocated by nrf_cloud_rest_fota_job_get.
- Parameters
job – [inout] Job info to be freed.
-
int
nrf_cloud_rest_fota_job_update
(struct nrf_cloud_rest_context *const rest_ctx, const char *const device_id, const char *const job_id, const enum nrf_cloud_fota_status status, const char *const details)¶ Updates the status of the specified nRF Cloud FOTA job.
- Parameters
rest_ctx – [inout] Context for communicating with nRF Cloud’s REST API.
device_id – [in] Null-terminated, unique device ID registered with nRF Cloud.
job_id – [in] Null-terminated FOTA job identifier.
status – [in] Status of the FOTA job.
details – [in] Null-terminated string containing details of the job, such as an error description.
- Returns
0 – If successful. Otherwise, a (negative) error code is returned.
-
int
nrf_cloud_rest_disconnect
(struct nrf_cloud_rest_context *const rest_ctx)¶ Closes the connection to the server.
- Parameters
rest_ctx – [inout] Context for communicating with nRF Cloud’s REST API.
- Returns
0 – If successful. Otherwise, a (negative) error code is returned.
-
int
nrf_cloud_rest_jitp
(const sec_tag_t nrf_cloud_sec_tag)¶ Performs just-in-time provisioning (JITP) with nRF Cloud.
Note
After a device has been provisioned with nRF Cloud, it must be associated with an nRF Cloud account before using any other functions in this library.
- Parameters
nrf_cloud_sec_tag – [in] Modem sec_tag containing nRF Cloud JITP credentials
- Returns
0 – If successful; wait 30s before associating device with nRF Cloud account.
1 – Device is already provisioned. Otherwise, a (negative) error code is returned.
-
struct
nrf_cloud_rest_context
¶ - #include <nrf_cloud_rest.h>
Parameters and data for using the nRF Cloud REST API.
Public Members
-
int
connect_socket
¶ Connection socket; initialize to -1 and library will make the connection.
-
bool
keep_alive
¶ If the connection should remain after API call.
Note
: A failed API call could result in the socket being closed.
-
int32_t
timeout_ms
¶ Timeout value, in milliseconds, for receiving response data. Minimum timeout value specified by NRF_CLOUD_REST_TIMEOUT_MINIMUM. For no timeout, set to NRF_CLOUD_REST_TIMEOUT_NONE.
Note
: This parameter is currently not used; set CONFIG_NRF_CLOUD_REST_RECV_TIMEOUT instead.
-
char *
auth
¶ Authentication string: JWT JWT generation. The nRF Cloud device ID must be included in the sub claim. If the device ID is the device’s internal UUID, the sub claim can be omitted for modem generated JWTs; the UUID is included in the iss claim.
-
char *
rx_buf
¶ User allocated buffer for receiving API response, which includes the HTTPS headers, any response data and a terminating NULL. Buffer size should be limited according to the maximum TLS receive size of the modem.
-
size_t
rx_buf_len
¶ Size of rx_buf
-
size_t
fragment_size
¶ Fragment size for downloads, set to zero to use CONFIG_NRF_CLOUD_REST_FRAGMENT_SIZE. The rx_buf must be able to hold the HTTPS headers plus this fragment size.
-
enum nrf_cloud_http_status
status
¶ Results from API call HTTP status of API call
-
char *
response
¶ Start of response content data in rx_buf
-
size_t
response_len
¶ Length of response content data
-
size_t
total_response_len
¶ Length of HTTPS headers + response content data
-
int
-
struct
nrf_cloud_rest_cell_pos_request
¶ - #include <nrf_cloud_rest.h>
Data required for nRF Cloud cellular positioning request.
Public Members
-
struct lte_lc_cells_info *
net_info
¶ Network information used in request
-
struct lte_lc_cells_info *
-
struct
nrf_cloud_rest_agps_request
¶ - #include <nrf_cloud_rest.h>
Data required for nRF Cloud Assisted GPS (A-GPS) request.
Public Members
-
struct gps_agps_request *
agps_req
¶ Required for custom request type
-
struct lte_lc_cells_info *
net_info
¶ Optional; provide network info or set to NULL. The cloud cannot provide location assistance data if network info is NULL.
-
struct gps_agps_request *
-
struct
nrf_cloud_rest_agps_result
¶ - #include <nrf_cloud_rest.h>
nRF Cloud Assisted GPS (A-GPS) result
-
struct
nrf_cloud_rest_pgps_request
¶ - #include <nrf_cloud_rest.h>
Data required for nRF Cloud Predicted GPS (P-GPS) request.
Public Members
-
const struct gps_pgps_request *
pgps_req
¶ Data to be included in the P-GPS request. To omit an item use the appropriate define in Omit item from P-GPS request.
-
const struct gps_pgps_request *
-
enum