REST client
The REST client library provides means for performing REST requests.
Overview
This library creates a socket with TLS when requested.
It uses Zephyr’s HTTP client library to send HTTP requests and receive HTTP responses.
When using this library, the rest_client_req_context
structure is populated and
passed to the rest_client_request()
function together with the rest_client_resp_context
structure,
which will contain the response data.
Configuration
To use the REST client library, enable the CONFIG_REST_CLIENT
Kconfig option.
You can configure the following options to adjust the behavior of the library:
CONFIG_REST_CLIENT_SCKT_SEND_TIMEOUT
CONFIG_REST_CLIENT_SCKT_RECV_TIMEOUT
Limitations
Executing REST request is a blocking operation. The calling thread is blocked until the request has completed.
REST client only works in the default PDP context.
REST client do not allow selection of IPV4 or IPV6 but it works on what DNS returns for name query.
API documentation
include/net/rest_client.h
subsys/net/lib/rest_client
- group rest_client
REST client.
Provide REST client functionality.
Defines
-
REST_CLIENT_SEC_TAG_NO_SEC
TLS is not used.
-
REST_CLIENT_TLS_DEFAULT_PEER_VERIFY
Use the default TLS peer verification; TLS_PEER_VERIFY_REQUIRED.
-
REST_CLIENT_SCKT_CONNECT
REST client opens a socket connection.
Enums
-
enum rest_client_http_status
Common HTTP status codes.
Values:
-
enumerator REST_CLIENT_HTTP_STATUS_OK
HTTP status: OK.
-
enumerator REST_CLIENT_HTTP_STATUS_BAD_REQ
HTTP status: Bad request.
-
enumerator REST_CLIENT_HTTP_STATUS_UNAUTH
HTTP status: Unauthorized.
-
enumerator REST_CLIENT_HTTP_STATUS_FORBIDDEN
HTTP status: Forbidden.
-
enumerator REST_CLIENT_HTTP_STATUS_NOT_FOUND
HTTP status: Not found.
-
enumerator REST_CLIENT_HTTP_STATUS_OK
Functions
-
int rest_client_request(struct rest_client_req_context *req_ctx, struct rest_client_resp_context *resp_ctx)
REST client request.
This function will block the calling thread until the request completes.
- Parameters:
req_ctx – [in] Request context containing input parameters to REST request
resp_ctx – [out] Response context for returning the response data.
- Return values:
0, if – the REST response was received successfully. If response_len > 0, there is also body/content data in a response. http_status_code contains the actual HTTP status code. Otherwise, a (negative) error code is returned.
-
void rest_client_request_defaults_set(struct rest_client_req_context *req_ctx)
Sets the default values into a given request context.
Intended to be used before calling rest_client_request().
- Parameters:
req_ctx – [inout] Request context for communicating with REST client API.
-
struct rest_client_req_context
- #include <rest_client.h>
REST client request context.
Input parameters for using the REST client API should be filled into this structure before calling rest_client_request.
Public Members
-
int connect_socket
Socket identifier for the connection. When using the default value, the library will open a new socket connection. Default: REST_CLIENT_SCKT_CONNECT.
-
bool keep_alive
Defines whether the connection should remain after API call. Default: false.
-
int sec_tag
Security tag. Default: REST_CLIENT_SEC_TAG_NO_SEC.
-
int tls_peer_verify
Indicates the preference for peer verification. Default: REST_CLIENT_TLS_DEFAULT_PEER_VERIFY.
-
enum http_method http_method
Used HTTP method. Default: HTTP_GET.
-
const char *host
Hostname or IP address to be used in the request.
-
uint16_t port
Port number to be used in the request.
-
const char *url
The URL for this request, for example: /index.html
-
const char **header_fields
The HTTP header fields. Similar to the Zephyr HTTP client. This is a NULL-terminated list of header fields. May be NULL.
-
const char *body
Payload/body, may be NULL.
-
size_t body_len
Payload/body length
-
int32_t timeout_ms
User-defined timeout value for REST request. The timeout is set individually for socket connection creation and data transfer meaning REST request can take longer than this given timeout. To disable, set the timeout duration to SYS_FOREVER_MS. A value of zero will result in an immediate timeout. Default:
CONFIG_REST_CLIENT_REST_REQUEST_TIMEOUT
.
-
char *resp_buff
User-allocated buffer for receiving API response.
-
size_t resp_buff_len
User-defined size of resp_buff.
-
int connect_socket
-
struct rest_client_resp_context
- #include <rest_client.h>
REST client response context.
When rest_client_request returns, response-related data can be read from this structure.
Public Members
-
size_t total_response_len
Length of HTTP headers + response body/content data.
-
size_t response_len
Length of response body/content data.
-
char *response
Start of response data (the body/content) in resp_buff.
-
uint16_t http_status_code
Numeric HTTP status code.
-
char http_status_code_str[HTTP_STATUS_STR_SIZE]
HTTP status code as a textual description, i.e. the reason-phrase element. https://tools.ietf.org/html/rfc7230#section-3.1.2 Copied here from http_status[] of http_response.
-
int used_socket_id
Used socket identifier. Use this for keepalive connections as connect_socket for upcoming requests.
-
int used_socket_is_alive
True if used_socket_id was kept alive and was not closed after the REST request.
-
size_t total_response_len
-
REST_CLIENT_SEC_TAG_NO_SEC