Bmob 後端雲 — 總入口
Bmob 是一個 BaaS(Backend as a Service)平台,提供 NoSQL 資料庫、用戶系統、檔案儲存、雲函數、推播、簡訊、支付、IM、AI 等開箱即用的後端能力。用戶端覆蓋 JavaScript / Android / iOS / Swift / Flutter / HarmonyOS / 小程式 / Python / Go / PHP / C#,加上語言無關的 REST API 與 MCP Server。
路由順序:先走下方 入口決策樹 → 再查 路由決策表(選 sub-skill)→ 具體操作查 shared/operation-routing.md(MCP / curl / SDK·REST 三通道對照)。
核心原則
1. 永遠先確認平台再寫程式碼。 Bmob 各端 SDK 的 API 型態差異很大(JS 是 Bmob.Query、Android 是 extends BmobObject、舊 iOS 是 BmobObject objectWithClassName、純 Swift 是 try await BmobObject.save()、REST 是 HTTP /1/classes/<name>),不要把 JS 的程式碼塞進 Android skill 的回答裡。先看用戶用什麼平台 / 框架,再讀對應 sub-skill。
2. 不要在前端洩漏 Master Key。 Bmob 控制台 → 應用金鑰裡有四個值:
| 金鑰 | 安全級別 | 使用場景 |
|---|---|---|
| Application ID | 公開 | 所有端 |
| REST API Key | 半公開 | 瀏覽器 / 小程式 / 行動端 / 伺服器端 |
| Secret Key | 中等 | 加密授權場景的客戶端,配合 SecurityCode |
| Master Key | 最高 | 僅伺服器端 / 後台腳本,永不顯示在前端 bundle |
3. 寫之前先看 changelog。 SDK 在演進,方法簽章會變。開始一項任務前用 raw URL 拉對應平台的 update_log.md(路徑見 sub-skill 的 metadata.docs_raw)確認無破壞性變更。
4. 錯誤不要循環重試。 2-3 次同樣的嘗試失敗後停下,重新評估:
- HTTP 4xx:先把回應體裡的
code拿去查bmob-error-codes。 - 權限/ACL 報錯(9015、9016 等):見下方 P1 臨時路徑 或將來
bmob-acl-and-roles。 - "找不到方法":可能 SDK 版本過舊或文件與你使用版本不匹配,去倉庫 release 頁對比。
入口決策樹(先走這裡)
flowchart TD
Start([用戶提到 Bmob]) --> Err{回應裡有錯誤 code?}
Err -->|是| EC[bmob-error-codes]
Err -->|否| Ship{程式碼要寫進應用並發版?}
Ship -->|否| McpCfg{IDE 已配置 Bmob MCP?}
McpCfg -->|是| MCP[bmob-mcp<br/>9 個可呼叫工具]
McpCfg -->|否| RestOnly[bmob-database-restful<br/>或 generate_code 需 MCP]
Ship -->|是| Plat{平台 / 語言?}
Plat -->|JS Web Node 小程式 Cocos JS 等| JS[bmob-database-javascript]
Plat -->|Android Kotlin Java| AND[bmob-database-android]
Plat -->|Pure Swift BmobSwiftSDK async/await| SWIFT[bmob-database-swift]
Plat -->|Legacy iOS ObjC Swift Bridging Header| IOS[bmob-database-ios]
Plat -->|Flutter Dart| FLUT[bmob-database-flutter]
Plat -->|curl Python Go PHP 後端等| REST[bmob-database-restful]
Plat -->|RN Uni-app JS 橋接| JS
JS --> Schema{需要真實表欄位名?}
AND --> Schema
SWIFT --> Schema
IOS --> Schema
FLUT --> Schema
REST --> Schema
Schema -->|是且已配 MCP| MCP
Schema -->|否| Done([讀對應 sub-skill 寫程式碼])
MCP --> OpTable[[shared/operation-routing.md<br/>操作級三通道表]]
路由決策表(命中後立即去讀對應 sub-skill)
| 用戶意圖 | 平台線索 | 路由到 |
|---|---|---|
| 新建/查看表結構、加測試資料、產生 curl 樣板、實作資料庫 | — | bmob-mcp(前提:用戶已配置 MCP) |
| 一鍵部署網站 / 靜態託管(HTML 或 dist 到 CDN) | — | bmob-mcp → deploy_static_site(或 generate_code 僅產生 curl) |
| NoSQL 增刪改查、條件查詢 | JS / TS / Web / Node / 微信/支付寶/字節/QQ/百度小程式 / 快應用 / Cocos Creator JS / Electron / Tauri / 混合 App | bmob-database-javascript |
| NoSQL 增刪改查 | Android / Kotlin / Java | bmob-database-android |
| NoSQL 增刪改查 | 純 Swift SDK / BmobSwiftSDK / SPM / import BmobSDK / async/await | bmob-database-swift |
| NoSQL 增刪改查 | 舊 iOS SDK / Objective-C / Swift Bridging Header / BmobSDK.xcframework / saveInBackground | bmob-database-ios |
| NoSQL 增刪改查 | Flutter / Dart(bmob_plugin) | bmob-database-flutter |
| NoSQL 增刪改查 / 任意沒有 SDK 的語言 | curl / Python / Go / PHP / C# / Rust / Ruby / Java 後端 | bmob-database-restful |
| React Native / Uni-app(JS 層接 Bmob) | — | bmob-database-javascript 或 REST |
| HarmonyOS ArkTS | — | bmob-database-restful + BmobDocs |
| 用戶註冊 / 登入 / SMS 驗證 / 三方登入 / 信箱驗證 | 各端 | bmob-auth-{platform}(P1,見下表) |
| 檔案上傳下載 / CDN | 各端 | bmob-storage-{platform}(P1,見下表) |
| 呼叫雲函數 | 各端 | bmob-cloud-function-{platform}(P1,見下表) |
| 編寫執行在 Bmob 伺服器上的雲函數程式碼 | — | bmob-cloud-function-development |
| ACL / 角色 / 權限 / 行級安全 | — | bmob-acl-and-roles(P1,見下表) |
| BQL 查詢(類 SQL 語法) | 任意 | bmob-bql(P1,見下表) |
| 排查報錯 code 9015 / 101 / 105 等 | — | bmob-error-codes |
| 推播 / 簡訊 / 支付 | 各端 | bmob-push-* / bmob-sms-* / bmob-pay-*(P2) |
具體操作(增刪改查、登入、上傳、部署)用哪條通道,見 shared/operation-routing.md。
P1 / P2 尚未發佈時的臨時路徑
專用 sub-skill 未安裝時,不要空等,按此表降級:
| 用戶意圖 | 目標 skill(未發佈) | 目前可用替代 |
|---|---|---|
| 註冊 / 登入 / 簡訊驗證碼 | bmob-auth-* | REST:bmob-database-restful/references/users.md;已配 MCP:generate_code(註冊 / 用戶名密碼登入 / 手機號驗證碼登入 等) |
| 檔案上傳 / CDN URL | bmob-storage-* | REST:references/files.md;MCP:generate_code → 上傳檔案 |
| 呼叫既有雲函數 | bmob-mcp → invoke_cloud_function(執行);generate_code → 呼叫雲函數(curl) | REST /1/functions/<name>;各端 SDK |
| 編寫並部署雲函數原始碼 | bmob-cloud-function-development | 已配 MCP:deploy_cloud_function → invoke_cloud_function;未配 MCP:BmobDocs + 控制台 |
| ACL / 行級權限 / 9015·9016 | bmob-acl-and-roles | REST 建立/更新 body 內 "ACL":{...};bmob-error-codes |
| BQL / 跨表聚合 | bmob-bql | REST GET /1/cloudQuery;bmob-database-restful |
| 推播 / 簡訊 / 支付 | P2 skills | REST 對應模組 + BmobDocs mds 目錄樹 |
通用安全清單(被所有 sub-skill include)
- 寫入操作的目標表必須配 ACL,否則任意用戶可改任意行(參見 P1 臨時路徑中的 ACL 行)。
- 瀏覽器 / 小程式 / 行動端可用 REST API Key(簡易授權 / SDK 方式 B) 或 Secret Key + 安全碼(加密授權 / SDK 方式 A);絕不使用 Master Key。
- 加密授權場景的
SecurityCode不通過網路傳輸;不要硬編碼到前端 bundle,用環境變數注入或放進 BFF。 - 凡是 batch / 全表掃描 / 跨表查詢 → 優先使用 BQL 而不是迴圈呼叫 SDK。
- 出錯時先看回應體裡的
code欄位去查bmob-error-codes,不要亂猜。 - 用戶密碼欄位(
password)只能由 Bmob 寫入,不能 update;如需改密走/1/updateUserPassword/<objectId>。
FAQ 與反模式
- 跨平台常見問題(路由、金鑰、MCP、資料格式):
shared/faq.md - 典型反模式(ACL、Master Key、9015 誤用等):
shared/anti-patterns.md - 按英文 error 反查數字碼:
bmob-error-codes頂部「按現象反查」表
應用場景食譜
端到端場景(表設計 + ACL + 流程),再進各 platform skill 寫程式碼:
| 場景 | 食譜 |
|---|---|
| 部落格 / CMS(Article + Author) | shared/recipes/blog-cms.md |
| 用戶自有 Todo(行級 ACL) | shared/recipes/user-owned-todos.md |
| 微信小程式登入 | shared/recipes/mini-program-login.md |
| 頭像上傳 | shared/recipes/avatar-upload.md |
| 伺服器端批量遷移 | shared/recipes/server-migration.md |
| 靜態站 MCP 部署 | shared/recipes/static-site-deploy.md |
文件查找方法
各 sub-skill 的 references/snippets/(由 BmobDocs 同步提交)與手寫 references/*.md 覆蓋大部分 API。仍不夠時再 fetch 上游文件:
-
按檔案名定位:上游文件樹在 github.com/bmob/BmobDocs/tree/master/mds,按
<feature>/<platform>/組織。 -
agent 直接 fetch(繞過 GitHub 渲染層):
https://raw.githubusercontent.com/bmob/BmobDocs/master/mds/<feature>/<platform>/<filename>.md已驗證可被 WebFetch 工具直接拉為純 markdown。
-
列目錄(不知道檔案名時):
https://api.github.com/repos/bmob/BmobDocs/contents/mds/<feature>/<platform> -
仍找不到:去 https://www.bmobapp.com/docs/。
與 MCP 的協作(關鍵)
如果用戶在 IDE 裡配置了 Bmob MCP Server(見 shared/mcp-install-snippets.md),任何涉及「讀真實表結構 / 寫測試資料 / 設計 schema / 產生樣板 curl / 一鍵部署網站」的任務都應 優先 MCP,不要憑猜測寫欄位名。
tools/list共 10 個工具;agent 只呼叫其中 9 個(get_project_tables、create_table、add_single_data、update_single_data、delete_single_data、generate_code、deploy_cloud_function、invoke_cloud_function、deploy_static_site)。mcp_endpoint_mcp_post為伺服器端內部回環,不要呼叫。- 工具參數與話術對照:
bmob-mcp;操作級三通道表:shared/operation-routing.md。
flowchart LR
User[User prompt mentioning Bmob] --> Root[bmob root SKILL.md]
Root --> OpRoute[shared/operation-routing.md]
Root -->|"schema / live CRUD / deploy"| McpSkill[bmob-mcp]
Root -->|JS / Web / Mini Program| JsDb[bmob-database-javascript]
Root -->|Android / Kotlin| AndDb[bmob-database-android]
Root -->|Pure Swift SDK| SwiftDb[bmob-database-swift]
Root -->|Legacy iOS / ObjC| IosDb[bmob-database-ios]
Root -->|Flutter / Dart| FlutDb[bmob-database-flutter]
Root -->|curl / Python / Go| RestDb[bmob-database-restful]
Root -->|error code| Err[bmob-error-codes]
McpSkill -.get_project_tables.-> JsDb
McpSkill -.get_project_tables.-> AndDb
McpSkill -.get_project_tables.-> SwiftDb
McpSkill -.get_project_tables.-> IosDb
McpSkill -.get_project_tables.-> FlutDb
McpSkill -.get_project_tables.-> RestDb
一句話總結
用戶提到 Bmob → 讀本 skill 的 入口決策樹 → 路由決策表 選 sub-skill →
shared/operation-routing.md選 MCP / curl / SDK·REST;端特化程式碼在 sub-skill 的references/與 SKILL.md 裡。