Dahili İçerik API'si
Amaç
Dahili İçerik API'si, güvenilen yapay zekâ ve operatör araçları için güvenli bir CMS API'sidir. Bu araçların; tarayıcı yönetici arayüzüne giriş yapmadan, sayfaları kazımadan veya tarayıcıyı otomatikleştirmeden, yapılandırılmış JSON üzerinden CMS içerik sözleşmelerini incelemesine, önce-taslak içerik oluşturmasına, mevcut taslak sayfalardaki sayfaya ait belirli slotları değiştirmesine ve açık yayınlama işlemleri çalıştırmasına olanak tanır.
Faz 1; salt okunur içerik keşfi ve doğrulanmış içerik planları üzerinden taslak sayfa oluşturma için token korumalı, yalnızca JSON döndüren, herkese açık olmayan bir API olarak uygulanmıştır. Faz 2A; gezinme menüleri, Ortak Slotlar ve sayfa slotlarına açık Ortak Slot ataması için güvenli temeller ekler. Faz 2B, mevcut sayfalardaki sayfaya ait slot içeriği için kontrollü, yalnızca taslakta geçerli değiştirme ekler. Yayınlama uç noktaları açıktır ve content.publish gerektirir; içerik uygulama önce-taslak kalır ve yayınlamaz. API bilinçli olarak dar kalır: uzak veri çekme yok, içerik uygulama üzerinden geniş çaplı sayfa silme yok, Ortak Slot destekli slotların değiştirilmesi yok ve Ortak Slot kademeli yayınlama yok.
Ürün Konumlandırması
Dahili İçerik API'si:
- dahili/operatör CMS API'sidir
- token korumalıdır
- herkese açık değildir
- headless CMS teslim API'si değildir
- yönetici izinlerinin yerine geçmez
- içe/dışa aktarmanın yerine geçmez
- bir yapay zekâ sağlayıcı entegrasyonu değildir
Bu API'nin sahibi CMS çekirdeği olmalıdır; çünkü API, çekirdek içerik kavramları üzerinde çalışır: siteler, sayfalar, yerleşimler, slotlar, bloklar, çeviriler, gezinme ve ortak slotlar. Yapay zekâ veya operatör araçları API'yi çağırabilir, ancak CMS çekirdeği OpenAI, LLM, tarayıcı (crawler) veya sağlayıcıya özgü entegrasyon mantığı barındırmamalıdır.
Rota Öneki
Kanonik önek şudur:
/webadmin/api
Bu, kısa ve tanıdık bir API segmenti kullanırken API'yi CMS yönetici sınırının içinde tutar. Kaynak tarzı uç noktalar, /webadmin/api/pages ve /webadmin/api/blocks gibi doğrudan bu önekin altında yer almalıdır.
API keşfi şuradan başlar:
GET /webadmin/api
Kimliği doğrulanmamış çağıranlar yalnızca herkese açık ve güvenli önyükleme JSON'u alır. Kimliği doğrulanmış çağıranlar güvenli ürün sürümü meta verilerini ve OpenAPI, yapay zekâ rehberi, içerik sözleşmesi, örnekler, içerik doğrulama/uygulama, sayfalar, gezinme ve Ortak Slotlar bağlantılarını alır. Harici yapay zekâ/operatör araçları, CMS deposunu veya yerel paket dokümanlarını okumak yerine bu canlı keşif yanıtından başlamalıdır.
Plan tabanlı içerik işlemleri şunu kullanır:
POST /webadmin/api/content/validate
POST /webadmin/api/content/apply
Kaçınılması gereken rota seçimleri:
/webadmin/internal-api, çünkü gereksiz yere uzundur/webadmin/api/content-plans/..., çünkücontent-plansURL sözleşmesi için fazla teknik ve dardır- her kaynağı
/webadmin/api/content/...altına yerleştirmek, çünkü kaynak API'leri açık ve doğrudan kalmalıdır /admin, çünkü CMS, ana ürünün/adminyolunun CMS'ye ait olduğunu varsaymamalıdır/cms, çünkü/cmsyalnızca statik CMS varlıkları için ayrılmıştır
Kimlik Doğrulama
API, Bearer token kimlik doğrulaması kullanır:
Authorization: Bearer <token>
CMS API token'ları, bir CMS süper yöneticisi tarafından System -> API Tokens üzerinden oluşturulur. CMS, cms_api_tokens veritabanı tablosunda yalnızca bir SHA-256 karması ve güvenli bir önizleme saklar. Düz metin token, oluşturmadan hemen sonra yalnızca bir kez gösterilir ve bir daha asla gösterilmez.
Süper yöneticiler, denetim satırını görünür tutarak API erişimini anında devre dışı bırakmak için bir token'ı iptal edebilir veya token kaydını listeden kalıcı olarak kaldırmak için silebilir. Etkin bir token'ı silmek de API erişimini anında devre dışı bırakır; çünkü kimlik doğrulayıcı artık eşleşen saklı bir karma bulamaz.
Yerel yapay zekâ ve operatör araçları, üretilen token'ı güvenilen bir operatör gizli anahtar deposunda saklamalıdır.
Yerel operatör yapılandırmasında Dahili İçerik API'si temel URL'sini kullanın:
WEBBLOCKS_CMS_API_URL=https://example.com/webadmin/api
WEBBLOCKS_CMS_API_TOKEN=...
CMS çalışma zamanı WEBBLOCKS_CMS_INTERNAL_API_TOKEN gerektirmez.
Kimlik doğrulama kuralları:
- eksik, yanlış veya iptal edilmiş token'lar JSON
401döndürür - iptal edilen token'lar anında çalışmayı durdurur
- token'lar günlüklere, tanılamalara, destek raporlarına, testlere veya dokümantasyon örneklerine asla yazdırılmamalıdır
- token karşılaştırması sabit zamanlı karşılaştırma kullanmalıdır
- başarılı API istekleri token'ın
last_used_atvelast_used_ipdeğerlerini günceller - başarılı API istekleri, operatör denetim bağlamı için kısaltılmış bir user-agent da saklar
- yanıtlar yalnızca JSON'dur
Örnek istek:
GET /webadmin/api/sites
Authorization: Bearer <token>
Accept: application/json
Content-Type: application/json
Yetenekler
Süper yöneticiler, System -> API Tokens üzerinden token oluştururken token yeteneklerini seçer ve daha sonra token gizli değerini açığa çıkarmadan veya döndürmeden token'ın adını ve yeteneklerini düzenleyebilir. Keşif; token değerini, token karmasını veya token önizlemesini döndürmeden kayıtlı yetenekleri gösterir. Standart sayfa oluşturma token'ları varsayılan olarak şu yeteneklere sahiptir:
content.readcontent.validatecontent.applynavigation.writeshared-slots.write
Yıkıcı ve yayınlama yetenekleri ayrı gelişmiş seçeneklerdir ve varsayılan olarak seçili değildir:
content.publishpages.delete
Yazma uç noktaları ilgili yeteneği sunucu tarafında denetler. Eksik yetenekler; api_discovery_url, openapi_url, documentation_url ve example_url yönlendirmesiyle birlikte JSON 403 döndürür. Normal sayfa oluşturma token'ları yıkıcı yetenekler içermemelidir.
API Modeli
API'nin birbirini tamamlayan iki modu vardır.
Kaynak API'si
Kaynak uç noktaları, yönetici eşdeğeri tekil işlemleri yansıtır:
- sayfaları listeleme ve okuma
- blokları listeleme ve okuma
- siteleri, dilleri (locale), yerleşimleri ve blok türlerini listeleme
- daha sonra taslak sayfa kaynaklarını doğrudan oluşturma veya güncelleme
- daha sonra sayfa slotlarını listeleme veya sağlama
- daha sonra kaynak uç noktaları üzerinden blok ekleme, güncelleme, taşıma ve silme
- daha sonra kaynak uç noktaları üzerinden alt blok ekleme
- daha sonra gezinme ve ortak slotları yönetme
Faz 1 kaynak uç noktaları:
GET /webadmin/api/sites
GET /webadmin/api/locales
GET /webadmin/api/page-layouts
GET /webadmin/api/block-types
GET /webadmin/api/content-contract
GET /webadmin/api/pages
GET /webadmin/api/pages/{page}
POST /webadmin/api/pages/{page}/publish
POST /webadmin/api/pages/{page}/publish-page-owned-blocks
POST /webadmin/api/pages/{page}/slots/{slot}/shared-slot
GET /webadmin/api/blocks
GET /webadmin/api/blocks/{block}
GET /webadmin/api/navigation-menus
GET /webadmin/api/navigation-menus/{navigationMenu}
POST /webadmin/api/navigation-menus
POST /webadmin/api/navigation-menus/{navigationMenu}/items
GET /webadmin/api/shared-slots
GET /webadmin/api/shared-slots/{sharedSlot}
POST /webadmin/api/shared-slots
POST /webadmin/api/shared-slots/{sharedSlot}/blocks
İçerik Doğrulama / Uygulama API'si
İçerik doğrulama/uygulama uç noktaları, çok adımlı eksiksiz içerik planlarını işler:
POST /webadmin/api/content/validate
POST /webadmin/api/content/apply
validate, eksiksiz bir içerik planını denetler ve hiçbir şey yazmaz. apply, planı yeniden doğrular ve ardından istenen taslak sayfayı, gezinme öğelerini, Ortak Slotları, Ortak Slot blok ağaçlarını ve sayfa slotu Ortak Slot atamalarını tek bir işlem (transaction) içinde oluşturur. Plan mode: replace_existing_draft_page kullandığında ve iyimser bir güvenlik koruması içerdiğinde, mevcut bir taslak sayfadaki adlandırılmış sayfaya ait slotları da değiştirebilir. Bu; CMS'nin yarım oluşturulmuş içerikten kaçınması gereken yapay zekâ üretimi sayfalar, şablonlar, başlangıç sayfaları, ortak üst bilgiler/alt bilgiler ve taşıma yardımcıları için kullanışlıdır.
İstek gövdesi yine bir plan alanı veya başka bir yapılandırılmış içerik planı yükü içerebilir. URL, /content/validate ve /content/apply olarak kalmalıdır.
Her iki mod da gereklidir:
- Kaynak API'si, mevcut CMS içerik modelini ve sözleşmelerini dahili araçlara açar
- İçerik Doğrulama / Uygulama API'si, daha büyük sayfa oluşturma işlemlerinde kısmi yazmaları önler
Mevcut Taslak Sayfada Slot Değiştirme
Mevcut taslak sayfa değiştirme, doğrulama/uygulama sözleşmesinin içinde kalır:
POST /webadmin/api/content/validate
POST /webadmin/api/content/apply
Mevcut bir taslak sayfadaki bir veya daha fazla sayfaya ait slotu değiştirmek için mode: replace_existing_draft_page kullanın. İşlem, doğrulama için content.validate ve uygulama için content.apply gerektirir. Genel bir sayfa silme işlemi olmadığı için pages.delete gerektirmez.
Sayfa Çevirisi path değeri kanonik herkese açık URL'dir. Yeni planlar /contact, /features veya /docs/internal-content-api gibi yollar kullanmalıdır; /p/... yalnızca eski sürüm uyumluluğu içindir. Eğik çizgi içeren yollar segment segment normalize edilir; bu nedenle /docs/internal-content-api/, /docs/internal-content-api olur ve docsinternal-content-api biçimine indirgenmez. /webadmin, /webadmin/api, /cms, /search, /search.json, /contact-messages, /install gibi ayrılmış rota alanları ve ana ürün kimlik doğrulama rotaları herkese açık sayfa yolu olarak oluşturulamaz.
Örnek:
{
"plan": {
"mode": "replace_existing_draft_page",
"site": "default",
"locale": "en",
"page": {
"id": 9,
"expected_path": "/contact",
"status": "draft"
},
"replace_slots": {
"main": [
{
"type": "plain_text",
"translations": {
"content": "Updated draft contact content."
}
}
]
}
}
}
Kurallar:
- hedef sayfa
draftdurumunda olmalıdır expected_pathveyaexpected_updated_atzorunludurexpected_path,/p/...eski takma adını değil, kanonik herkese açık Sayfa Çevirisi yolunu kullanır- hedef sayfa istenen siteye ait olmalı ve dil (locale) o site için etkin olmalıdır
- her slot sayfada mevcut olmalı ve sayfaya ait bloklar kullanmalıdır
- Ortak Slot destekli slotlar temizlenmek yerine reddedilir
- yalnızca adlandırılmış
replace_slotsiçindeki bloklar kaldırılır - eski bloklar kaldırılır ve yeni bloklar tek bir işlemde (transaction) yazılır
- sayfa revizyonları uygulamadan önce ve sonra kaydedilir
- yayınlama, medya çekme/içe aktarma, geniş çaplı silme veya Ortak Slot atamasını temizleme gerçekleşmez
Kaynak Eşitleme Meta Verisi
İçerik planları, yapay zekâ/operatör doküman eşitleme iş akışları için sınırlı ve gizli bilgi içermeyen bir source_sync nesnesini kalıcı olarak saklayabilir. Rastgele sayfa ayarları reddedilir. Kabul edilen biçim şudur:
{
"page": {
"settings": {
"source_sync": {
"type": "markdown_documentation",
"source_id": "webblocks-cms:docs/internal-content-api.md",
"source_path": "docs/internal-content-api.md",
"source_sha256": "64-character-lowercase-sha256",
"managed_slots": ["main"],
"last_synced_at": "2026-06-25T00:00:00Z"
}
}
}
}
Uygulama bu meta veriyi sayfa ayarlarına kaydeder ve sayfa listesi/ayrıntı API yanıtları, gelecekteki eşleştirmeler için aynı izin listesindeki source_sync alanlarını gösterir. Token'ları, ortam değerlerini, yerel/sunucu mutlak yollarını veya diğer gizli bilgileri dahil etmeyin.
Açık Yayınlama Uç Noktaları
Yayınlama, içerik uygulamadan ayrıdır ve content.publish yeteneğine sahip bir token gerektirir.
POST /webadmin/api/pages/{page}/publish
POST /webadmin/api/pages/{page}/publish-page-owned-blocks
POST /webadmin/api/pages/{page}/publish, sayfa kaydını yayınlar. Varsayılan yükü yalnızca sayfa içindir:
{
"include_page_owned_blocks": false
}
Kurallar:
- atlanan
include_page_owned_blocks,falsegibi davranır include_page_owned_blocks: falseyalnızca sayfa kaydını yayınlar; taslak veya incelemedeki blokları değiştirmezinclude_page_owned_blocks: true, sayfanın ortak olmayan sayfa slotlarına ait taslak ve incelemedeki blokları, iç içe alt bloklar dahil yayınlar- halihazırda yayında olan bloklar değişmeden kalır
- Ortak Slot destekli slotlar hariç tutulur ve yanıtta raporlanır
publish_shared_slots,include_shared_slot_blocksveyashared_slot_cascadegibi desteklenmeyen Ortak Slot kademeli alanları JSON422döndürür- yanıt; sayfa kimliği/durumu/yolu meta verilerini, sayfaya ait blokların dahil edilip edilmediğini, yayınlanan blok sayısını, hariç tutulan Ortak Slot özetlerini ve sayfa revizyon kimliğini içerir
POST /webadmin/api/pages/{page}/publish-page-owned-blocks, yalnızca yayınlanmamış sayfaya ait blokları yayınlar ve sayfa iş akışı durumunu değiştirmez. Aynı content.publish yeteneğini ve aynı Ortak Slot hariç tutma kuralını kullanır.
Yapay zekâ/operatör araçları, sayfa yayınlamanın tüm blok içeriğini herkese açık hale getirdiğini varsaymamalıdır. include_page_owned_blocks: true seçeneğini yalnızca kullanıcı, o sayfa için yayınlanmamış tüm sayfaya ait blokların yayınlanmasını açıkça onayladığında kullanın. Ortak Slot içeriği ayrı olarak incelenmeli ve yayınlanmalıdır.
İçerik Sözleşmesi Uç Noktası
GET /webadmin/api/content-contract, güvenilen yapay zekâ/operatör araçları için salt okunur bir keşif uç noktasıdır. API önekini, doğrulama/uygulama URL'lerini, yönetici önizleme URL şablonunu, güvenlik bayraklarını, keşif URL'lerini, önerilen sayfa oluşturma kalıplarını ve arındırılmış blok sözleşmesi meta verilerini döndürür.
Bu uç nokta genel CMS ürün davranışıdır. Kuruluma özgü gizli bilgileri, token değerlerini, ham Blade içeriklerini, mutlak dosya sistemi yollarını, özel sunucu yollarını veya siteye özgü talimatları döndürmemelidir. Blok sözleşmesi satırları; tanıtıcı (handle)/slug, etiket, kategori, durum, kapsayıcı ve alt blok desteği, çevrilebilir alanlar, ortak ayar alanları ve herkese açık işleyici (renderer) kök davranışını içerebilir.
Yapay zekâ araçları, bir plan oluşturmadan önce bu uç noktayı veya GET /webadmin/api/block-types uç noktasını çağırmalı ve yalnızca mevcut kurulumda bulunan tanıtıcıları kullanmalıdır.
contact_form sözleşmesi ek güvenli form meta verileri içerir: ayar şeması, çevrilmiş alanlar, herkese açık POST /contact-messages gönderim uç noktası, gerekli CSRF tarayıcı davranışı, sunucu doğrulama kuralları, CMS'ye ait gizli üretilmiş anti-spam denetim alanı, genel denetim alanı başarı davranışı, spam sınıflandırma/karantina notları, bildirimden önce depolama davranışı, alıcı yedek sırası, güvenli bildirim hatası kaydı ve /webadmin/contact-messages inceleme davranışı. Denetim alanı işleyici tarafından üretilir, normal ziyaretçi girdisinin parçası değildir ve API veya yapay zekâ/operatör araçları tarafından elle oluşturulmamalıdır. İletişim sayfası araçları; Trusted HTML, ham form işaretlemesi veya mailto: formları yerine bu yerleşik bloğu kullanmalıdır. Eski website alanı artık herkese açık İletişim Formu sözleşmesinin parçası değildir.
İnsan tarafından okunabilir Yapay Zekâ Sayfa Oluşturma Rehberi, paket-yerel kurulumlarda vendor/fklavyenet/webblocks-cms/docs/ai-page-building-guide.md yolunda gelir.
Faz 1 Kapsamı
Keşif Uç Noktaları
GET /webadmin/apiGET /webadmin/api/openapi.jsonGET /webadmin/api/ai-guideGET /webadmin/api/examplesGET /webadmin/api/examples/contact-pageGET /webadmin/api/examples/landing-pageGET /webadmin/api/sitesGET /webadmin/api/localesGET /webadmin/api/page-layoutsGET /webadmin/api/block-typesGET /webadmin/api/content-contract
Sayfa Uç Noktaları
GET /webadmin/api/pagesGET /webadmin/api/pages/{page}POST /webadmin/api/pages/{page}/slots/{slot}/shared-slot
Blok Uç Noktaları
GET /webadmin/api/blocksGET /webadmin/api/blocks/{block}
Gezinme Uç Noktaları
GET /webadmin/api/navigation-menusGET /webadmin/api/navigation-menus/{navigationMenu}POST /webadmin/api/navigation-menusPOST /webadmin/api/navigation-menus/{navigationMenu}/items
Gezinme menüleri, mevcut CMS navigation_items.menu_key modelini kullanır. Faz 2A; primary, footer, mobile, legal ve docs gibi CMS ile gelen menü tanıtıcılarını destekler; ayrı bir menü tablosu eklemez. Bir gezinme menüsü oluşturmak, isteğe bağlı başlangıç öğeleriyle güvenli, site kapsamlı bir menü grubu oluşturmak olarak ele alınır. Zaten öğeleri olan bir site/menünün üzerine yazmayı reddeder.
Gezinme öğesi URL'leri; /, /about ve /contact gibi dahili yollar veya güvenli http/https URL'leri olabilir. API; javascript:, data:, protokol-göreli URL'leri, dizin gezinmesini (traversal), hatalı biçimli URL'leri, desteklenmeyen hedefleri ve boş etiketleri reddeder. Gezinme uç noktaları sayfa oluşturmaz, sayfa yayınlamaz, siteleri taramaz veya uzak URL'leri çekmez.
Ortak Slot Uç Noktaları
GET /webadmin/api/shared-slotsGET /webadmin/api/shared-slots/{sharedSlot}POST /webadmin/api/shared-slotsPOST /webadmin/api/shared-slots/{sharedSlot}/blocks
Ortak Slot oluşturma site kapsamlıdır ve aynı site için yinelenen tanıtıcıları reddeder. Ortak Slot blokları, sayfaya ait blokların kullandığı blok yükü yazıcısını yeniden kullanır; bu sayede dile ait metinler çeviri satırlarında kalır ve ortak ayarlar blok kaydı/ayar yolunda kalır. Medya içe aktarma ve medya atama bu fazın dışında kalır.
Sayfa Slotu Ataması
POST /webadmin/api/pages/{page}/slots/{slot}/shared-slot
Bu uç nokta, mevcut ve uyumlu, aynı siteye ait etkin bir Ortak Slot'u mevcut bir sayfa slotuna atar. Eksik sayfaları veya slotları oluşturmaz. Sayfayı yayınlamaz. Siteler arası, pasif ve uyumsuz Ortak Slotları reddeder. Ayrıca hâlâ sayfaya ait blokları olan bir slotu değiştirmeyi de reddeder; çünkü Faz 2A bu blokları otomatik olarak silmez veya değiştirmez.
İçerik Doğrulama / Uygulama Uç Noktaları
POST /webadmin/api/content/validatePOST /webadmin/api/content/apply
Faz 1 Güvenliği
- yalnızca taslak
- içerik uygulama üzerinden yayınlama yok
- mevcut yayındaki içeriğin üzerine yazma yok
mode: replace_existing_draft_pagedışında mevcut sayfaların veya blokların geniş çaplı üzerine yazılması yok- uzak veri çekme yok
- medya indirme veya içe aktarma yok
- henüz site oluşturma yok
- içerik uygulama üzerinden yıkıcı sayfa silme yok
- işlem kapsamlı taslak slot değiştirme dışında yıkıcı blok silme yok
- henüz kaynak güncelleme, taşıma veya silme uç noktaları yok
- Bearer token ile yapılan JSON yazmaları için tarayıcı oturumu, form veya CSRF gereksinimi yok
- herkese açık kimliksiz erişim, asgari
GET /webadmin/apiönyükleme yanıtıyla sınırlıdır
JSON Hata Biçimi
API hataları yalnızca JSON'dur. Girişe yönlendirmemeli, CSRF sayfaları oluşturmamalı veya yığın izlerini (stack trace) açığa çıkarmamalıdır. Ortak alanlar:
{
"ok": false,
"code": "invalid_internal_api_token",
"message": "Invalid internal API token.",
"api_discovery_url": "/webadmin/api",
"openapi_url": "/webadmin/api/openapi.json",
"documentation_url": "/webadmin/api/ai-guide",
"example_url": "/webadmin/api/examples/contact-page",
"errors": []
}
Beklenen durum kodları:
- eksik, geçersiz veya iptal edilmiş token'lar için
401 - eksik yetenekler için
403 - doğrulama hataları için
422
Kaynak API'si Örnekleri
Sayfaları Listele
GET /webadmin/api/pages
Sayfa Ayrıntılarını Oku
GET /webadmin/api/pages/{page}
Blokları Listele
GET /webadmin/api/blocks
Blok Ayrıntılarını Oku
GET /webadmin/api/blocks/{block}
İçerik Doğrulama / Uygulama Örneği
Aynı yük her iki uç noktaya da gönderilebilir:
POST /webadmin/api/content/validate
POST /webadmin/api/content/apply
Örnek İngilizce pazarlama ana sayfası taslağı:
{
"plan": {
"site": "example-site",
"locale": "en",
"layout": "default",
"page": {
"title": "Acme Studio",
"path": "/",
"status": "draft"
},
"slots": {
"main": [
{
"type": "hero",
"translations": {
"title": "Plan, build, and publish with confidence",
"subtitle": "Structured content for modern teams",
"content": "Create a draft homepage from a validated content plan."
},
"children": [
{
"type": "button_link",
"translations": {
"title": "Start planning"
},
"settings": {
"url": "/contact",
"variant": "primary"
}
}
]
},
{
"type": "section",
"children": [
{
"type": "container",
"children": [
{
"type": "grid",
"settings": {
"columns": 3
},
"children": [
{
"type": "card",
"children": [
{
"type": "card_body",
"children": [
{
"type": "plain_text",
"translations": {
"content": "Validate the whole draft before anything is written."
}
}
]
}
]
}
]
}
]
}
]
},
{
"type": "cta",
"translations": {
"title": "Ready to shape the next page?",
"content": "Use structured plans for repeatable content creation."
},
"children": [
{
"type": "button_link",
"translations": {
"title": "Contact us"
},
"settings": {
"url": "/contact",
"variant": "primary"
}
}
]
}
]
}
}
}
Doğrulama Kuralları
- site tanıtıcısı veya kimliği çözümlenebilmelidir
- dil (locale) mevcut olmalı ve hedef site için etkin olmalıdır
- yerleşim mevcut olmalıdır
- yol çakışması sayfa oluşturmayı engeller
- blok türü yayında ve kullanılabilir olmalıdır
- alt blok desteği, mevcut olduğunda blok sözleşmelerine uymalıdır
- kullanıcıya görünen metin çeviri satırlarına aittir
- ortak ayarlar ortak kalır
- bilinmeyen güvensiz ayarlar reddedilir
- zararsız bilinmeyen ayarlar tutarlı biçimde uyarı verebilir veya yok sayılabilir
- uygulama, yazmadan önce yeniden doğrular
- uygulama işlemseldir (transactional)
- İçerik uygulama; yayınlama, site oluşturma, medya içe aktarma, uzak veri çekme, desteklenmeyen üzerine yazma, desteklenmeyen değiştirme ve silme işlemlerini reddetmeye devam eder
- daha sonraki bir faz açık, taslak-güvenli değişiklik sözleşmeleri eklemedikçe gezinme ve Ortak Slot oluşturma yalnızca oluşturma amaçlıdır
Yanıt Biçimi
Yanıtlar öngörülebilir JSON olmalıdır:
{
"ok": true,
"writes": [],
"data": {
"page": {
"id": 123,
"title": "Product Overview",
"status": "draft",
"edit_url": "/webadmin/pages/123/edit"
}
},
"normalized_plan": {},
"warnings": [],
"errors": []
}
Doğrulama hataları bir yol ve mesaj içermelidir:
{
"ok": false,
"writes": [],
"data": null,
"normalized_plan": {},
"warnings": [
{
"path": "plan.slots.main.1.settings.theme",
"message": "Unknown harmless setting ignored."
}
],
"errors": [
{
"path": "plan.page.path",
"message": "A page already exists at this path for the selected site and locale."
}
]
}
Oluşturulan veya güncellenen CMS kaynakları için yararlı olduğunda edit_url ekleyin.
Faz 2A Plan Bölümleri
İçerik planları, mevcut sayfa/slot planının yanında navigation_menus, shared_slots ve page_slot_shared_slots içerebilir. validate hiçbir şey yazmaz. apply, tüm geçerli bölümleri tek bir işlemde yazar ve sonraki herhangi bir bölüm başarısız olduğunda tüm planı geri alır.
{
"plan": {
"site": "default",
"locale": "en",
"layout": "default",
"page": {
"title": "Homepage Draft",
"path": "/",
"status": "draft"
},
"slots": {
"main": []
},
"navigation_menus": [
{
"handle": "primary",
"label": "Primary Navigation",
"items": [
{
"label": "Home",
"url": "/",
"target": "_self",
"sort_order": 10
}
]
}
],
"shared_slots": [
{
"handle": "site-header",
"label": "Site Header",
"slot": "header",
"blocks": []
}
],
"page_slot_shared_slots": [
{
"page": "created",
"slot": "header",
"shared_slot": "site-header"
}
]
}
}
page_slot_shared_slots[].page, created kullanarak aynı planın oluşturduğu sayfaya veya mevcut bir sayfa kimliğine başvurabilir. shared_slot, aynı planda daha önce oluşturulmuş bir Ortak Slot'a veya aynı siteye ait mevcut bir Ortak Slot tanıtıcısına başvurabilir.
Gelecek Fazlar
Faz 2B
- gezinme ve Ortak Slot blokları için isteğe bağlı taslak-güvenli güncelleme/taşıma uç noktaları
- gerektiğinde açık ve güvenli temizleme/değiştirme sözleşmeleri
- yalnızca genel CMS davranışı olarak kaldıkları sürece daha derin üst bilgi/gezinme çubuğu oluşturma yardımcıları
Faz 3
- gerektiğinde taslak-güvenli doğrudan sayfa/blok düzenlemeleri için kaynak uç noktaları
- kontrollü taslak güncellemeleri veya taslak içerik değiştirme
- sayfa varlıkları
- yalnızca mevcut medya kimliğiyle medya
Faz 4
- ayrı tasarıma ve izinlere sahip olduklarında yayınlamanın ötesinde ek açık iş akışı geçişleri
Yapay Zekâ Kullanım Rehberi
- önce siteleri, dilleri (locale), yerleşimleri ve blok türlerini keşfedin
- uygulamadan önce doğrulayın
- taslak içerik oluşturun
docs/public-block-render-markup.mdiçindeki yapılandırılmış blokları tercih edin- incelenmiş bir yedek çözüm dışında Safe HTML kullanmaktan kaçının
- üretilen herkese açık metni hedef dilde tutun; örneğin İngilizce bir ana sayfa için İngilizce
Sınırlar
- CMS çekirdeğinde OpenAI veya LLM entegrasyonu yok
- tarama veya veri çekme yok
- rastgele içe/dışa aktarma ikamesi yok
- otomatik yayınlama yok
- Faz 1'de yıkıcı silme yok
- ana ürünün
/adminrotasına ilişkin varsayım yok /cmsrota öneki kullanımı yok- QuizTem'e özgü çalışma zamanı kodu yok; QuizTem ana sayfa üretimi, bu genel CMS API'si için daha sonraki bir tüketici kullanım senaryosudur