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
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 = PublishedIsActive = true
olan kayıtlar döner.
Query Parametreleri:
| Parametre | Tip | Açıklama |
|---|---|---|
lang | string | İstenen dil kodu |
Dil fallback davranışı:
langverilirse önce o dil aranır- ilgili çeviri yoksa tenant default language'e düşülür
- localized olmayan alanlarda doğrudan
stringValuedö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"
}
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
codes | string[] | Evet | İstenen section code listesi |
lang | string | Hayı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
codesiçindeki olmayan kayıtlar response içinde yer almaz- Dönüş sırası, mümkün olduğunca istenen
codessırasını korur
Frontend Kullanım Notları
templateCode, ilgili UI component'ini seçmek için kullanılabilirfieldsalanı section seviyesindeki değerleri taşıritemsalanı repeater yapılarını taşırMediaUrlmevcutsa doğrudan render edilebilirMediaFileIdgerektiğinde frontend cache veya debug amaçlı kullanılabilir
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
| Kod | Durum |
|---|---|
403 | Modül müşteriye atanmadı veya sistemde pasif |
404 | GET /by-key/{code} için kayıt bulunamadı |
400 | Geçersiz request body |