blob: d4224bc35e5e481ef219e942475e5e0e31bdfa49 [file] [log] [blame] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# RestAPI V1
IoTDB's RESTful service can be used for querying, writing, and management operations. It uses the OpenAPI standard to define interfaces and generate frameworks.
## 1. Enabling RESTful Service
The RESTful service is disabled by default. To enable it, locate the `conf/iotdb-system.properties` file in the IoTDB installation directory, set `enable_rest_service` to `true`, and then restart the datanode process.
```Properties
enable_rest_service=true
```
## 2. Authentication
Except for the health check endpoint `/ping`, the RESTful service uses basic authentication. Each URL request must include the header `'Authorization':'Basic' + base64.encode(username + ':' + password)`.
In the example, the username is `root` and the password is `root`. The corresponding Basic authentication header format is:
```Properties
Authorization : Basic cm9vdDpyb290
```
- If the username or password authentication fails, the following information is returned:
- HTTP status code: 801
- Response body:
```JSON
{"code":801,"message":"WRONG_LOGIN_PASSWORD"}
```
- If the `Authorization` header is not set, the following information is returned:
- HTTP status code: 800
- Response body:
```JSON
{"code":800,"message":"INIT_AUTH_ERROR"}
```
## 3. Interface Definitions
### 3.1 Ping
The `/ping` endpoint can be used for online service health checks.
- Request Method: GET
- Request Path: `http://ip:port/ping`
- Example Request:
```Bash
curl http://127.0.0.1:18080/ping
```
- HTTP Status Codes:
- `200`: The service is working normally and can accept external requests.
- `503`: The service is experiencing issues and cannot accept external requests.
| Parameter Name | Type | Description |
| :------------- | :------ | :--------------- |
| code | integer | Status Code |
| message | string | Code Information |
- Response Example:
- When the HTTP status code is `200`:
```JSON
{ "code": 200, "message": "SUCCESS_STATUS"}
```
- When the HTTP status code is `503`:
```JSON
{ "code": 500, "message": "thrift service is unavailable"}
```
**Note**: The `/ping` endpoint does not require authentication.
### 3.2 Query Interface
- Request Path: `/rest/table/v1/query`
- Request Method: POST
- Request Format:
- Header: `application/json`
- Request Parameters:
| Parameter Name | Type | Required | Description |
| :------------- | :----- | :------- | :----------------------------------------------------------- |
| `database` | string | Yes | Database name |
| `sql` | string | Yes | SQL query |
| `row_limit` | int | No | Maximum number of rows to return in a single query. If not set, the default value from the configuration file (`rest_query_default_row_size_limit`) is used. If the result set exceeds this limit, status code `411` is returned. |
- Response Format:
| Parameter Name | Type | Description |
| :------------- | :---- | :----------------------------------------------------------- |
| `column_names` | array | Column names |
| `data_types` | array | Data types of each column |
| `values` | array | A 2D array where the first dimension represents rows, and the second dimension represents columns. Each element corresponds to a column, with the same length as `column_names`. |
- Example Request:
```Bash
curl -H "Content-Type:application/json" -H "Authorization:Basic cm9vdDpyb290" -X POST --data '{"database":"test","sql":"select s1,s2,s3 from test_table"}' http://127.0.0.1:18080/rest/table/v1/query
```
- Example Response:
```JSON
{
"column_names": [
"s1",
"s2",
"s3"
],
"data_types": [
"STRING",
"BOOLEAN",
"INT32"
],
"values": [
[
"a11",
true,
2024
],
[
"a11",
false,
2025
]
]
}
```
### 3.3 Non-Query Interface
- Request Path: `/rest/table/v1/nonQuery`
- Request Method: POST
- Request Format:
- Header: `application/json`
- Request Parameters:
| Parameter Name | Type | Required | Description |
| :------------- | :----- | :------- | :------------ |
| `sql` | string | Yes | SQL statement |
| `database` | string | No | Database name |
- Response Format:
| Parameter Name | Type | Description |
| :------------- | :------ | :---------- |
| `code` | integer | Status code |
| `message` | string | Message |
- Example Requests:
- Create a database:
```Bash
curl -H "Content-Type:application/json" -H "Authorization:Basic cm9vdDpyb290" -X POST --data '{"sql":"create database test","database":""}' http://127.0.0.1:18080/rest/table/v1/nonQuery
```
- Create a table `test_table` in the `test` database:
```Bash
curl -H "Content-Type:application/json" -H "Authorization:Basic cm9vdDpyb290" -X POST --data '{"sql":"CREATE TABLE table1 (time TIMESTAMP TIME,region STRING TAG,plant_id STRING TAG,device_id STRING TAG,model_id STRING ATTRIBUTE,maintenance STRING ATTRIBUTE,temperature FLOAT FIELD,humidity FLOAT FIELD,status Boolean FIELD,arrival_time TIMESTAMP FIELD) WITH (TTL=31536000000)","database":"test"}' http://127.0.0.1:18080/rest/table/v1/nonQuery
```
- Example Response:
```JSON
{
"code": 200,
"message": "SUCCESS_STATUS"
}
```
### 3.4 Batch Write Interface
- Request Path: `/rest/table/v1/insertTablet`
- Request Method: POST
- Request Format:
- Header: `application/json`
- Request Parameters:
| Parameter Name | Type | Required | Description |
| :------------------ | :----- | :------- | :----------------------------------------------------------- |
| `database` | string | Yes | Database name |
| `table` | string | Yes | Table name |
| `column_names` | array | Yes | Column names |
| `column_catogories` | array | Yes | Column categories (`TAG`, `FIELD`, `ATTRIBUTE`) |
| `data_types` | array | Yes | Data types |
| `timestamps` | array | Yes | Timestamp column |
| `values` | array | Yes | Value columns. Each column's values can be `null`. A 2D array where the first dimension corresponds to timestamps, and the second dimension corresponds to columns. |
- Response Format:
| Parameter Name | Type | Description |
| :------------- | :------ | :---------- |
| `code` | integer | Status code |
| `message` | string | Message |
- Example Request:
```Bash
curl -H "Content-Type:application/json" -H "Authorization:Basic cm9vdDpyb290" -X POST --data '{"database":"test","column_catogories":["TAG","FIELD","FIELD"],"timestamps":[1739702535000,1739789055000],"column_names":["s1","s2","s3"],"data_types":["STRING","BOOLEAN","INT32"],"values":[["a11",true,2024],["a11",false,2025]],"table":"test_table"}' http://127.0.0.1:18080/rest/table/v1/insertTablet
```
- Example Response:
```JSON
{
"code": 200,
"message": "SUCCESS_STATUS"
}
```
## 4. Configuration
The configuration file is located in `iotdb-system.properties`.
- Set `enable_rest_service` to `true` to enable the module, or `false` to disable it. The default value is `false`.
```Properties
enable_rest_service=true
```
- Only effective when `enable_rest_service=true`. Set `rest_service_port` to a number (1025~65535) to customize the REST service socket port. The default value is `18080`.
```Properties
rest_service_port=18080
```
- Set `enable_swagger` to `true` to enable Swagger for displaying REST interface information, or `false` to disable it. The default value is `false`.
```Properties
enable_swagger=false
```
- The maximum number of rows that can be returned in a single query. If the result set exceeds this limit, only the rows within the limit will be returned, and status code `411` will be returned.
```Properties
rest_query_default_row_size_limit=10000
```
- Expiration time for caching client login information (used to speed up user authentication, in seconds, default is 8 hours).
```Properties
cache_expire_in_seconds=28800
```
- Maximum number of users stored in the cache (default is 100).
```Properties
cache_max_num=100
```
- Initial cache capacity (default is 10).
```Properties
cache_init_num=10
```
- Whether to enable SSL configuration for the REST service. Set `enable_https` to `true` to enable it, or `false` to disable it. The default value is `false`.
```Properties
enable_https=false
```
- Path to the `keyStore` (optional).
```Properties
key_store_path=
```
- Password for the `keyStore` (optional).
```Properties
key_store_pwd=
```
- Path to the `trustStore` (optional).
```Properties
trust_store_path=""
```
- Password for the `trustStore` (optional).
```Properties
trust_store_pwd=""
```
- SSL timeout time, in seconds.
```Properties
idle_timeout_in_seconds=5000
```