适用于通过纯 HTTP / curl 方式与 Bmob 后端云交互的场景,支持任何**未提供 Bmob SDK 的编程语言**——例如 Python(requests / httpx)、Go(net/http)、PHP(Guzzle)、C#(HttpClient)、Rust(reqwest)、Ruby、Java 后端、Bash、Deno、服务端脚本、数据迁移等。 当用户明确要求使用 `curl` 或需直接操作原始 REST API URL 模式时,也应选用此方式。 API 基础域名:`https:/
Bmob Database — REST API
功能概述
Bmob Database — REST API是一项面向实际任务的技能,主要用于Bmob REST API 是 跨语言、跨平台 的通用接入方式:任何能发 HTTP 请求的环境都能用,不依赖任何 SDK;典型用法包括 Python/Go/PHP/C#/Rust/Ruby/Java 后端、数据迁移脚本、Bash one-liner、Deno Edge Functions、Serverless 函数等。
核心要点
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
- 实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
使用与执行
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
结果检查与注意事项
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
Bmob Database — REST API
Bmob REST API 是 跨语言、跨平台 的通用接入方式:任何能发 HTTP 请求的环境都能用,不依赖任何 SDK。典型用法包括 Python/Go/PHP/C#/Rust/Ruby/Java 后端、数据迁移脚本、Bash one-liner、Deno Edge Functions、Serverless 函数等。
核心原则
1. URL 形态固定: 所有接口在 https://api.codenow.cn/1/(Bmob 控制台 → 应用 → 设置 → 配置 中显示的 API 域名,一般为 api.codenow.cn)。版本号 /1/ 必须保留。
示例:https://api.codenow.cn/1/classes/Token — 对 Token 表做 CRUD 时路径即 /1/classes/Token。
POST /1/classes/# 新增 GET /1/classes/ / # 查单条 GET /1/classes/ # 查列表 / 条件查询 PUT /1/classes/ / # 更新 DELETE /1/classes/ / # 删除 POST /1/batch # 批量(≤ 50 条) GET /1/cloudQuery # BQL 查询 POST /1/users # 注册 POST /1/login # 登录 POST /2/files/ # 上传文件 GET /1/timestamp # 服务器时间
完整快速参考见 references/url-cheatsheet.md。
2. 两种鉴权方式,均可用(与 hydrogen-js-sdk 3.0+ 的两种 Bmob.initialize 对应):
- 简易授权 — Application ID + REST API Key(REST 原生方式;JS SDK 方式 B 即走此通道):Header
X-Bmob-Application-Id+X-Bmob-REST-API-Key。适合服务端、内网脚本、与 SDK 方式 B 共用同一套 Key 的项目。详见 shared/auth-headers.md。 - 加密授权 — Secret Key + API 安全码签名(JS SDK 方式 A 走此通道;也可手写 REST):6 个头部 + MD5 签名。适合浏览器 / 小程序直接调 REST、且不想在 Header 里暴露 REST API Key 的场景。详见 shared/md5-sign-algo.md。
2.x 文档曾暗示前端「禁止」Application ID + REST API Key;当前两种鉴权在全端均可正常使用。公开 bundle 中 REST API Key 仍可被抓包,故公开端仍推荐优先 SDK 方式 A 或加密授权,而非硬性禁止方式 B。
3. POST/PUT 必须 Content-Type: application/json,body 用 JSON。Bmob REST 不支持 form-urlencoded。
4. GET 的 query 必须 URL encode:where / order / limit / skip / include / keys / count 都通过 query string 传,含 { / : 等字符必须 encode。
5. 默认查询返回 10 条,最大 1000。需要更多用 skip + limit 分页或 count=1。
安全清单
- 前端接入优先级:浏览器 / 小程序优先
bmob-database-javascriptSDK(3.0+ 支持 Secret Key 或 Application ID 两种初始化);若必须手写 REST,公开端优先加密授权或自建 BFF。 - Application ID + REST API Key 可用:不再禁止在前端或 SDK 中使用此组合(对应 SDK 方式 B / REST 简易授权);注意 REST API Key 会出现在请求头中,抓包后可复用。
- 服务端代码里 Key 用环境变量:不要硬编码到源码、不 commit 到公开仓库。
- Master Key 仅用于服务端:通过
X-Bmob-Master-Key头部使用,不要给前端。 - 写操作的表必须配 ACL:见
bmob-acl-and-roles(P1);REST 创建对象时 body 里加"ACL": {...}即可。 - 生产用 HTTPS:你的 API domain 必须是 https,否则 Header 里的 Key 会明文传输。
- 批量上限 50 条 / 请求:
/1/batch单次最多 50 个子请求。
五大基础操作(简易授权 + curl)
公共头部(所有请求都要带,下方示例不再重复):
X-Bmob-Application-Id:X-Bmob-REST-API-Key: Content-Type: application/json
添加数据
curl -X POST 'https://api.codenow.cn/1/classes/GameScore' -H "X-Bmob-Application-Id:" -H "X-Bmob-REST-API-Key: " -H "Content-Type: application/json" -d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}'
成功 201 Created + body:
{ "createdAt": "2011-08-20 02:06:57", "objectId": "e1kXT22L" }
查询单条
curl -X GET 'https://api.codenow.cn/1/classes/GameScore/e1kXT22L' -H "X-Bmob-Application-Id:" -H "X-Bmob-REST-API-Key: "
查询列表(条件 + 分页 + 排序)
curl -X GET 'https://api.codenow.cn/1/classes/GameScore' -H "X-Bmob-Application-Id:" -H "X-Bmob-REST-API-Key: " -G --data-urlencode 'where={"score":{"$gt":100}}' --data-urlencode 'limit=20' --data-urlencode 'skip=0' --data-urlencode 'order=-createdAt' --data-urlencode 'count=1'
返回:
{
"results": [ /* ... */ ],
"count": 123
}
完整 where 运算符列表($gt / $lt / $in / $nin / $exists / $regex / $inQuery / $or …)见 references/query-where-syntax.md。
更新
curl -X PUT 'https://api.codenow.cn/1/classes/GameScore/e1kXT22L' -H "X-Bmob-Application-Id:" -H "X-Bmob-REST-API-Key: " -H "Content-Type: application/json" -d '{"score":73453}'
删除
curl -X DELETE 'https://api.codenow.cn/1/classes/GameScore/e1kXT22L' -H "X-Bmob-Application-Id:" -H "X-Bmob-REST-API-Key: "
原子计数器
curl -X PUT 'https://api.codenow.cn/1/classes/Post/abc'
-H "Content-Type: application/json"
...
-d '{"likes":{"__op":"Increment","amount":1}}'
amount 支持负数。
批量操作(≤ 50)
curl -X POST 'https://api.codenow.cn/1/batch'
-H "Content-Type: application/json"
...
-d '{
"requests": [
{ "method": "POST", "path": "/1/classes/GameScore", "body": { "score": 1 } },
{ "method": "PUT", "path": "/1/classes/GameScore/aaa", "body": { "score": 9 } },
{ "method": "DELETE", "path": "/1/classes/GameScore/bbb" }
]
}'
每个子请求独立成功/失败,不会回滚。
数据类型:Pointer / Relation / Date / File / GeoPoint
REST 通过 __type 字段标识特殊类型:
{
// Pointer:一对多
"author": { "__type": "Pointer", "className": "_User", "objectId": "abc" },
// Date:日期(注意服务器存的格式)
"publishedAt": { "__type": "Date", "iso": "2024-08-21 18:02:52" },
// File:上传后返回的结构原样存
"cover": { "__type": "File", "group": "group1", "filename": "1.jpg", "url": "M00/01/14/x.jpg" },
// GeoPoint:地理位置
"location": { "__type": "GeoPoint", "latitude": 23.05, "longitude": 113.40 },
// Relation:多对多(实际操作通过 __op AddRelation / RemoveRelation)
"likedBy": { "__type": "Relation", "className": "_User" }
}
详见 references/data-types.md。
用户系统
# 注册
curl -X POST 'https://api.codenow.cn/1/users'
-H "Content-Type: application/json"
...
-d '{"username":"hello","password":"pwd123","email":"x@y.com"}'
# 登录(必须用 GET,参数走 query)
curl -X GET 'https://api.codenow.cn/1/login'
-H "Content-Type: application/json"
...
-G
--data-urlencode 'username=hello'
--data-urlencode 'password=pwd123'
# 拿当前用户(带上 X-Bmob-Session-Token)
curl -X GET 'https://api.codenow.cn/1/users/'
-H "X-Bmob-Session-Token: "
...
完整用户系统接口见 references/users.md。
文件上传
走独立的 /2/files/ 端点,body 是文件二进制:
curl -X POST 'https://api.codenow.cn/2/files/cover.jpg' -H "X-Bmob-Application-Id:" -H "X-Bmob-REST-API-Key: " -H "Content-Type: image/jpeg" --data-binary @/path/to/cover.jpg
详见 references/files.md。
加密授权
浏览器 / 小程序直接调用 REST(不经 SDK)时,推荐加密授权;Application ID + REST API Key 简易授权同样可用(与 SDK 3.0 方式 B 一致),但 REST API Key 更易被抓包。签名规则:
sign = md5(url + timeStamp + SecurityCode + noncestr + body + SDKVersion)
完整 6 个头部、签名拼接顺序、Node 参考实现见 shared/md5-sign-algo.md。
多语言客户端示例
| 语言 | 示例 |
|---|---|
| Python(requests) | references/lang-snippets/python.md |
| Go(net/http) | references/lang-snippets/go.md |
| PHP(Guzzle) | references/lang-snippets/php.md |
| C#(HttpClient) | references/lang-snippets/csharp.md |
与 MCP 联动
如果用户配置了 Bmob MCP,generate_code 工具能直接生成 curl,覆盖 13 种 type(添加 / 删除 / 更新 / 条件查询 / 注册 / 登录 / SMS / 云函数 / 文件上传等)。优先调用它而不是手写 curl——这样能确保 URL pattern / Header / where 语法都是当前服务器最新版本。
排错速查
| HTTP | code | 含义 |
|---|---|---|
| 401 | — | App ID 或 REST API Key 错;或加密授权签名错 |
| 400 | 101 | 对象不存在 / 用户名密码不正确 |
| 400 | 105 | 字段名非法或是保留字段(objectId/createdAt/updatedAt/ACL) |
| 400 | 106 | Pointer 格式不对 |
| 400 | 107 | JSON 格式错 / Content-Type 不是 application/json |
| 400 | 117 | 纬度 / 经度越界 |
| 400 | 122 | 用户权限验证失败(ACL) |
| 400 | 202 | username 已被使用 |
| 400 | 209 | mobilePhoneNumber 已被使用 |
| 400 | 211 | 用户未登录 / 登录已过期 |
| 400 | 401 | 唯一索引重复值 |
| 400 | 402 | where 超字节限制 |
| 400 | 10076 | QPS 超限 |
| 500 | — | 服务端临时故障,稍后重试 |
完整错误码见 bmob-error-codes。
参考
- 完整 REST 文档:BmobDocs/mds/data/restful/develop_doc.md
- 鉴权约定:shared/auth-headers.md
- MD5 签名:shared/md5-sign-algo.md
- BQL 语法:
bmob-bql(P1) - MCP
generate_code工具:bmob-mcp - 错误码:
bmob-error-codes
热门AI工具
相关专题
本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。
0
2026.11.02
本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。
0
2026.11.02
本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。
0
2026.11.02
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习