e allineamento del pannello

Panoramica

L'amministratore del browser in /webadmin e Internal Content API sono due porte d'ingresso sugli stessi dati CMS, ma non sono stati creati contemporaneamente e non coprono lo stesso terreno. Il pannello costituisce la superficie operatore completa. L'API è una superficie volutamente più ristretta per strumenti operatore e IA affidabili.

Questo documento è la mappa autorevole di dove i due concordano, dove l'API copre meno e dove il divario è un confine deliberato piuttosto che un lavoro incompiuto. Esiste così che:

  • uno strumento AI o operatore può scoprire cosa non può fare prima di provare;
  • un revisore può distinguere un confine intenzionale da un punto finale mancante;
  • Il lavoro della roadmap ha un unico elenco da chiudere.

È un record di stato, non una specifica. Quando un endpoint viene spedito, aggiorna la riga qui nello stesso commit.

Come leggerlo

Ogni riga porta uno stato:

Stato Significato
Allineato L'API può realizzare ciò che realizza il pannello. La forma può differire.
Parziale Un endpoint esiste ma copre meno campi o meno operazioni rispetto al pannello.
Mancante Non esiste alcun percorso API. Solo pannello per omissione, non per progettazione.
Design solo a pannello Deliberatamente escluso. Il motivo è registrato nella riga.

"Panel-only by design" non è sinonimo di "hard". Significa escludere che si tratti della strategia di sicurezza descritta nella sezione Confini di Internal Content API: nessuna pubblicazione automatica, nessuna scansione o recupero remoto, nessuna sostituzione arbitraria di importazione/esportazione e nessuna escalation di privilegi tramite un token.

Superfici API

L'API non è un singolo prefisso. Uno strumento che si integra con il CMS parla con due:

Prefisso Aut. Ambito
/webadmin/api internal-api.token più una funzionalità per percorso Tutto
/admin-api internal-api.token più una funzionalità per percorso Record del sito e del dominio, alias legacy

La scissione è storica piuttosto che di principio. /admin-api è antecedente al modello di capacità e i suoi percorsi non controllavano nulla oltre alla validità del token fino all'introduzione di domains.write e domains.delete: qualsiasi token valido poteva aggiungere o rimuovere un dominio. I percorsi del dominio ora risiedono anche sotto /webadmin/api, che è dove dovrebbero puntare le nuove integrazioni; il prefisso legacy continua a funzionare per gli strumenti di provisioning esistenti.

Le funzionalità sono definite in CmsApiTokenCapabilities. Una lacuna in questo documento a volte è una capacità mancante tanto quanto un percorso mancante.

Pages

