SonnetDB 提供了完整的 RESTful HTTP API,分为数据面(Data-Plane)、控制面(Control-Plane)、MCP 接口和可观测性四大类。本文将逐一介绍各端点及其用法,帮助您通过 HTTP 协议与 SonnetDB 交互。
数据面 API 负责数据的写入和查询,是所有 API 中最常使用的部分。
# SQL 查询端点:执行任意 SQL 语句
POST /api/v1/sql
Authorization: Bearer sndb_abc123
Content-Type: application/json
{
"sql": "SELECT time, temperature FROM sensor_data WHERE device_id = 's01' LIMIT 10"
}
# 批量写入端点:高效摄入批量数据
POST /api/v1/write
Authorization: Bearer sndb_abc123
Content-Type: application/json
{
"measurement": "sensor_data",
"points": [
{"time": 1713676800000, "tags": {"device_id": "s01"}, "fields": {"temperature": 23.5, "humidity": 65.2}},
{"time": 1713676801000, "tags": {"device_id": "s01"}, "fields": {"temperature": 23.7, "humidity": 64.8}}
]
}
# Line Protocol 写入(InfluxDB 兼容格式)
POST /api/v1/ingest
Authorization: Bearer sndb_abc123
Content-Type: text/plain
sensor_data,device_id=s01 temperature=23.5,humidity=65.2 1713676800000
sensor_data,device_id=s01 temperature=23.7,humidity=64.8 1713676801000
# 批量查询端点
POST /api/v1/sql/batch
{
"statements": [
"SELECT count(*) FROM sensor_data",
"SELECT * FROM sensor_data LIMIT 5"
]
}
控制面 API 用于管理数据库对象、用户权限和系统配置。
# 创建测量表
POST /api/v1/sql
{
"sql": "CREATE MEASUREMENT sensor_data (device_id TAG, temperature FIELD DOUBLE)"
}
# 列出所有测量表
GET /api/v1/measurements
# 查看测量表结构
GET /api/v1/measurements/sensor_data/schema
# 创建 Token
POST /api/v1/tokens
{
"name": "readonly-token",
"permissions": ["read"],
"database": "mydb"
}
# 列出所有 Token
GET /api/v1/tokens
# 删除 Token
DELETE /api/v1/tokens/{token_id}
MCP(Model Context Protocol)接口用于 AI 集成,支持大语言模型与数据库的自然交互。
# MCP 工具列表
GET /api/v1/mcp/tools
# 执行 MCP 工具
POST /api/v1/mcp/execute
{
"tool": "query",
"arguments": {
"sql": "SELECT * FROM sensor_data LIMIT 5"
}
}
# 获取 MCP 资源
GET /api/v1/mcp/resources/schema/sensor_data
可观测性端点提供数据库运行状态的监控指标,适合集成到 Prometheus 等监控系统中。
# 数据库运行状态
GET /api/v1/status
# Prometheus 指标
GET /api/v1/metrics
# 慢查询日志
GET /api/v1/querylog?slow=true&limit=20
# 数据段统计
GET /api/v1/segments
# 数据库概览
GET /api/v1/database/stats
{
"measurement_count": 12,
"total_points": 5872341,
"disk_usage_mb": 245.3,
"segment_count": 89,
"uptime_seconds": 86400
}
SonnetDB HTTP API 使用标准的 HTTP 状态码表示请求结果:
| 状态码 | 含义 | 说明 |
|---|---|---|
| 200 | OK | 请求成功 |
| 204 | No Content | 写入成功,无返回数据 |
| 400 | Bad Request | 请求参数错误 |
| 401 | Unauthorized | Token 无效或缺失 |
| 403 | Forbidden | 权限不足 |
| 404 | Not Found | 资源不存在 |
| 429 | Too Many Requests | 请求频率超限 |
| 500 | Server Error | 服务端内部错误 |
错误响应体格式如下:
{
"error": {
"code": "INVALID_SQL",
"message": "语法错误:第1行第10列附近",
"details": "期望关键字 FROM,实际得到 TOKEN"
}
}
所有 API 端点均支持 Content-Type: application/json 和 application/x-msgpack 两种序列化格式,后者在批量数据传输时具有更高的性能和更小的体积。建议在带宽受限或高吞吐场景中使用 MessagePack 格式。