bmob-database-restful

Polar Sponsor
爱发电 赞助
.NET 9.0

适用于通过纯 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-javascript SDK(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

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习