REST API
Contents
REST API#
重要信息#
REST APIs 通过 APIServer 和 OpenMLDB 的服务进行交互,因此 APIServer 模块必须被正确部署才能有效使用。APISever 在安装部署时是可选模块,参照 APIServer 部署文档。
现阶段,APIServer 主要用来做功能测试使用,并不推荐用来测试性能,也不推荐在生产环境使用。APIServer 的默认部署目前并没有高可用机制,并且引入了额外的网络和编解码开销。生产环境推荐使用 Java SDK,功能覆盖最完善,并且在功能、性能上都经过了充分测试。
JSON Body#
与APIServer的交互中,请求体均为JSON格式,并支持一定的扩展格式。注意以下几点:
传入超过整型或浮点数最大值的数值,将会解析失败,比如,double类型传入
1e1000
。非数值浮点数:在传入数据时,支持传入
NaN
、Infinity
、-Infinity
,与缩写Inf
、-Inf
(注意是unquoted的,并非字符串,也不支持其他变种写法)。在返回数据时,支持返回NaN
、Infinity
、-Infinity
(不支持变种写法)。如果你需要将三者转换为null,可以配置write_nan_and_inf_null
。可以传入整型数字到浮点数,比如,
1
可被读取为double。float浮点数可能有精度损失,比如,
0.3
读取后将不会严格等于0.3
,而是0.30000000000000004
。我们不拒绝精度损失,请从业务层面考虑是否需要对此进行处理。传入超过float max但不超过double max的值,在读取后将成为Inf
。true/false
、null
并不支持大写,只支持小写。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 |
是 |
可配 |
sql |
String |
是 |
|
input |
Object |
否 |
|
schema |
Array |
否 |
可支持数据类型(大小写不敏感): |
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"
}