Ana içeriğe geç

Public Content Sections

Yayındaki ve aktif ContentSection kayıtlarını frontend tarafında kullanmak için getiren endpoint'ler.

Public tarafta page ilişkisi yoktur. Kayıtlar doğrudan section code değeri üzerinden çözülür.

Base URL: /api/public/content-sections Yetkilendirme: X-Api-Key

bilgi

Controller AllowAnonymous olsa da tenant çözümleme için X-Api-Key header'ı gereklidir.

Headers:

X-Api-Key: customer-api-key

GET /by-key/{code}

Tek bir content section kaydını code değeriyle getirir.

Yalnızca:

  • Status = Published
  • IsActive = true

olan kayıtlar döner.

Query Parametreleri:

ParametreTipAçıklama
langstringİstenen dil kodu

Dil fallback davranışı:

  • lang verilirse önce o dil aranır
  • ilgili çeviri yoksa tenant default language'e düşülür
  • localized olmayan alanlarda doğrudan stringValue döner

Örnek: GET /api/public/content-sections/by-key/home-faq?lang=tr

Response — 200 OK:

{
"success": true,
"data": {
"code": "home-faq",
"templateCode": "faq-list",
"itemListCode": "questions",
"fields": [
{
"fieldCode": "title",
"fieldType": "Text",
"stringValue": "Sıkça Sorulan Sorular",
"numberValue": null,
"booleanValue": null,
"mediaFileId": null,
"mediaUrl": null
}
],
"items": [
{
"sortOrder": 1,
"fields": [
{
"fieldCode": "question",
"fieldType": "Text",
"stringValue": "Kurulum süresi ne kadar?",
"numberValue": null,
"booleanValue": null,
"mediaFileId": null,
"mediaUrl": null
},
{
"fieldCode": "answer",
"fieldType": "RichText",
"stringValue": "<p>Genelde 1-2 iş günü içinde tamamlanır.</p>",
"numberValue": null,
"booleanValue": null,
"mediaFileId": null,
"mediaUrl": null
}
]
}
]
}
}

POST /by-keys

Birden fazla content section kaydını tek istekte getirir.

Bu endpoint özellikle frontend bootstrapping için uygundur. Örneğin anasayfa render edilirken hero, stats, faq, footer-brand gibi bloklar birlikte istenebilir.

Request Body:

{
"codes": [
"home-hero",
"home-stats",
"home-faq",
"footer-brand"
],
"lang": "tr"
}
AlanTipZorunluAçıklama
codesstring[]Evetİstenen section code listesi
langstringHayırİstenen dil kodu

Response — 200 OK:

{
"success": true,
"data": [
{
"code": "home-hero",
"templateCode": "hero-basic",
"itemListCode": null,
"fields": [
{
"fieldCode": "title",
"fieldType": "Text",
"stringValue": "Daha hızlı içerik yönetin",
"numberValue": null,
"booleanValue": null,
"mediaFileId": null,
"mediaUrl": null
}
],
"items": []
},
{
"code": "home-faq",
"templateCode": "faq-list",
"itemListCode": "questions",
"fields": [],
"items": [
{
"sortOrder": 1,
"fields": [
{
"fieldCode": "question",
"fieldType": "Text",
"stringValue": "Kurulum süresi ne kadar?",
"numberValue": null,
"booleanValue": null,
"mediaFileId": null,
"mediaUrl": null
}
]
}
]
}
]
}

Yanıt Davranışı

  • Yalnızca bulunan, yayındaki ve aktif kayıtlar döner
  • codes içindeki olmayan kayıtlar response içinde yer almaz
  • Dönüş sırası, mümkün olduğunca istenen codes sırasını korur

Frontend Kullanım Notları

  • templateCode, ilgili UI component'ini seçmek için kullanılabilir
  • fields alanı section seviyesindeki değerleri taşır
  • items alanı repeater yapılarını taşır
  • MediaUrl mevcutsa doğrudan render edilebilir
  • MediaFileId gerektiğinde frontend cache veya debug amaçlı kullanılabilir
ipucu

Public endpoint adı by-key olsa da burada kullanılan değer teknik olarak section code alanıdır. Frontend tarafında bu iki kavramı aynı kabul edebilirsiniz.


Olası Hatalar

KodDurum
403Modül müşteriye atanmadı veya sistemde pasif
404GET /by-key/{code} için kayıt bulunamadı
400Geçersiz request body