La API del admin del CMS de Total.js: gestiona un sitio desde código, copia de seguridad y restauración
Todo lo que hace la interfaz del admin pasa por un único endpoint: POST /admin/ con el cuerpo { "schema": "<name>", "data": { ... } } (las rutas API de Total.js, consulta rutas API). La dirección sale de la línea $api : /admin/ del archivo config. Autentícate con la cookie de sesión (POST /admin/ con schema: "login" y el login y el password), con la cabecera x-token o mediante OpenPlatform (instalación y primer arranque).
Las acciones
| Plugin | Llamadas (schema) | Permiso |
|---|---|---|
| Account | login, logout, admin_read, admin_save (nombre, login, contraseña), account | la sesión |
| Pages | pages_list, pages_read, pages_save, pages_clone, pages_remove, pages_links, pages_html (lee el HTML), pages_save_html (id, html, hasta 5 MB), pages_copy (from, to) | pages |
| Layouts | layouts_list, layouts_read, layouts_save, layouts_clone, layouts_remove, layouts_html, layouts_save_html, layouts_import | layouts |
| Widgets | widgets_list, widgets_read, widgets_save, widgets_remove, widgets_detail | widgets |
| Navigation | nav_list, nav_read, nav_save, nav_remove, nav_editor | navigation |
| Redirects | redirects_list, redirects_read, redirects_save (url, target, permanent), redirects_remove | redirects |
| Variables | variables_read, variables_save (vars) | variables |
| Posts | posts, posts_read, posts_create, posts_update, posts_remove, posts_clear, posts_categories | posts |
| Files | files_list, files_rename, files_clear, files_remove, y las subidas de más abajo | files |
| Settings | settings_read, settings_save, settings_test (prueba los ajustes SMTP), chatgpt | settings |
| Dashboard | dashboard_online, dashboard_referers, dashboard_browsers, dashboard_pages, dashboard_stats | ninguno |
El permiso admin (y todo usuario con la marca sa, incluido el Bot del token) tiene acceso a todos. Una llamada sin permiso recibe un error, y login es la única llamada que no necesita sesión.
Crea una página y su contenido:
{ "schema": "pages_save", "data": { "name": "About", "layoutid": "<layout id>", "url": "/about/", "title": "About us" } }
{ "schema": "pages_save_html", "data": { "id": "<page id>", "html": "<h1>About us</h1>" } }pages_save responde { "success": true }; lee el id con pages_list. En un layout, layouts_save responde el id del layout en value. Cuando falta un campo en una actualización, el campo se borra (un title que no envíes se guarda vacío), así que envía el registro completo.
Subir archivos
POST /admin/upload/ acepta una subida multipart (hasta 10 MB) y POST /admin/upload/base64/ un cuerpo JSON con un data URI (png, jpeg o gif). Ambos responden una lista de { id, name, type, ext, size, url }, donde url es /download/<id>.<ext>.
Copia de seguridad, restauración y borrado
Tres rutas de controllers/api.js actúan sobre todo el sitio y necesitan el permiso admin:
| Ruta | Qué hace |
|---|---|
GET /admin/backup/ | descarga todo el almacén de archivos (metadatos, HTML de páginas y layouts, archivos y posts) como un archivo de texto con el nombre del sitio y la fecha |
POST /admin/restore/ | sube un archivo así (hasta 100 MB) y lo carga. |
GET /admin/clear/ | borra el contenido del sitio. Descarta el almacén de archivos y lo vuelve a cargar, así que páginas, layouts, widgets y el resto se elimina |
Haz una copia de seguridad antes de probar cualquiera de ellas, no abras nunca /admin/clear/ en un navegador por curiosidad y mantén el token privado: con él, un solo GET vacía el sitio.