API y alineación de paneles
Descripción general
El administrador del navegador en /webadmin y Internal Content API son dos puertas de entrada a los mismos datos de CMS, pero no se crearon al mismo tiempo y no cubren el mismo terreno. El panel es la superficie completa del operador. La API es una superficie deliberadamente más estrecha para herramientas de operador e inteligencia artificial confiables.
Este documento es el mapa autorizado de dónde coinciden los dos, dónde la API cubre menos y dónde la brecha es un límite deliberado en lugar de un trabajo inacabado. Existe de modo que:
- an La IA o la herramienta del operador pueden descubrir lo que no puede hacer antes de intentarlo;
- un revisor puede distinguir un límite intencional de un punto final faltante;
- el trabajo de la hoja de ruta tiene una lista única para cerrar.
Es un registro de estado, no una especificación. Cuando se envíe un punto final, actualice la fila aquí en la misma confirmación.
Cómo leer esto
Cada fila lleva un estado:
| Estado | Significado |
|---|---|
| Alineado | La API puede lograr lo que logra el panel. La forma puede diferir. |
| Parcial | Existe un punto final pero cubre menos campos o menos operaciones que el panel. |
| Desaparecido | No existe ninguna ruta API. Panel sólo por omisión, no por diseño. |
| Solo panel por diseño | Excluido deliberadamente. El motivo se registra en la fila. |
"Solo panel por diseño" no es sinónimo de "duro". Significa excluirlo de la postura de seguridad descrita en la sección Límites de Internal Content API: sin publicación automática, sin rastreo o recuperación remota, sin reemplazo arbitrario de importación/exportación y sin escalada de privilegios a través de un token.
Superficies API
La API no es un prefijo único. Una herramienta que se integra con el CMS habla con dos:
| Prefijo | Autenticación | Alcance |
|---|---|---|
| /webadmin/api | internal-api.token más una capacidad por ruta | todo |
| /admin-api | internal-api.token más una capacidad por ruta | Registros de sitio y dominio, alias heredado |
La división es histórica más que de principios. /admin-api es anterior al modelo de capacidad y sus rutas no comprobaron nada más allá de la validez del token hasta que se introdujeron domains.write y domains.delete: cualquier token válido podía agregar o eliminar un dominio. Las rutas de dominio ahora también se encuentran bajo /webadmin/api, que es hacia donde deberían apuntar las nuevas integraciones; el prefijo heredado sigue funcionando para las herramientas de aprovisionamiento existentes.
Las capacidades se definen en CmsApiTokenCapabilities. Un vacío en este documento a veces es tanto una capacidad faltante como una ruta faltante.
Pages
| Capacidad | Paneles | API | Estado |
|---|---|---|---|
| Listar y leer páginas | Sí | GET /pages, GET /pages/{page} | Alineado |
| Crear una página borrador | Sí | POST /content/apply (create_draft_page) | Alineado |
| Reemplazar el contenido del espacio en una página de borrador | Sí | POST /content/apply (replace_existing_draft_page) | Alineado |
| Actualizaciones por etapas para páginas publicadas | Sí | POST /content/apply (staged-update modes) | Alineado |
| Publicar una página | Sí | POST /pages/{page}/publish | Alineado |
| Cambiar el diseño del shell público | Sí | PATCH /pages/{page}/layout | Alineado |
| Sincronizar ranuras de diseño | Sí | POST /pages/{page}/sync-layout-slots | Alineado |
| Eliminar una página | Sí | DELETE /pages/{page} | Alineado |
| Página CSS y activos JS | Sí | /pages/{page}/assets/* | Alineado |
| Cambiar el nombre de una página o cambiar su slug o ruta | Sí | PATCH /pages/{page}/translations/{translation} | Alineado |
| Traducciones de páginas: agregar una ubicación, editar nombre, slug, ruta, SEO, Open Graph | Sí | /pages/{page}/translations/* | Alineado |
| Vista previa de una página | Sí | GET /pages/{page}/render, and /webadmin/pages/{page}/preview already took a Bearer token | Alineado |
| Versiones de página y candidatos de restauración | Sí | /pages/{page}/versions/* and /pages/{page}/version-candidates/* | Alineado: prepare una vista previa del candidato antes de presentar la solicitud cautelosa |
| Agregar, eliminar o reordenar un espacio de página | Sí | Sólo sync-layout-slots y fuente de ranura | Parcial |
| Borrar todos los bloques en un espacio de página | Sí | Shared Slots tiene clear; las páginas no | Parcial |
| Duplicar una página | Sí | Ninguno | desaparecido |
| Mover una página a otro sitio | Sí | Ninguno | desaparecido |
| Importar una página desde JSON | Sí | Ninguno | desaparecido |
| HTML conversor de páginas a bloques | Sí | Ninguno | desaparecido |
| Eliminar páginas en masa | Sí | Solo eliminación única | Parcial |
| Transiciones de flujo de trabajo distintas de la publicación | Sí | Ninguno | Desaparecido |
Los dos que solían dominar esta lista están cerrados.
Identidad de página y traducción de páginas. create_draft_page escribe name, slug y path en una fila de traducción de página para una configuración regional, y hasta que la API de traducción de páginas aterrizó, nada podía tocar esa fila después: los modos de reemplazo y actualización por etapas. normalice page a null y solo maneje el contenido de la ranura. Una página creada en la ruta incorrecta solo se podía arreglar eliminándola y volviéndola a crear, ninguna página podía obtener una segunda ubicación y el SEO a nivel de página (seo_title, seo_description, seo_keywords, og_title, og_description, og_image_media_id, todos los cuales se encuentran en esa fila) no se podía escribir y faltaba. leer también las cargas útiles.
/pages/{page}/translations/* ahora lo cubre todo, y debido a que el título y el slug Page leen la traducción predeterminada, al cambiar el nombre de esa traducción se cambia el nombre de la página. Consulte Localization para saber por qué estos campos pertenecen a la fila de traducción y Internal Content API para el contrato de escritura.
Los valores predeterminados de SEO a nivel de sitio aún son inalcanzables, por otra razón; consulte los sitios a continuación.
Blocks
| Paneles | API | Estado | |
|---|---|---|---|
| Listar y leer bloques | Sí | GET /blocks, GET /blocks/{block} | Alineado |
| Crear un bloque en un espacio de página | Sí | POST /pages/{page}/slots/{slot}/blocks | Alineado |
| Actualizar el contenido y la configuración del bloque | Sí | PATCH /blocks/{block} | Alineado |
| Reordenar bloques | Sí | PATCH /pages/{page}/slots/{slot}/blocks/reorder | Alineado |
| Eliminar un bloque | Sí | DELETE /pages/{page}/slots/{slot}/blocks/{block} | Alineado |
| Autor bloques html | Sí | Rechazado con block_type_not_api_writable | Solo panel por diseño: el marcado sin procesar permanece revisado por humanos |
Desde 1.91.0, ocho bloques de medios nativos también exponen mobile_media_id en planes y PATCH, con la misma selección y respaldo que el panel. Ver Variantes de imágenes multimedia.
Blocks son el área mejor alineada del CMS. Las escrituras de configuración también están restringidas por BlockSettingsPatchPolicy, que es una protección en lugar de un espacio.
Ranuras Compartidas
| Capacidad | Paneles | API | Estado |
|---|---|---|---|
| Listar, leer, crear | Sí | GET/POST /shared-slots | Alineado |
| Bloquear crear, reordenar, eliminar, borrar | Sí | /shared-slots/{sharedSlot}/blocks/* | Alineado |
| Publicar bloques Shared Slot | Sí | POST /shared-slots/{sharedSlot}/publish-blocks | Alineado |
| Asignar un Shared Slot a un espacio de página | Sí | POST /pages/{page}/slots/{slot}/shared-slot | Alineado |
| Actualizar un Shared Slot (etiqueta, identificador, tipo de ranura, diseño, estado activo) | Sí | PATCH /shared-slots/{sharedSlot} | Alineado |
| Eliminar un Shared Slot | Sí | DELETE /shared-slots/{sharedSlot} | Alineado |
| Mover un Shared Slot a otro sitio | Sí | Rechazado con unsupported_shared_slot_fields | Solo panel por diseño: un movimiento entre sitios, no un cambio de nombre |
| Revisiones Shared Slot: listar, mostrar, restaurar | Sí | Ninguno | desaparecido |
La eliminación requiere la capacidad destructiva shared-slots.delete y se niega a eliminar un Shared Slot de cualquier ranura de página a la que aún se haga referencia, enumerando las ranuras de referencia para que una herramienta pueda separarlas primero.
Media
| Capacidad | Paneles | API | Estado |
|---|---|---|---|
| Listar, leer, cargar, buscar control remoto | Sí | /media, /media/fetch | Alineado |
| Actualizar metadatos descriptivos | Sí | PATCH /media/{media} | Alineado |
| Reemplazar, mover, eliminar | Sí | /media/{media}/replace, /move, DELETE | Alineado |
| Crear una carpeta multimedia | Sí | POST /media/folders | Alineado |
| Regenerar transformaciones de imagen | Sí | Ninguno | desaparecido |
| Eliminación masiva | Sí | Solo eliminación única | Parcial |
| Cambie los campos de almacenamiento, binario o carpeta a través de PATCH | Sí | Rechazado con unsupported_media_update_fields | Solo panel por diseño: las escrituras de metadatos no deben mover bytes |
POST /media/folders rechaza un nombre que ya existe bajo el mismo padre y devuelve la carpeta existente, por lo que una herramienta de reintento lo reutiliza en lugar de acumular duplicados.
Navigation
| Capacidad | Paneles | API | Estado |
|---|---|---|---|
| Listar y leer menús | Sí | /navigation-menus | Alineado |
| Crear un menú | Sí | POST /navigation-menus | Alineado |
| Crear, actualizar, reordenar y eliminar elementos | Sí | /navigation-menus/{menu}/items/* | Alineado |
| Eliminar un menú completo | Sí | Ninguno | desaparecido |
| Eliminar un elemento que tenga hijos | Sí | Rechazado hasta que los niños sean manipulados | Diseño exclusivo de panel: sin cascada silenciosa |
Compromiso y mensajes
| Capacidad | Paneles | API | Estado |
|---|---|---|---|
| Leer comentarios y calificaciones | Sí | /engagement/comments, /engagement/ratings | Alineado |
| Estado de comentario moderado | Sí | PATCH /engagement/comments/{comment} | Alineado |
| Eliminar un comentario | Sí | Ninguno | desaparecido |
| Mensajes del formulario de contacto: listar, leer, estado, eliminar | Sí | Ninguno | Desaparecido |
Los mensajes de contacto no tienen ninguna representación API. Una herramienta puede crear un formulario de contacto a través de la API, pero no puede leer sus envíos ni saber dónde se entregan; consulte Sites.
Sitios y configuración
El formulario del sitio del panel escribe más de veinte campos. La API los cubre a través de puntos finales estrechos de propósito único: branding, head, timezone, public-theme, seo, contact-recipient y locales.
| Campo o capacidad | Paneles | API | Estado |
|---|---|---|---|
| Nombre para mostrar, eslogan, favicon, imagen social, paleta de marca, fuentes | Sí | PATCH /sites/{site}/branding | Alineado |
| Cabezal personalizado HTML | Sí | PATCH /sites/{site}/head | Alineado |
| Zona horaria | Sí | PATCH /sites/{site}/timezone | Alineado |
| Tema público preestablecido | Sí | POST /sites/{site}/public-theme | Alineado |
| Sitio CSS y archivos de anulación JS | Sí | /sites/{site}/assets/{type} | Alineado |
| Valores predeterminados de SEO del sitio (seo_title, seo_description, seo_keywords) | Sí | PATCH /sites/{site}/seo | Alineado |
| Correo electrónico del destinatario de contacto | Sí | PATCH /sites/{site}/contact-recipient | Alineado |
| Asignación de configuración regional (locale_ids) | Sí | PUT /sites/{site}/locales | Alineado – más estricto: se niega a separar una ubicación con traducciones de páginas |
| Nombre y identificador del sitio | Sí | Ninguno | desaparecido |
| Bandera del sitio primario | Sí | Ninguno | desaparecido |
| Variables del sitio | Sí | Ninguno | desaparecido |
| Crear o eliminar un sitio | Sí | Ninguno | Solo panel por diseño: site_create es una clave de plan prohibida |
| Clonar un sitio | Sí | Ninguno | Solo panel por diseño: la duplicación de todo el sitio es propiedad del operador |
| Promocionar un sitio | Sí | Ninguno | Solo panel por diseño: consulte Operaciones |
| Exportación e importación de sitios | Sí | Ninguno | Panel únicamente por diseño: la sustitución arbitraria de importaciones está fuera de alcance |
| Dominios: enumerar, agregar, actualizar, establecer principal, eliminar, estado | Sí | /webadmin/api/sites/{site}/domains/* | Alineado |
Lo que falta aquí es la identidad del sitio (nombre, identificador, indicador principal) y las variables del sitio. Están más cerca del aprovisionamiento que del contenido, y ninguna herramienta los ha necesitado todavía.
Esquema y definiciones
Todo lo que hay en este grupo se puede leer y nada se puede escribir.
| Capacidad | Paneles | API | Estado |
|---|---|---|---|
| Diseños de página: creación, actualización, gestión de espacios | Sí | GET /page-layouts only | Parcial: solo lectura |
| Tipos de bloques: crear, actualizar, eliminar | Sí | GET /block-types only | Parcial: solo lectura |
| Tipos de tragamonedas | Lista de sólo lectura | Ninguno | Desaparecido, ni siquiera legible |
| Configuraciones regionales: crear, actualizar, habilitar, deshabilitar | Sí | POST /locales, PATCH /locales/{locale} | Alineado |
| Configuraciones regionales: eliminar | Sí | Ninguno | desaparecido |
| Catálogo de iconos: leer | Sí | GET /icon-catalog | Alineado |
| Catálogo de iconos: sincronización y activación | Sí | Ninguno | Desaparecido |
El acceso al esquema de solo lectura es defendible: los tipos y diseños de bloques son contratos estructurales, y permitir que un token los invente amplía el radio de explosión de cada escritura de contenido posterior. Se registra como Parcial en lugar de por diseño porque dicha decisión no está escrita en ninguna parte.
Usuarios, sistema y operaciones
| Paneles | API | Estado | |
|---|---|---|---|
| Gestión de usuarios | Sí | Ninguno | Solo panel por diseño: sin escalada de privilegios a través de un token |
| Gestión de tokens API | Sí | Ninguno | Solo panel por diseño: un token no debe acuñar tokens |
| Configuración del sistema y prueba de correo | Sí | Ninguno | Solo panel por diseño: la configuración de toda la instalación es propiedad del operador |
| Creación de punto de restauración de copia de seguridad | Sí | Brazos backups.create create_restore_point sobre POST /content/apply | Alineados para esta operación estrecha |
| Restauración y descarga de copias de seguridad | Sí | Ninguno | Solo panel por diseño |
| Vista previa y ejecución de la limpieza de copia de seguridad | Sí | GET /system/backup-cleanup, POST /system/backup-cleanup/run | Alineado con backups.read y backups.delete otorgados por separado |
| Verifique y ejecute una actualización del sistema | Sí | /system/updates/check, POST /system/updates, /system/updates/operations/{operation} | Alineado desde 1.90.0: token del sistema en toda la instalación y aprobación explícita de versión/suma de verificación; ver actualizaciones |
| Reconstruir el índice de búsqueda | Sí | Ninguno | desaparecido |
| Informes de visitantes | Sí | Ninguno | desaparecido |
| Complementos: exploración e instalación del catálogo, habilitar, deshabilitar, configurar, desinstalar, cargar ZIP | Sí | /plugins/* | Alineado |
| Complementos: actualice un complemento instalado del catálogo | Sí | POST /plugins/catalog/{plugin}/update | Alineado |
| Complementos: lea el detalle de un complemento | Sí | Solo index | Parcial |
Transversal: Claves del plan desconocidas
Hasta que esto se solucionó, todos los espacios en este documento estaban en silencio por parte de la persona que llama.
POST /content/validate y POST /content/apply rechazaron una lista fija de claves prohibidas (claves de publicación y programación, creación de sitios, recuperación remota y verbos destructivos), pero nada simplemente no reconocido. La normalización del plan leyó las claves que conocía e ignoró el resto, por lo que un plan que llevaba page.seo_title devolvió ok: true y un 201 no había escrito nada de eso. Una herramienta informó éxito; no había pasado nada. La lectura de la página tampoco lo reveló, porque los campos que la API no puede escribir tampoco están presentes en sus cargas útiles de lectura.
ULas claves no reconocidas ahora se rechazan con 422 y el código estable unsupported_plan_fields, y la ruta de error nombra cada campo rechazado. El conjunto de claves aceptado tiene como ámbito el plan mode: replace_slots es significativo al reemplazar una página y se rechaza al crear una.
Esto no cierra ningún vacío a continuación. Los hace reconocibles, que es el requisito previo para que una herramienta pueda recurrir al panel en lugar de informar una escritura que nunca ocurrió.
Hoja de ruta
Ordenados por cuánto desbloquea cada uno, no por esfuerzo.
Nivel 1: completo
Rechace claves de planes no reconocidas conConsulte Claves de planes desconocidos más arriba.422.Punto final de escritura de traducción de página./pages/{page}/translations/*escribe el nombre, slug, ruta, SEO y Open Graph, y los vuelve a leer.Actualización de identidad de página.Se entrega con 2: título, slug y ruta son campos de traducción, y la traducción de la configuración regional predeterminada es la propia identidad de la página.- Actualización y eliminación de
Shared Slot.PATCHyDELETE /shared-slots/{sharedSlot}, este último detrás de la nueva capacidadshared-slots.delete.
Nivel 2: completo
Ampliar la configuración del sitio: valores predeterminados de SEO,contact_recipient_email,locale_ids./sites/{site}/seo,/contact-recipienty/locales.Vista previa de página o instantánea de renderizado.GET /pages/{page}/render, conformat=htmly renderizado por configuración regional. Este tenía un alcance incorrecto cuando se escribió la lista:/webadmin/pages/{page}/previewya aceptaba un token de portador, por lo que la brecha era la capacidad de descubrimiento y la selección de ubicación, no la capacidad de renderizar en absoluto.Creación de carpeta multimedia.GET/POST /media/folders.Capability-gate las rutas del dominio y muévalas aListo, y/webadmin/api.updateyset primaryvienen con él.
Lo que queda
Todo lo que todavía está marcado como Faltante arriba es de segundo orden: duplicación de páginas y movimientos de sitios, operaciones masivas, el convertidor de bloque a HTML, eliminación de comentarios, mensajes de contacto, creación de esquemas, reindexación de búsqueda e informes de visitantes. Ninguno de ellos impide que una herramienta cree, verifique, corrija y publique una página, que es de lo que se trataban los Niveles 1 y 2. Elija entre ellos según la demanda en lugar de seguir la lista.
Nivel 3: límites deliberados
Usuarios, emisión de tokens, configuración del sistema, restauración/descarga de copias de seguridad, creación y eliminación de sitios, clonación, promoción y transferencia solo en el panel Stay. Las actualizaciones del sistema están disponibles a través de capacidades API para toda la instalación otorgadas por separado desde 1.90.0. Se enumeran aquí para que "no en la API" sea una decisión registrada en lugar de una ausencia no examinada.
Ciclo de vida y recuperación del complemento hasta 1.94.2
Desde 1.92.0, la instalación/actualización/activación del panel y API aplican los cambios requeridos en la base de datos del complemento automáticamente y mantienen un estado deshabilitado después de una falla. Habilitar/configurar utiliza la misma puerta de compatibilidad; Las solicitudes incompatibles devuelven HTTP 409 y plugin_incompatible. A partir de la versión 1.94.0, la validación de inicio se ejecuta en un proceso nuevo antes de la activación, las actualizaciones exitosas conservan el paquete anterior y las fallas de ruta/fuente de tiempo de ejecución ponen en cuarentena el complemento.
La recuperación en /webadmin/plugin-recovery es una superficie de panel autenticada separada. CMS 1.94.2 requiere un Super admin activo con acceso de administrador normal. Puede deshabilitar un complemento administrado defectuoso o restaurar el paquete retenido solo cuando no se ejecutó ninguna migración de base de datos. El acceso token a /plugins/* no reemplaza esta autoridad de recuperación del navegador. Ver Sistema de complementos.