HTTP调用云开发数据库详解
前置条件
- 云开发环境:需在云开发平台(如酷盾安全开发、阿里云开发)中创建项目,并开通数据库服务。
- 数据库权限:确保当前用户拥有对目标数据库的读写权限。
- API密钥:获取云开发环境的环境ID和密钥(SecretKey),用于API认证。
- 网络配置:确保客户端与云开发数据库的网络连通性(如白名单、VPC配置)。
HTTP API调用规范
操作类型 | HTTP方法 | 路径格式 | 请求参数 | 响应格式 |
---|---|---|---|---|
创建数据 | POST | /database/documents |
JSON格式的数据内容 | JSON(含状态码) |
查询数据 | GET | /database/documents |
查询条件(如where )、分页参数 |
JSON(数据列表) |
更新数据 | PUT/PATCH | /database/documents/:id |
需更新的字段及值 | JSON(更新后数据) |
删除数据 | DELETE | /database/documents/:id |
无 | 状态码 |
请求参数说明
- 公共参数:
env
:云开发环境ID(必填)secret
:API密钥(必填)collection
:数据库集合名称(如users
)
- 数据参数:
- 创建/更新时需传递JSON格式的字段键值对(如
{"name":"张三","age":25}
)。 - 查询时可传递
where
(条件过滤)、orderBy
(排序)、limit
(分页)等参数。
- 创建/更新时需传递JSON格式的字段键值对(如
认证与安全
- 签名认证:部分云平台要求对请求进行签名(如HMAC-SHA256),需参考官方文档生成
Signature
参数。 - IP白名单:建议限制API调用的IP范围,避免暴露公网风险。
- 角色权限:通过云平台的角色管理(如
DB Admin
、ReadOnly
)控制用户权限。
代码示例(Python)
import requests import json # 配置参数 ENV_ID = "your-env-id" SECRET_KEY = "your-secret-key" COLLECTION = "users" URL = f"https://cloudbase-api.tencentcloudapi.com/database/documents" # 创建数据 def create_data(): headers = { "Content-Type": "application/json", "X-Env-Id": ENV_ID, "X-Secret-Key": SECRET_KEY } data = { "name": "张三", "age": 25, "role": "developer" } response = requests.post(URL, headers=headers, data=json.dumps(data)) print(response.json()) # 查询数据 def query_data(): params = { "env": ENV_ID, "secret": SECRET_KEY, "collection": COLLECTION, "where": json.dumps({"age": {"$gt": 20}}) } response = requests.get(URL, params=params) print(response.json())
常见问题与解决方案
问题 | 解决方案 |
---|---|
认证失败(401/403) | 检查env 和secret 是否正确,或密钥是否过期。 |
跨域请求被拦截 | 在云平台配置CORS规则,允许客户端域名访问。 |
数据格式错误(400) | 确保请求体为合法JSON,且字段符合数据库集合的Schema定义。 |
查询超时(504) | 优化查询条件(如添加索引),或增加API超时时间。 |
相关问题与解答
问题1:如何通过HTTP批量插入数据?
解答:
多数云开发数据库支持批量操作,以九八云为例,可通过bulkWrite
接口实现:
{
"operations": [
{"insert": {"document": {"name": "李四", "age": 30}}},
{"insert": {"document": {"name": "王五", "age": 28}}}
]
}
需将Content-Type
设置为application/json
,并在请求头中携带env
和secret
。
问题2:如何实现分页查询?
解答:
通过limit
和skip
参数控制分页。
params = {
"env": ENV_ID,
"secret": SECRET_KEY,
"collection": COLLECTION,
"limit": 10, # 每页10条
"skip": 20 # 跳过前20条
}
response = requests.get(URL, params=params)
响应中会返回total
字段表示总数据量,可据此计算总