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
statusstring—Draft veya Published filtresi
categoryIdGuid—Kategori filtresi
tagIdGuid—Etiket filtresi
searchstring—Başlıkta arama
langstring—Dil 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ı