Bmob 后端云 — Punto de Entrada Global
Bmob es una plataforma BaaS (Backend as a Service) que proporciona capacidades de backend listas para usar, como bases de datos NoSQL, sistema de usuarios, almacenamiento de archivos, funciones en la nube, notificaciones push, SMS, pagos, IM e IA. La cobertura de clientes incluye JavaScript / Android / iOS / Swift / Flutter / HarmonyOS / Mini programas / Python / Go / PHP / C#, además de la REST API independiente del lenguaje y el MCP Server.
Orden de enrutamiento: Primero sigue el Árbol de Decisión de Entrada a continuación → luego consulta la Tabla de Decisión de Enrutamiento (selecciona el sub-skill) → las operaciones específicas se encuentran en shared/operation-routing.md (tabla de tres canales: MCP / curl / SDK·REST).
Principios Fundamentales
1. Siempre confirma la plataforma antes de escribir código. Las API del SDK de Bmob varían mucho entre plataformas (JS es Bmob.Query, Android es extends BmobObject, iOS antiguo es BmobObject objectWithClassName, Swift puro es try await BmobObject.save(), REST es HTTP /1/classes/<name>). No insertes código de JS en una respuesta del skill de Android. Primero verifica qué plataforma/framework usa el usuario, luego lee el sub-skill correspondiente.
2. No filtres la Master Key en el frontend. La consola de Bmob → Claves de aplicación tiene cuatro valores:
| Clave | Nivel de Seguridad | Escenario de Uso |
|---|---|---|
| Application ID | Público | Todos los extremos |
| REST API Key | Semipúblico | Navegador / Mini programas / Móvil / Servidor |
| Secret Key | Medio | Cliente en escenarios de autorización cifrada, junto con SecurityCode |
| Master Key | Máximo | Solo servidor / scripts de backend, nunca aparece en el bundle del frontend |
3. Revisa el changelog antes de escribir. El SDK evoluciona y las firmas de los métodos pueden cambiar. Antes de comenzar una tarea, usa la URL raw para obtener el update_log.md de la plataforma correspondiente (la ruta está en metadata.docs_raw del sub-skill) para confirmar que no haya cambios disruptivos.
4. No reintentes errores en bucle. Después de 2-3 intentos fallidos, detente y reevalúa:
- HTTP 4xx: primero verifica el
codeen el cuerpo de la respuesta enbmob-error-codes. - Errores de permisos/ACL (9015, 9016, etc.): consulta la Ruta Temporal P1 a continuación o el futuro
bmob-acl-and-roles. - "Método no encontrado": puede ser que la versión del SDK sea demasiado antigua o que la documentación no coincida con tu versión; compara en la página de releases del repositorio.
Árbol de Decisión de Entrada (Empieza aquí)
flowchart TD
Start([Usuario menciona Bmob]) --> Err{¿La respuesta contiene un código de error?}
Err -->|Sí| EC[bmob-error-codes]
Err -->|No| Ship{¿El código se va a incluir en la versión de lanzamiento de la aplicación?}
Ship -->|No| McpCfg{¿El IDE ya tiene configurado MCP de Bmob?}
McpCfg -->|Sí| MCP[bmob-mcp<br/>9 herramientas invocables]
McpCfg -->|No| RestOnly[bmob-database-restful<br/>o generate_code necesita MCP]
Ship -->|Sí| Plat{¿Plataforma / Lenguaje?}
Plat -->|JS Web Node Mini Programa Cocos JS etc| 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 Backend etc| REST[bmob-database-restful]
Plat -->|RN Uni-app JS Bridge| JS
JS --> Schema{¿Necesita los nombres reales de los campos de la tabla?}
AND --> Schema
SWIFT --> Schema
IOS --> Schema
FLUT --> Schema
REST --> Schema
Schema -->|Sí y MCP configurado| MCP
Schema -->|No| Done([Lee el sub-skill correspondiente y escribe el código])
MCP --> OpTable[[shared/operation-routing.md<br/>Tabla de tres canales a nivel de operación]]
Tabla de Decisión de Enrutamiento (Ve a leer el sub-skill correspondiente inmediatamente)
| Intención del Usuario | Pista de Plataforma | Enrutar a |
|---|---|---|
| Crear/ver estructura de tabla, añadir datos de prueba, generar plantillas curl, operar la base de datos | — | bmob-mcp (Requisito: el usuario ya ha configurado MCP) |
| Despliegue de sitio web estático / alojamiento estático (HTML o dist en CDN) con un solo clic | — | bmob-mcp → deploy_static_site (o generate_code solo para generar curl) |
| CRUD NoSQL, consultas condicionales | JS / TS / Web / Node / Mini programas de WeChat/Alipay/ByteDance/QQ/Baidu / Quick Apps / Cocos Creator JS / Electron / Tauri / Apps híbridas | bmob-database-javascript |
| CRUD NoSQL | Android / Kotlin / Java | bmob-database-android |
| CRUD NoSQL | SDK Swift puro / BmobSwiftSDK / SPM / import BmobSDK / async/await | bmob-database-swift |
| CRUD NoSQL | SDK iOS antiguo / Objective-C / Swift Bridging Header / BmobSDK.xcframework / saveInBackground | bmob-database-ios |
| CRUD NoSQL | Flutter / Dart (bmob_plugin) | bmob-database-flutter |
| CRUD NoSQL / cualquier lenguaje sin SDK | curl / Python / Go / PHP / C# / Rust / Ruby / Java backend | bmob-database-restful |
| React Native / Uni-app (capa JS que se conecta a Bmob) | — | bmob-database-javascript o REST |
| HarmonyOS ArkTS | — | bmob-database-restful + BmobDocs |
| Registro de usuario / Inicio de sesión / Verificación SMS / Inicio de sesión de terceros / Verificación por correo | Varios extremos | bmob-auth-{platform} (P1, ver tabla abajo) |
| Carga/Descarga de archivos / CDN | Varios extremos | bmob-storage-{platform} (P1, ver tabla abajo) |
| Llamar a una función en la nube | Varios extremos | bmob-cloud-function-{platform} (P1, ver tabla abajo) |
| Escribir código de función en la nube que se ejecuta en el servidor de Bmob | — | bmob-cloud-function-development |
| ACL / Roles / Permisos / Seguridad a nivel de fila | — | bmob-acl-and-roles (P1, ver tabla abajo) |
| Consultas BQL (sintaxis similar a SQL) | Cualquiera | bmob-bql (P1, ver tabla abajo) |
| Solucionar errores con código 9015 / 101 / 105 etc. | — | bmob-error-codes |
| Notificaciones push / SMS / Pagos | Varios extremos | bmob-push-* / bmob-sms-* / bmob-pay-* (P2) |
Para operaciones específicas (CRUD, inicio de sesión, carga, despliegue), consulta qué canal usar en shared/operation-routing.md.
Rutas Temporales cuando P1 / P2 aún no se han publicado
Cuando el sub-skill especializado no está instalado, no esperes sin hacer nada, degrada según esta tabla:
| Intención del Usuario | Skill objetivo (no publicado) | Alternativa actual disponible |
|---|---|---|
| Registro / Inicio de sesión / Código de verificación SMS | bmob-auth-* | REST: bmob-database-restful/references/users.md; MCP configurado: generate_code (registro / inicio de sesión con usuario y contraseña / inicio de sesión con código de verificación móvil etc.) |
| Carga de archivos / URL CDN | bmob-storage-* | REST: references/files.md; MCP: generate_code → cargar archivo |
| Llamar a una función en la nube existente | bmob-mcp → invoke_cloud_function (ejecución); generate_code → llamar a la función en la nube (curl) | REST /1/functions/<name>; SDK de cada extremo |
| Escribir y desplegar código fuente de función en la nube | bmob-cloud-function-development | MCP configurado: deploy_cloud_function → invoke_cloud_function; MCP no configurado: BmobDocs + consola |
| ACL / Permisos a nivel de fila / 9015·9016 | bmob-acl-and-roles | REST crear/actualizar cuerpo con "ACL":{...}; bmob-error-codes |
| BQL / Agregación entre tablas | bmob-bql | REST GET /1/cloudQuery; bmob-database-restful |
| Notificaciones push / SMS / Pagos | Skills P2 | Módulos REST correspondientes + árbol de directorios mds de BmobDocs |
Lista de Verificación de Seguridad General (Incluida por todos los sub-skills)
- La tabla de destino de las operaciones de escritura debe tener ACL configuradas; de lo contrario, cualquier usuario puede modificar cualquier fila (consulta la fila de ACL en las Rutas Temporales P1).
- Navegador / Mini programas / Móvil pueden usar REST API Key (autorización simple / SDK modo B) o Secret Key + SecurityCode (autorización cifrada / SDK modo A); nunca uses la Master Key.
- En escenarios de autorización cifrada,
SecurityCodeno se transmite a través de la red; no lo codifiques en el bundle del frontend, usa variables de entorno o inyéctalo en un BFF. - Para operaciones batch / escaneo de tabla completa / consultas entre tablas → prioriza BQL en lugar de llamadas en bucle al SDK.
- Cuando ocurra un error, primero verifica el campo
codeen el cuerpo de la respuesta consultandobmob-error-codes, no adivines. - El campo de contraseña de usuario (
password) solo puede ser escrito por Bmob, no se puede actualizar; para cambiar la contraseña, usa/1/updateUserPassword/<objectId>.
FAQ y Antipatrones
- Preguntas frecuentes entre plataformas (enrutamiento, claves, MCP, formato de datos):
shared/faq.md - Antipatrones típicos (ACL, Master Key, mal uso de 9015, etc.):
shared/anti-patterns.md - Buscar código numérico por mensaje de error en inglés: Tabla "Buscar por Fenómeno" en la parte superior de
bmob-error-codes
Recetas de Escenarios de Aplicación
Escenarios de extremo a extremo (diseño de tabla + ACL + flujo), luego entra en el skill de la plataforma para escribir código:
| Escenario | Receta |
|---|---|
| Blog / CMS (Article + Author) | shared/recipes/blog-cms.md |
| Todo del usuario (ACL a nivel de fila) | shared/recipes/user-owned-todos.md |
| Inicio de sesión en Mini Programa WeChat | shared/recipes/mini-program-login.md |
| Carga de avatar | shared/recipes/avatar-upload.md |
| Migración por lotes del servidor | shared/recipes/server-migration.md |
| Despliegue de sitio estático con MCP | shared/recipes/static-site-deploy.md |
Método de Búsqueda de Documentación
Los references/snippets/ de cada sub-skill (sincronizados desde BmobDocs) y los references/*.md escritos a mano cubren la mayoría de las API. Si aún no es suficiente, busca la documentación upstream:
-
Localización por nombre de archivo: El árbol de documentos upstream está en github.com/bmob/BmobDocs/tree/master/mds, organizado por
<feature>/<platform>/. -
Fetch directo del agente (sin pasar por la capa de renderizado de GitHub):
https://raw.githubusercontent.com/bmob/BmobDocs/master/mds/<feature>/<platform>/<filename>.mdSe ha verificado que la herramienta WebFetch puede obtenerlo directamente como markdown plano.
-
Listar directorio (cuando no se sabe el nombre del archivo):
https://api.github.com/repos/bmob/BmobDocs/contents/mds/<feature>/<platform> -
Si aún no se encuentra: Ve a https://www.bmobapp.com/docs/.
Colaboración con MCP (Clave)
Si el usuario ha configurado el servidor MCP de Bmob en el IDE (consulta shared/mcp-install-snippets.md), cualquier tarea que implique "leer la estructura real de la tabla / escribir datos de prueba / diseñar esquema / generar plantilla curl / desplegar sitio web con un solo clic" debe priorizar MCP, no adivines los nombres de los campos.
tools/listtiene 10 herramientas; el agente solo llama a 9 de ellas (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_postes un bucle interno del servidor, no lo llames.- Parámetros de las herramientas y frases de referencia:
bmob-mcp; Tabla de tres canales a nivel de operación:shared/operation-routing.md.
flowchart LR
User[Prompt del usuario mencionando Bmob] --> Root[bmob root SKILL.md]
Root --> OpRoute[shared/operation-routing.md]
Root -->|"schema / CRUD en vivo / deploy"| McpSkill[bmob-mcp]
Root -->|JS / Web / Mini Programa| JsDb[bmob-database-javascript]
Root -->|Android / Kotlin| AndDb[bmob-database-android]
Root -->|SDK Swift puro| 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 -->|código de error| 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
Resumen en una Frase
El usuario menciona Bmob → Lee el Árbol de Decisión de Entrada de este skill → Tabla de Decisión de Enrutamiento para seleccionar el sub-skill →
shared/operation-routing.mdpara elegir MCP / curl / SDK·REST; el código específico de la plataforma está enreferences/y SKILL.md del sub-skill.