REST API#

重要信息#

  • REST APIs 通过 APIServer 和 OpenMLDB 的服务进行交互,因此 APIServer 模块必须被正确部署才能有效使用。APISever 在安装部署时是可选模块,参照 APIServer 部署文档

  • 现阶段,APIServer 主要用来做功能测试使用,并不推荐用来测试性能,也不推荐在生产环境使用。APIServer 的默认部署目前并没有高可用机制,并且引入了额外的网络和编解码开销。生产环境推荐使用 Java SDK,功能覆盖最完善,并且在功能、性能上都经过了充分测试。

JSON Body#

与APIServer的交互中,请求体均为JSON格式,并支持一定的扩展格式。注意以下几点:

  • 传入超过整型或浮点数最大值的数值,将会解析失败,比如,double类型传入1e1000

  • 非数值浮点数:在传入数据时,支持传入NaNInfinity-Infinity,与缩写Inf-Inf(注意是unquoted的,并非字符串,也不支持其他变种写法)。在返回数据时,支持返回NaNInfinity-Infinity(不支持变种写法)。如果你需要将三者转换为null,可以配置 write_nan_and_inf_null

  • 可以传入整型数字到浮点数,比如,1可被读取为double。

  • float浮点数可能有精度损失,比如,0.3读取后将不会严格等于0.3,而是0.30000000000000004。我们不拒绝精度损失,请从业务层面考虑是否需要对此进行处理。传入超过float max但不超过double max的值,在读取后将成为Inf

  • true/falsenull并不支持大写,只支持小写。

  • timestamp类型暂不支持传入年月日字符串,只支持传入数值,比如1635247427000

  • date类型请传入年月日字符串,中间不要包含任何空格。

数据插入#

请求地址:http://ip:port/dbs/{db_name}/tables/{table_name}

请求方式:PUT

请求体:

  {
       "value": [
        [v1, v2, v3]
      ]
  } 
  • 目前仅支持插入一条数据。

  • 数据需严格按照表 schema 排列。

请求数据样例:

curl http://127.0.0.1:8080/dbs/db/tables/trans -X PUT -d '{
"value": [
    ["bb",24,34,1.5,2.5,1590738994000,"2020-05-05"]
]}'

响应:

{
    "code":0,
    "msg":"ok"
}

实时特征计算#

请求地址:http://ip:port/dbs/{db_name}/deployments/{deployment_name}

请求方式:POST

请求体

  • array 格式:

{
    "input": [["row0_value0", "row0_value1", "row0_value2"], ["row1_value0", "row1_value1", "row1_value2"], ...],
    "need_schema": false,
    "write_nan_and_inf_null": false
}
  • JSON 格式:

{
    "input": [
      {"col0":"row0_value0", "col1":"row0_value1", "col2":"row0_value2", "foo": "bar"}, 
      {"col0":"row1_value0", "col1":"row1_value1", "col2":"row1_value2"}, 
      ...
    ]
}
  • 可以支持多行,其结果与返回的 response 中的 data.data 字段的数组一一对应。

  • need_schema 可以设置为 true, 返回就会有输出结果的 schema。可选参数,默认为 false。

  • write_nan_and_inf_null 可以设置为 true,可选参数,默认为false。如果设置为 true,当输出数据中有 NaN、Inf、-Inf 时,会将其转换为 null。

  • input 为 array 格式/JSON 格式时候返回结果也是 array 格式/JSON 格式,一次请求的 input 只支持一种格式,请不要混合格式。

  • JSON 格式的 input 数据可以有多余列。

请求数据样例

例 1:array 格式

curl http://127.0.0.1:8080/dbs/demo_db/deployments/demo_data_service -X POST -d'{
        "input": [["aaa", 11, 22, 1.2, 1.3, 1635247427000, "2021-05-20"]]
    }'

响应:

{
    "code":0,
    "msg":"ok",
    "data":{
        "data":[["aaa",11,22]]
    }
}

示例 2:JSON 格式

curl http://127.0.0.1:8080/dbs/demo_db/deployments/demo_data_service -X POST -d'{"input": [{"c1":"aaa", "c2":11, "c3":22, "c4":1.2, "c5":1.3, "c6":1635247427000, "c7":"2021-05-20", "foo":"bar"}]}'

响应:

{
    "code":0,
    "msg":"ok",
    "data":{
        "data":[{"c1":"aaa","c2":11,"w1_c3_sum":22}]
    }
}

查询#

请求地址:http://ip:port/dbs/{db_name}

请求方式:POST

请求体:

{
    "mode": "",
    "sql": "",
    "input": {
        "schema": [],
        "data": []
    },
    "write_nan_and_inf_null": false
}

请求参数:

参数

类型

必需

说明

mode

String

可配 offsync , offasync, online

sql

String

input

Object

schema

Array

可支持数据类型(大小写不敏感):Bool, Int16, Int32, Int64, Float, Double, String, Date and Timestamp.

data

Array

schema和data字段必须同时存在

请求数据样例

例 1:普通查询

{
  "mode": "online",
  "sql": "select 1"
}

响应:

{
  "code":0,
  "msg":"ok",
  "data": {
    "schema":["Int32"],
    "data":[[1]]
  }
}

例 2:参数化查询

{
  "mode": "online",
  "sql": "SELECT c1, c2, c3 FROM demo WHERE c1 = ? AND c2 = ?",
  "input": {
    "schema": ["Int32", "String"],
    "data": [1, "aaa"]
  }
}

响应:

{
    "code":0,
    "msg":"ok",
    "data": {
      "schema": ["Int32", "String", "Float"],
      "data": [[1, "aaa", 1.2], [1, "aaa", 3.4]]
    }
}

查询 Deployment 信息#

请求地址:http://ip:port/dbs/{db_name}/deployments/{deployment_name}

请求方式:GET

响应:

{
  "code": 0,
  "msg": "ok",
  "data": {
    "name": "",
    "procedure": "",
    "input_schema": [

    ],
    "input_common_cols": [
      
    ],
    "output_schema": [

    ],
    "output_common_cols": [
      
    ],
    "dbs": [

    ],
    "tables": [

    ]
  }
}

获取所有库名#

请求地址:http://ip:port/dbs

请求方式:GET

响应:

{
  "code": 0,
  "msg": "ok",
  "dbs": [

  ]
}

获取所有表名#

请求地址:http://ip:port/dbs/{db}/tables

请求方式:GET

响应:

{
  "code": 0,
  "msg": "ok",
  "tables": [
    {
      "name": "",
      "table_partition_size": 8,
      "tid": ,
      "partition_num": 8,
      "replica_num": 2,
      "column_desc": [
        {
          "name": "",
          "data_type": "",
          "not_null": false
        }
      ],
      "column_key": [
        {
          "index_name": "",
          "col_name": [

          ],
          "ttl": {
            
          }
        }
      ],
      "added_column_desc": [
        
      ],
      "format_version": 1,
      "db": "",
      "partition_key": [
        
      ],
      "schema_versions": [
        
      ]
    }
  ]
}

刷新 APIServer 元数据缓存#

创建删除表、Deploymennt等操作后,元数据同步有一定的滞后性。如果你发现APIServer找不到新建的表或Deployment,请先尝试刷新缓存。

请求地址:http://ip:port/refresh

请求方式:POST

响应:

{
    "code":0,
    "msg":"ok"
}