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.

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

  1. Rechace claves de planes no reconocidas con 422. Consulte Claves de planes desconocidos más arriba.
  2. 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.
  3. 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.
  4. Actualización y eliminación de Shared Slot. PATCH y DELETE /shared-slots/{sharedSlot}, este último detrás de la nueva capacidad shared-slots.delete.

Nivel 2: completo

  1. Ampliar la configuración del sitio: valores predeterminados de SEO, contact_recipient_email, locale_ids. /sites/{site}/seo, /contact-recipient y /locales.
  2. Vista previa de página o instantánea de renderizado. GET /pages/{page}/render, con format=html y renderizado por configuración regional. Este tenía un alcance incorrecto cuando se escribió la lista: /webadmin/pages/{page}/preview ya 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.
  3. Creación de carpeta multimedia. GET/POST /media/folders.
  4. Capability-gate las rutas del dominio y muévalas a /webadmin/api. Listo, y update y set primary vienen 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.