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.
Navigation
| 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
Rifiutare le chiavi del piano non riconosciute conVedere Chiavi del piano sconosciute sopra.422.Endpoint di scrittura della traduzione della pagina./pages/{page}/translations/*scrive nome, slug, percorso, SEO e Open Graph e li rilegge.Aggiornamento identità pagina.Fornito con 2: titolo, slug e percorso sono campi di traduzione e la traduzione locale predefinita è l'identità della pagina.Shared Slot aggiorna ed elimina.PATCHeDELETE /shared-slots/{sharedSlot}, quest'ultimo dietro la nuova funzionalitàshared-slots.delete.
Livello 2 — completo
Estendi le impostazioni del sito: impostazioni predefinite SEO,contact_recipient_email,locale_ids./sites/{site}/seo,/contact-recipiente/locales.Anteprima della pagina o istantanea del rendering.GET /pages/{page}/render, conformat=htmle rendering per locale. Questo aveva un ambito errato quando è stato scritto l'elenco:/webadmin/pages/{page}/previewaccettava già un token Bearer, quindi il divario era la rilevabilità e la selezione locale, non la capacità di eseguire il rendering.Creazione cartella multimediale.GET/POST /media/folders.Capability-gate i percorsi del dominio e spostali inFatto e/webadmin/api.updateeset primarysono 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.