Capacità Pannello API Stato
Elenca e leggi le pagine Sì GET /pages, GET /pages/{page} Allineato
Crea una bozza di pagina Sì POST /content/apply (create_draft_page) Allineato
Sostituisci il contenuto dello slot in una bozza di pagina Sì POST /content/apply (replace_existing_draft_page) Allineato
Aggiornamenti graduali per le pagine pubblicate Sì POST /content/apply (staged-update modes) Allineato
Pubblica una pagina Sì POST /pages/{page}/publish Allineato
Modificare il layout della shell pubblica Sì PATCH /pages/{page}/layout Allineato
Sincronizza gli slot del layout Sì POST /pages/{page}/sync-layout-slots Allineato
Elimina una pagina Sì DELETE /pages/{page} Allineato
Pagina CSS e risorse JS Sì /pages/{page}/assets/* Allineato
Rinominare una pagina o modificarne lo slug o il percorso Sì PATCH /pages/{page}/translations/{translation} Allineato
Traduzioni della pagina: aggiungi una locale, modifica nome, slug, percorso, SEO, Open Graph Sì /pages/{page}/translations/* Allineato
Anteprima di una pagina Sì GET /pages/{page}/render, and /webadmin/pages/{page}/preview already took a Bearer token Allineato
Versioni della pagina e candidati al ripristino Sì /pages/{page}/versions/* and /pages/{page}/version-candidates/* Allineato: prepara un candidato in anteprima prima della candidatura protetta
Aggiungi, rimuovi o riordina uno spazio di pagina Sì Solo sync-layout-slots e sorgente slot Parziale
Cancella ogni blocco in uno slot di pagina Sì Shared Slots hanno clear; le pagine non Parziale
Duplica una pagina Sì Nessuno Mancante
Spostare una pagina in un altro sito Sì Nessuno Mancante
Importa una pagina da JSON Sì Nessuno Mancante
HTML convertitore di pagine da blocco Sì Nessuno Mancante
Elimina pagine in blocco Sì Solo eliminazione singola Parziale
Transizioni del flusso di lavoro diverse dalla pubblicazione Sì Nessuno Mancante

I due che dominavano questo elenco sono chiusi.

Identità della pagina e traduzioni della pagina. create_draft_page scrive name, slug e path su una riga di traduzione della pagina per una lingua e fino a quando l'API di traduzione della pagina non è arrivata, nulla potrebbe toccare quella riga in seguito: la sostituzione e Le modalità di aggiornamento graduale normalizzano page in null e gestiscono solo il contenuto dello slot. Una pagina creata nel percorso sbagliato poteva essere corretta solo eliminandola e ricreandola, nessuna pagina poteva ottenere una seconda localizzazione e il SEO a livello di pagina - seo_title, seo_description, seo_keywords, og_title, og_description, og_image_media_id, che vivono tutti su quella riga - era non scrivibile e mancante anche dai payload di lettura.

/pages/{page}/translations/* ora copre tutto e poiché il titolo e lo slug Page leggono la traduzione predefinita, rinominare quella traduzione rinomina la pagina. Vedere Localizzazione per il motivo per cui questi campi appartengono alla riga di traduzione e Internal Content API per il contratto di scrittura.

Le impostazioni predefinite SEO a livello di sito sono ancora irraggiungibili, per un motivo separato; vedere Siti di seguito.

Blocks

Funzionalità Pannello API Stato
Elenca e leggi i blocchi Sì GET /blocks, GET /blocks/{block} Allineato
Crea un blocco in uno slot di pagina Sì POST /pages/{page}/slots/{slot}/blocks Allineato
Aggiorna contenuto e impostazioni del blocco Sì PATCH /blocks/{block} Allineato
Riordina i blocchi Sì PATCH /pages/{page}/slots/{slot}/blocks/reorder Allineato
Elimina un blocco Sì DELETE /pages/{page}/slots/{slot}/blocks/{block} Allineato
Autore html blocchi Sì Rifiutato con block_type_not_api_writable In base alla progettazione, è previsto solo il pannello: il markup grezzo rimane rivisto da utenti umani

Dalla versione 1.91.0, otto blocchi multimediali nativi espongono anche mobile_media_id nei piani e PATCH, con la stessa selezione e fallback del pannello. Vedi Varianti immagine multimediale.

I blocchi sono l'area meglio allineata del CMS. Le scritture delle impostazioni sono inoltre limitate da BlockSettingsPatchPolicy, che è una protezione anziché un gap.

Fessure condivise

Capacità Pannello API Stato
Elenca, leggi, crea Sì GET/POST /shared-slots Allineato
Blocca crea, riordina, elimina, cancella Sì /shared-slots/{sharedSlot}/blocks/* Allineato
Pubblica blocchi Shared Slot Sì POST /shared-slots/{sharedSlot}/publish-blocks Allineato
Assegnare uno Shared Slot a uno slot di pagina Sì POST /pages/{page}/slots/{slot}/shared-slot Allineato
Aggiorna uno Shared Slot (etichetta, maniglia, tipo di slot, layout, stato attivo) Sì PATCH /shared-slots/{sharedSlot} Allineato
Elimina un Shared Slot Sì DELETE /shared-slots/{sharedSlot} Allineato
Sposta un Shared Slot in un altro sito Sì Rifiutato con unsupported_shared_slot_fields In base alla progettazione, solo pannello: uno spostamento tra siti, non una ridenominazione
Revisioni Shared Slot: elenca, mostra, ripristina Sì Nessuno Mancante

L'eliminazione richiede la funzionalità distruttiva shared-slots.delete e rifiuta di rimuovere un Shared Slot a cui fa ancora riferimento qualsiasi slot di pagina, elencando gli slot di riferimento in modo che uno strumento possa staccarli prima.

Media

Funzionalità Pannello API Stato
Elenca, leggi, carica, recupera in remoto Sì /media, /media/fetch Allineato
Aggiorna metadati descrittivi Sì PATCH /media/{media} Allineato
Sostituisci, sposta, elimina Sì /media/{media}/replace, /move, DELETE Allineato
Crea una cartella multimediale Sì POST /media/folders Allineato
Rigenera trasformazioni immagine Sì Nessuno Mancante
Eliminazione collettiva Sì Solo eliminazione singola Parziale
Modificare i campi di archiviazione, il binario o la cartella tramite PATCH Sì Rifiutato con unsupported_media_update_fields Per impostazione predefinita, è previsto il solo pannello: le scritture dei metadati non devono spostare byte

POST /media/folders rifiuta un nome che già esiste sotto lo stesso genitore e restituisce la cartella esistente, quindi uno strumento di ripetizione la riutilizza invece di accumulare duplicati.

Capacità Pannello API Stato
Elenca e leggi i menu Sì /navigation-menus Allineato
Crea un menu Sì POST /navigation-menus Allineato
Crea, aggiorna, riordina, elimina l'articolo Sì /navigation-menus/{menu}/items/* Allineato
Elimina un intero menu Sì Nessuno Mancante
Elimina un elemento che ha figli Sì Rifiutato finché i bambini non vengono gestiti In base alla progettazione, è previsto il solo pannello: nessuna cascata silenziosa

Coinvolgimento e messaggi

Capacità Pannello API Stato
Leggi commenti e valutazioni Sì /engagement/comments, /engagement/ratings Allineato
Stato commento moderato Sì PATCH /engagement/comments/{comment} Allineato
Elimina un commento Sì Nessuno Mancante
Messaggi del modulo di contatto: elenca, leggi, stato, elimina Sì Nessuno Mancante

Contact non hanno alcuna rappresentazione API. Uno strumento può creare un modulo di contatto tramite l'API ma non può né leggerne gli invii né sapere dove vengono consegnati: vedere Sites.

Siti e configurazione

Il modulo del sito del pannello scrive più di venti campi. L'API li copre tramite endpoint ristretti a scopo singolo: branding, head, timezone, public-theme, seo, contact-recipient e locales.

Campo o capacità Pannello API Stato
Nome visualizzato, slogan, favicon, immagine social, tavolozza del marchio, caratteri Sì PATCH /sites/{site}/branding Allineato
Testa personalizzata HTML Sì PATCH /sites/{site}/head Allineato
Fuso orario Sì PATCH /sites/{site}/timezone Allineato
Tema pubblico preimpostato Sì POST /sites/{site}/public-theme Allineato
Il sito CSS e JS sovrascrivono i file Sì /sites/{site}/assets/{type} Allineato
Impostazioni SEO predefinite del sito (seo_title, seo_description, seo_keywords) Sì PATCH /sites/{site}/seo Allineato
Contatta l'e-mail del destinatario Sì PATCH /sites/{site}/contact-recipient Allineato
Assegnazione della lingua (locale_ids) Sì PUT /sites/{site}/locales Allineato: più rigoroso: rifiuta di separare una locale con le traduzioni delle pagine
Nome e handle del sito Sì Nessuno Mancante
Flag del sito primario Sì Nessuno Mancante
Variabili del sito Sì Nessuno Mancante
Crea o elimina un sito Sì Nessuno In base alla progettazione, solo pannello: site_create è una chiave del piano vietata
Clonare un sito Sì Nessuno In base alla progettazione, è previsto il solo pannello: la duplicazione dell'intero sito è di proprietà dell'operatore
Promuovi un sito Sì Nessuno In base alla progettazione, solo pannello: vedere Operazioni
Esportazione e importazione del sito Sì Nessuno In base alla progettazione, solo pannello: la sostituzione arbitraria dell'importazione non rientra nell'ambito
Domini: elenca, aggiungi, aggiorna, imposta primario, rimuovi, stato Sì /webadmin/api/sites/{site}/domains/* Allineato

Ciò che manca qui è l'identità del sito (nome, handle, flag primario) e le variabili del sito. Questi sono più vicini al provisioning che al contenuto e nessuno strumento ne ha ancora avuto bisogno.

Schema e definizioni

Tutto in questo gruppo è leggibile e niente è scrivibile.

Funzionalità Pannello API Stato
Layout di pagina: creazione, aggiornamento, gestione degli slot Sì GET /page-layouts only Parziale: sola lettura
Tipi di blocco: crea, aggiorna, elimina Sì GET /block-types only Parziale: sola lettura
Tipi di slot Elenco di sola lettura Nessuno Mancante, nemmeno leggibile
Locali: crea, aggiorna, abilita, disabilita Sì POST /locales, PATCH /locales/{locale} Allineato
Impostazioni locali: elimina Sì Nessuno Mancante
Catalogo delle icone: leggi Sì GET /icon-catalog Allineato
Catalogo icone: sincronizzazione e attivazione Sì Nessuno Mancante

L'accesso allo schema di sola lettura è difendibile: i tipi di blocco e i layout sono contratti strutturali e lasciare che sia un token a inventarli amplia il raggio d'azione di ogni successiva scrittura di contenuto. Viene registrata come parziale anziché in base alla progettazione perché tale decisione non è scritta da nessuna parte.

Utenti, sistema e operazioni

Capacità Pannello API Stato
Gestione utenti Sì Nessuno Per impostazione predefinita, è previsto il solo pannello: nessuna escalation dei privilegi tramite token
Gestione dei token API Sì Nessuno In base alla progettazione, è previsto solo il pannello: un token non deve coniare token
Impostazioni di sistema e test della posta Sì Nessuno In base alla progettazione, è previsto il solo pannello: la configurazione a livello di installazione è di proprietà dell'operatore
Creazione del punto di ripristino del backup Sì backups.create bracci create_restore_point su POST /content/apply Allineato per questa operazione ristretta
Ripristino e download del backup Sì Nessuno Design solo a pannello
Anteprima della pulizia del backup ed esecuzione Sì GET /system/backup-cleanup, POST /system/backup-cleanup/run Allineato con backups.read e backups.delete concessi separatamente
Controlla ed esegui un aggiornamento di sistema Sì /system/updates/check, POST /system/updates, /system/updates/operations/{operation} Allineato alla versione 1.90.0: token di sistema a livello di installazione e approvazione esplicita della versione/checksum; vedi Aggiornamenti
Ricostruire l'indice di ricerca Sì Nessuno Mancante
Rapporti dei visitatori Sì Nessuno Mancante
Plugin: sfoglia e installa il catalogo, abilita, disabilita, imposta, disinstalla, carica ZIP Sì /plugins/* Allineato
Plugin: aggiorna un plugin installato dal catalogo Sì POST /plugins/catalog/{plugin}/update Allineato
Plugin: leggi i dettagli di un plugin Sì Solo index Parziale

Intersezionale: chiavi del piano sconosciute

Fino a quando il problema non è stato risolto, ogni lacuna in questo documento era silenziosa dal lato del chiamante.

POST /content/validate e POST /content/apply hanno rifiutato un elenco fisso di chiavi proibite (chiavi di pubblicazione e pianificazione, creazione di siti, recupero remoto e verbi distruttivi) ma nulla semplicemente non riconosciuto. La normalizzazione del piano ha letto le chiavi che conosceva e ha ignorato il resto, quindi un piano che trasportava page.seo_title ha restituito ok: true e uno 201 non avendo scritto nulla di ciò. Uno strumento ha riportato il successo; non era successo niente. Anche la lettura della pagina non lo ha rivelato, perché anche i campi che l'API non può scrivere sono assenti dai suoi payload di lettura.

Le chiavi non riconosciute vengono ora rifiutate con 422 e il codice stabile unsupported_plan_fields e il percorso di errore nomina ciascun campo rifiutato. Il set di chiavi accettato rientra nell'ambito del piano mode: replace_slots è significativo durante la sostituzione di una pagina e rifiutato durante la creazione di una.

Questo non chiude alcuno spazio vuoto sottostante. Li rende rilevabili, che è il prerequisito affinché uno strumento possa ricorrere al pannello invece di segnalare una scrittura mai avvenuta.

Tabella di marcia

Ordinato in base a quanto ciascuno sblocca, non in base allo sforzo.

Livello 1 — completo

  1. Rifiutare le chiavi del piano non riconosciute con 422. Vedere Chiavi del piano sconosciute sopra.
  2. Endpoint di scrittura della traduzione della pagina. /pages/{page}/translations/* scrive nome, slug, percorso, SEO e Open Graph e li rilegge.
  3. Aggiornamento identità pagina. Fornito con 2: titolo, slug e percorso sono campi di traduzione e la traduzione locale predefinita è l'identità della pagina.
  4. Shared Slot aggiorna ed elimina. PATCH e DELETE /shared-slots/{sharedSlot}, quest'ultimo dietro la nuova funzionalità shared-slots.delete.

Livello 2 — completo

  1. Estendi le impostazioni del sito: impostazioni predefinite SEO, contact_recipient_email, locale_ids. /sites/{site}/seo, /contact-recipient e /locales.
  2. Anteprima della pagina o istantanea del rendering. GET /pages/{page}/render, con format=html e rendering per locale. Questo aveva un ambito errato quando è stato scritto l'elenco: /webadmin/pages/{page}/preview accettava già un token Bearer, quindi il divario era la rilevabilità e la selezione locale, non la capacità di eseguire il rendering.
  3. Creazione cartella multimediale. GET/POST /media/folders.
  4. Capability-gate i percorsi del dominio e spostali in /webadmin/api. Fatto e update e set primary sono arrivati con esso.

Cosa resta

Tutto ciò che è ancora contrassegnato come Mancante sopra è di secondo ordine: duplicazione della pagina e spostamento del sito, operazioni di massa, convertitore da HTML a blocco, eliminazione dei commenti, messaggi di contatto, creazione di schemi, reindicizzazione della ricerca e rapporti sui visitatori. Nessuno di essi impedisce a uno strumento di creare, controllare, correggere e pubblicare una pagina, che è ciò di cui si occupavano i livelli 1 e 2. Scegli tra loro in base alla domanda anziché scorrendo l'elenco.

Livello 3: confini deliberati

Utenti, emissione di token, impostazioni di sistema, ripristino/download del backup, creazione ed eliminazione di siti, clonazione, promozione e trasferimento rimangono solo nel pannello. Gli aggiornamenti di sistema sono disponibili tramite funzionalità API a livello di installazione concesse separatamente dalla versione 1.90.0. Sono elencati qui in modo che "non nell'API" sia una decisione registrata piuttosto che un'assenza non esaminata.

Ciclo di vita e ripristino del plug-in fino alla versione 1.94.2

Dalla versione 1.92.0, l'installazione/aggiornamento/attivazione dell'API e del pannello applica automaticamente le modifiche richieste al database del plug-in e mantiene uno stato disabilitato dopo un errore. Abilita/configura utilizza lo stesso gate di compatibilità; le richieste incompatibili restituiscono HTTP 409 e plugin_incompatible. Dalla versione 1.94.0, la convalida dell'avvio viene eseguita in un nuovo processo prima dell'attivazione, gli aggiornamenti riusciti mantengono il pacchetto precedente e gli errori di origine/percorso di runtime mettono in quarantena il plug-in.

Il ripristino in /webadmin/plugin-recovery è una superficie del pannello autenticata separata. CMS 1.94.2 richiede uno Super admin attivo con normale accesso amministrativo. Può disabilitare un plug-in gestito in errore o ripristinare il pacchetto conservato solo quando non è stata eseguita alcuna migrazione del database. L'accesso tramite token a /plugins/* non sostituisce questa autorità di ripristino del browser. Vedi Sistema plugin.