Ana içeriğe geç

Blog Yazıları

Blog yazılarının CRUD işlemleri. Kapak görseli doğrudan bu modüle upload edilmez; önce Media Manager üzerinden yüklenir, sonra coverImageMediaFileId ile referans verilir.

Base URL: /api/tenant/blog/posts Yetkilendirme: Bearer Token + X-Api-Key Modül: Blog modülü müşteriye atanmış olmalıdır.

Headers:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
X-Api-Key: customer-api-key

POST /

Yeni blog yazısı oluşturur.

Request Body:

{
"coverImageMediaFileId": "media-image-id-...",
"status": "Draft",
"publishDate": "2026-04-01T10:00:00Z",
"categoryIds": ["3fa85f64-..."],
"tagIds": ["7ba92e31-..."],
"translations": [
{
"languageId": "9cd14a82-...",
"title": "İlk Blog Yazısı",
"content": "<p>İçerik buraya...</p>",
"slug": "ilk-blog-yazisi",
"metaTitle": "İlk Blog Yazısı | Kompanse",
"metaDescription": "İlk blog yazımız hakkında kısa açıklama."
}
]
}
AlanTipZorunluAçıklama
coverImageMediaFileIdGuid?HayırMedia Manager'da yüklenmiş görsel ID
statusstringEvetDraft veya Published
publishDateDateTime?HayırYayın tarihi
categoryIdsGuid[]HayırKategori ID listesi
tagIdsGuid[]HayırEtiket ID listesi
translationsBlogPostTranslationRequest[]EvetDil çevirileri

BlogPostTranslationRequest

AlanTipZorunluAçıklama
languageIdGuidEvetDil ID
titlestringEvetBaşlık
contentstringEvetİçerik (HTML)
slugstringEvetURL slug
metaTitlestringHayırSEO başlığı
metaDescriptionstringHayırSEO açıklaması

Response — 201 Created:

{
"success": true,
"data": {
"id": "3fa85f64-...",
"coverImageUrl": null,
"status": "Draft",
"publishDate": "2026-04-01T10:00:00Z",
"createdAt": "2026-03-27T10:00:00Z",
"updatedAt": null,
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"title": "İlk Blog Yazısı",
"content": "<p>İçerik buraya...</p>",
"slug": "ilk-blog-yazisi",
"metaTitle": "İlk Blog Yazısı | Kompanse",
"metaDescription": "İlk blog yazımız hakkında kısa açıklama."
}
]
}
}

GET /

Blog yazılarını filtreli ve sayfalanmış olarak listeler.

Query Parametreleri:

ParametreTipVarsayılanAçıklama
pageint1Sayfa numarası
pageSizeint10Sayfa başına kayıt
statusstringDraft veya Published filtresi
categoryIdGuidKategori filtresi
tagIdGuidEtiket filtresi
searchstringBaşlıkta arama
langstringDil kodu filtresi

Response — 200 OK:

{
"success": true,
"data": {
"items": [
{
"id": "3fa85f64-...",
"coverImageUrl": "https://api.example.com/media/acme/cc4d4a1df9894a8da60f0a5e8cb8583d.webp",
"status": "Published",
"publishDate": "2026-04-01T10:00:00Z",
"createdAt": "2026-03-27T10:00:00Z",
"title": "İlk Blog Yazısı",
"slug": "ilk-blog-yazisi"
}
],
"page": 1,
"pageSize": 10,
"totalCount": 1,
"totalPages": 1
}
}

GET /{id}

Blog yazısı detayını (kategoriler, etiketler, tüm çeviriler) getirir.

Response — 200 OK:

{
"success": true,
"data": {
"id": "3fa85f64-...",
"coverImageUrl": "https://api.example.com/media/acme/cc4d4a1df9894a8da60f0a5e8cb8583d.webp",
"status": "Published",
"publishDate": "2026-04-01T10:00:00Z",
"createdAt": "2026-03-27T10:00:00Z",
"updatedAt": "2026-03-28T14:00:00Z",
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"title": "İlk Blog Yazısı",
"content": "<p>İçerik...</p>",
"slug": "ilk-blog-yazisi",
"metaTitle": "İlk Blog Yazısı | Kompanse",
"metaDescription": "Açıklama"
}
],
"categories": [
{
"id": "cat-id-...",
"isActive": true,
"createdAt": "2026-03-27T10:00:00Z",
"translations": [
{ "languageId": "...", "languageCode": "tr", "name": "Teknoloji", "slug": "teknoloji" }
]
}
],
"tags": [
{
"id": "tag-id-...",
"isActive": true,
"createdAt": "2026-03-27T10:00:00Z",
"translations": [
{ "languageId": "...", "languageCode": "tr", "name": "CMS", "slug": "cms" }
]
}
]
}
}

PUT /{id}

Blog yazısını günceller.

Request Body: CreateBlogPostRequest ile aynı yapıdadır.

Response — 200 OK: BlogPostResponse objesi döner.


DELETE /{id}

Blog yazısını siler (soft delete).

Response — 204 No Content


Medya Kullanımı

Kapak görseli atamak için:

  1. Dosyayı POST /api/tenant/media-manager/files veya POST /api/tenant/media-manager/files/images/optimized ile yükleyin.
  2. Dönen MediaFileResponse.id değerini coverImageMediaFileId alanında gönderin.
  3. Kapağı kaldırmak için update isteğinde coverImageMediaFileId: null gönderin.

Olası Hatalar

KodDurum
401Token eksik veya geçersiz
403Tenant kullanıcısı yetkisi yok veya blog modül erişimi yok
404Blog yazısı bulunamadı
409Slug veya ilişkili veri çakışması
400Geçersiz filtre, body veya medya referansı