Updated on 2023-04-06 GMT+08:00

Constructing a Request

This topic describes the structure of a RESTful API request. It also uses the APIs for querying a product and creating a product as an example to describe how to call an API.

Request URI

A request URI is in the following format:

{URI-scheme} :// {Endpoint} / {resource-path} ? {query-string}

Although a request URI is included in the request header, most programming languages or frameworks require the request URI to be transmitted separately.

  • URI-scheme: Protocol used to transmit requests. All APIs use HTTPS.
  • Endpoint: Domain name or IP address of the server bearing the REST service endpoint. Obtain the value from Platform Connection Information.
  • resource-path: Access path of an API for performing a specified operation. Obtain the path from the URI of an API. For example, resource-path of the API for querying products is /v5/iot/{project_id}/products/{product_id}.
  • query-string: Query parameter, which is optional. Ensure that a question mark (?) is included before each query parameter that is in the format of "Parameter name=Parameter value". For example, ? limit=10 indicates that a maximum of 10 data records will be displayed.

For example, to obtain information about a specific product from the IoT platform in CN North-Beijing4, combine the endpoint (iotda.cn-north-4.myhuaweicloud.com) of the CN North-Beijing4 region and resource-path (/v5/iot/{project_id}/products/{product_id}) in the URI of the API for querying a product. The following is an example:

https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/products/{product_id}

To simplify the URI display in this document, each API is provided only with a resource-path and a request method. The URI-scheme of all APIs is HTTPS, and the endpoints of all APIs in the same region are identical.

Method

The HTTP protocol defines the following request methods that can be used to send a request to the server:

  • GET: requests the server to return specified resources.
  • PUT: requests the server to update specified resources.
  • POST: requests the server to add resources or perform special operations.
  • DELETE: requests the server to delete specified resources, for example, an object.
  • HEAD: same as GET except that the server must return only the response header.
  • PATCH: requests the server to update partial content of a specified resource. If the resource does not exist, a new resource will be created.

For example, in the case of the API used to create an API group (see Query a Product), the request method is GET. The request is as follows:

GET https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/products/{product_id}

Request Header

You can also add additional header fields to a request, such as the fields required by a specified URI or HTTP method. For example, to request for the authentication information, add Content-Type, which specifies the request body type.

Common request header fields are as follows:

  • Content-Type: specifies the request body type or format. This field is mandatory and its default value is application/json;charset=utf-8. Other values of this field will be provided for specific APIs if any.
  • X-Auth-Token: specifies the user token. This parameter is mandatory when token authentication is used. You can call the API used to obtain a user token to obtain the value of this parameter. In the response message header returned by the API, X-Subject-Token is the desired user token.

The API for querying a product requires authentication. Therefore, the Content-Type and X-Auth-Token fields need to be added to the header of the request for calling the API. An example of such a request is as follows:

GET https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/products/{product_id}
Content-Type: application/json
X-Auth-Token: ******

Request Body

The body of a request is often sent in a structured format as specified in the Content-Type header field. The request body transfers content except the request header. If the request body supports Chinese characters, the Chinese characters must be encoded in UTF-8 mode.

The request body varies according to APIs. Certain APIs do not require the request body, such as GET and DELETE.

For the API for creating a product, the request parameters and parameter description are available in the request. The following is an example request with the body included. Replace the italic fields in bold with the actual values. For example, name indicates the product name, device_type indicates the device type, and protocol_type indicates the protocol type used by the device.

POST https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/abab***cdcd/products
Content-Type: application/json 
X-Auth-Token: ********

{
  "name" : "Thermometer",
  "device_type" : "Thermometer",
  "protocol_type" : "MQTT",
  "data_format" : "binary",
  "manufacturer_name" : "ABC",
  "industry" : "smartCity",
  "description" : "this is a thermometer produced by Huawei",
  "service_capabilities" : [ {
    "service_type" : "temperature",
    "service_id" : "temperature",
    "description" : "temperature",
    "properties" : [ {
      "unit" : "centigrade",
      "min" : "1",
      "method" : "R",
      "max" : "100",
      "data_type" : "decimal",
      "description" : "force",
      "step" : 0.1,
      "enum_list" : [ "string" ],
      "required" : true,
      "property_name" : "temperature",
      "max_length" : 100
    } ],
    "commands" : [ {
      "command_name" : "reboot",
      "responses" : [ {
        "response_name" : "ACK",
        "paras" : [ {
          "unit" : "km/h",
          "min" : "1",
          "max" : "100",
          "para_name" : "force",
          "data_type" : "string",
          "description" : "force",
          "step" : 0.1,
          "enum_list" : [ "string" ],
          "required" : false,
          "max_length" : 100
        } ]
      } ],
      "paras" : [ {
        "unit" : "km/h",
        "min" : "1",
        "max" : "100",
        "para_name" : "force",
        "data_type" : "string",
        "description" : "force",
        "step" : 0.1,
        "enum_list" : [ "string" ],
        "required" : false,
        "max_length" : 100
      } ]
    } ],
    "option" : "Mandatory"
  } ],
  "app_id" : "jeQDJQZltU8iKgFFoW060F5SGZka"
}

If all data required for the API request is available, you can send the request to call the API through curl, Postman, or coding.