/api/db/.../classes/...
针对 HTTP GET、POST 和 DELETE 请求执行以下操作:
- GET:显示指定 struct_no 的模式
- POST:向数据库写入记录
- DELETE:删除指定类别的所有记录
GET
启动 REST 服务器(监听 8083 端口)后,以下 HTTP 请求将显示指定类的模式:
GET http://localhost:8083/api/db/xsqldb/classes/0
响应以以下格式显示指定类的架构:
{
"schema":
{
"struct_no": 0,
"name": "I",
"flags": 9,
"flags_s":
[
"MCO_DICT_SI_CLASS",
"MCO_DICT_SI_LIST"
],
"class_code": 1,
"fields"
[
{
"field_no": 0,
"name": "i",
"type": 6,
"type_s": "MCO_DD_INT4",
"flags": 64,
"flags_s":
[
"MCO_DICT_FI_NULLABLE"
]
},
{
"field_no": 1,
"name": "s",
"type": 16,
"type_s": "MCO_DD_STRING",
"flags": 64,
"flags_s":
[
"MCO_DICT_FI_NULLABLE"
]
},
],
"indexes"
[
{
"index_no": 0,
"name": "list_index_",
"flags": 21,
"flags_s":
[
"MCO_DICT_II_UNIQUE",
"MCO_DICT_II_LIST",
"MCO_DICT_II_TREE"
],
"index": 0,
"n_keys_estimate": 0,
"fields":
[
]
}
],
"events"
[
]
}
}
POST
POST 请求会将记录写入数据库。所有记录都在单个事务的上下文中写入。如果出现故障,事务将回滚,数据库将恢复到其先前的状态,并返回 HTTP 错误。成功时,将返回 HTTP 状态码 200。 请求体是一个 JSON 对象。记录以 JSON 对象数组的形式传递,其中键对应于记录的字段名称。例如,具有整数字段 i 和字符串字段 s 的单个记录可以使用以下 JSON 对象插入:
{
"records":
[
{
"i": 3,
"s": "test"
}
]
}
字段值必须与数据库中的字段类型相匹配。Web 服务不会尝试将 JSON 字符串隐式转换为整数字段,反之亦然。浮点值也不会四舍五入为整数。以下是 SmartEDB 数据类型的 JSON 格式化规则:
- 标量整数和浮点值:JSON 数值
- 日期和时间值:作为 JSON 数值的时间戳
- 布尔值:JSON 中的 true 或 false 文本
- ASCII 固定长度和可变长度字符串:JSON 字符串
- 宽字符和双字节(wchar、nchar)字符串:JSON 十六进制编码字符串(例如,使用 UTF-16-LE 编码时,字符串 "test" 编码为 "7400650073007400")
- 固定长度和可变长度二进制:JSON 十六进制编码字符串(例如 "0a0b0c0d")
- 二进制大对象(BLOB):JSON 十六进制编码字符串
- 结构体:JSON 对象,键为字段名,就像类记录一样
- 数组和向量:JSON 数组:[1, 2, 3]
- 序列:JSON 数组:[1, 2, 3]
例如,考虑以下表:
CREATE TABLE T4(pk INTEGER PRIMARY KEY, str STRING, bin BINARY(3),
arr ARRAY(INTEGER), seq SEQUENCE(CHAR(4)), b BOOLEAN);
以下请求插入 2 条记录(请注意,未提供的字段将存储为 NULL):
POST http://localhost:8083/api/db/xsqldb/classes/3
{
"records":
[
{
"pk":1, "str": "string1", "bin": "010203", "arr": [1,2,3,4],
"seq": ["AAAA", "BBB", "CC", "D"], "b": false
},
{
"pk":2, "str": "string2", "b": true
}
]
}
DELETE
DELETE 请求会删除指定类别的所有记录。例如,以下请求会删除所有类代码为 3 的对象:
DELETE http://localhost:8083/api/db/xsqldb/classes/3
成功时,将返回以下内容:
200 OK