RestAPI V1

IoTDB 的 RESTful 服务可用于查询、写入和管理操作,它使用 OpenAPI 标准来定义接口并生成框架。

1. 开启 RESTful 服务

Restful 服务默认情况是关闭的,开启 restful 功能需要找到 IoTDB 安装目录下的conf/iotdb-system.properties文件,将 enable_rest_service 设置为 true ,然后重启 datanode 进程。

 enable_rest_service=true

2. 鉴权

除了检活接口 /ping,restful服务使用了基础(basic)鉴权,每次 URL 请求都需要在 header 中携带 'Authorization':'Basic' + base64.encode(username + ':' + password)

示例中使用的用户名为:root,密码为:root,对应的 Basic 鉴权 Header 格式为

Authorization : Basic cm9vdDpyb290
  • 若用户名密码认证失败,则返回如下信息:
  • HTTP 状态码:801
  • 返回结构体如下
{"code":801,"message":"WRONG_LOGIN_PASSWORD"}
  • 若未设置 Authorization,则返回如下信息:
  • HTTP 状态码:800
  • 返回结构体如下
{"code":800,"message":"INIT_AUTH_ERROR"}

3. 接口定义

3.1 ping

ping 接口可以用于线上服务检活。

请求方式:GET

请求路径:http://ip:port/ping

请求示例:

curl http://127.0.0.1:18080/ping

返回的 HTTP 状态码:

  • 200:当前服务工作正常,可以接收外部请求。
  • 503:当前服务出现异常,不能接收外部请求。

响应参数:

参数名称参数类型参数描述
codeinteger状态码
messagestring信息提示

响应示例:

  • HTTP 状态码为 200 时:
{  "code": 200,  "message": "SUCCESS_STATUS"}
  • HTTP 状态码为 503 时:
{  "code": 500,  "message": "thrift service is unavailable"}

注意:ping 接口访问不需要鉴权。

3.2 查询接口

  • 请求地址:/rest/table/v1/query

  • 请求方式:post

  • Request 格式

请求头:application/json

请求参数说明

参数名称参数类型是否必填参数描述
databasestring数据库名称
sqlstring
row_limitint一次查询能返回的结果集的最大行数。 如果不设置该参数,将使用配置文件的 rest_query_default_row_size_limit 作为默认值。 当返回结果集的行数超出限制时,将返回状态码 411
  • Response 格式
参数名称参数类型参数描述
column_namesarray列名
data_typesarray每一列的类型
valuesarray二维数组,第一维与结果集所有行,第二维数组代表结果集的每一行,每一个元素为一列,长度与column_names的长度相同。
  • 请求示例
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
  • 响应示例:
{
    "column_names": [
        "s1",
        "s2",
        "s3"
    ],
    "data_types": [
        "STRING",
        "BOOLEAN",
        "INT32"
    ],
    "values": [
        [
            "a11",
            true,
            2024
        ],
        [
            "a11",
            false,
            2025
        ]
    ]
}

3.3 非查询接口

  • 请求地址:/rest/table/v1/nonQuery

  • 请求方式:post

  • Request 格式

    • 请求头:application/json

    • 请求参数说明

参数名称参数类型是否必填参数描述
sqlstring
databasestring数据库名
  • Response 格式
参数名称参数类型参数描述
codeinteger状态码
messagestring信息提示
  • 请求示例
#创建数据库
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
#在test库中创建表test_table
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
  • 响应示例:
{
  "code": 200,
  "message": "SUCCESS_STATUS"
}

3.4 批量写入接口

  • 请求地址:/rest/table/v1/insertTablet

  • 请求方式:post

  • Request 格式

请求头:application/json

请求参数说明

参数名称参数类型是否必填参数描述
databasestring数据库名称
tablestring表名
column_namesarray列名
column_catogoriesarray列类别(TAG,FIELD,ATTRIBUTE)
data_typesarray数据类型
timestampsarray时间列
valuesarray值列,每一列中的值可以为 null二维数组第一层长度跟timestamps长度相同。第二层长度跟column_names长度相同
  • Response 格式

响应参数:

参数名称参数类型参数描述
codeinteger状态码
messagestring信息提示
  • 请求示例
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
  • 响应示例
{
  "code": 200,
  "message": "SUCCESS_STATUS"
}

4. 配置

配置文件位于 iotdb-system.properties 中。

  • enable_rest_service 设置为 true 表示启用该模块,而将 false 表示禁用该模块。默认情况下,该值为 false
enable_rest_service=true
  • 仅在 enable_rest_service=true 时生效。将 rest_service_port 设置为数字(1025~65535),以自定义REST服务套接字端口,默认情况下,值为 18080
rest_service_port=18080
  • 将 ‘enable_swagger’ 设置 ‘true’ 启用swagger来展示rest接口信息, 而设置为 ‘false’ 关闭该功能. 默认情况下,该值为 false
enable_swagger=false
  • 一次查询能返回的结果集最大行数。当返回结果集的行数超出参数限制时,您只会得到在行数范围内的结果集,且将得到状态码411
rest_query_default_row_size_limit=10000
  • 缓存客户登录信息的过期时间(用于加速用户鉴权的速度,单位为秒,默认是8个小时)
cache_expire_in_seconds=28800
  • 缓存中存储的最大用户数量(默认是100)
cache_max_num=100
  • 缓存初始容量(默认是10)
cache_init_num=10
  • REST Service 是否开启 SSL 配置,将 enable_https 设置为 true 以启用该模块,而将 false 设置为禁用该模块。默认情况下,该值为 false
enable_https=false
  • keyStore 所在路径(非必填)
key_store_path=
  • keyStore 密码(非必填)
key_store_pwd=
  • trustStore 所在路径(非必填)
trust_store_path=""
  • trustStore 密码(非必填)
trust_store_pwd=""
  • SSL 超时时间,单位为秒
idle_timeout_in_seconds=5000