Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

API response'larını standartlaştırmak için kullandığım wrapper yapısı ve hata mesajı formatlama şablonum

asternix

Üye
Katılım
14 Mart 2026
Mesajlar
30
Merhaba arkadaşlar, bugün sizlerle uzun süredir backend projelerimde kullandığım ve başımı ağrıtmaktan kurtaran bir yapıdan bahsedeceğim. Özellikle Laravel ve Node.js ile geliştirme yaparken, frontend tarafından gelen "API'den tutarsız cevaplar geliyor" şikayetleri beni de çok yormuştu. Farklı endpoint'ler farklı formatlarda success/error dönüyor, hata mesajları bazen string bazen array oluyordu. İşte bu kaosu bitirmek için kendi standart wrapper'ımı oluşturdum.

🔥 Neden Standart Bir Yapı Şart?

Bu sorunu ilk ciddi projemde yaşadığımda gerçekten kafayı yemiştim. Frontend ekibi, her endpoint için farklı bir response formatı parse etmek zorunda kalıyordu. Bazen `{data: {...}}` bazen direkt obje dönüyorduk. Hatalarda ise durum daha vahimdi; validation hataları, auth hataları, server hataları... Hepsi farklı bir şekilde geliyordu. Bu durum hem frontend development'ı yavaşlatıyor hem de debugging'i kabusa çeviriyordu. "Artık yeter!" deyip kolları sıvadım.

📦 Response Wrapper Sınıfım (Laravel Örneği)

İlk olarak tüm başarılı response'ları aynı kalıba sokan bir sınıf yazdım. Amacım, her zaman `data`, `message` ve `status` alanlarını içeren tutarlı bir JSON döndürmek.

PHP:
<?php

namespace App\Helpers;

class ApiResponse
{
    public static function success($data = null, string $message = 'İşlem başarılı.', int $httpCode = 200)
    {
        return response()->json([
            'status' => 'success',
            'message' => $message,
            'data' => $data,
        ], $httpCode);
    }

    public static function error(string $message = 'Bir hata oluştu.', $errors = null, int $httpCode = 400)
    {
        $response = [
            'status' => 'error',
            'message' => $message,
        ];

        // Hata detaylarını sadece development ortamında veya özel durumlarda göster
        if ($errors !== null && config('app.debug')) {
            $response['errors'] = $errors;
        }

        return response()->json($response, $httpCode);
    }
}

Bu sınıfı kullanmak inanılmaz basitleşti. Controller'da artık şöyle yazıyorum:

PHP:
// Başarılı Response
return ApiResponse::success($user, 'Kullanıcı başarıyla getirildi.');

// Başarılı ama ekstra mesajlı
return ApiResponse::success($posts, 'Postlar listelendi.', 201);

// Hata Response'u
return ApiResponse::error('Geçersiz token.', null, 401);

// Validation Hatası (Laravel Validator'dan gelen $errors)
return ApiResponse::error('Doğrulama hatası.', $validator->errors(), 422);

🚨 Hata Mesajı Formatlama Şablonu

Sadece wrapper yetmez! Hata mesajlarının da anlamlı ve işlenebilir olması gerekiyor. Frontend'in hatayı kullanıcıya gösterebilmesi veya loglayabilmesi için standart bir hata objesi oluşturdum. Burada önemli olan, 'code' alanı. Her hatayı bir kodla eşleştiriyorum.

PHP:
public static function formattedError(string $internalCode, string $userMessage, $technicalDetails = null, int $httpCode = 400)
{
    $errorMap = [
        'AUTH_001' => 'Geçersiz kimlik bilgileri.',
        'VAL_001' => 'Girilen veriler geçersiz.',
        'DB_001' => 'Veritabanı işlemi sırasında hata.',
        // ... Diğer hata kodları
    ];

    $response = [
        'status' => 'error',
        'message' => $userMessage,
        'error' => [
            'code' => $internalCode,
            'description' => $errorMap[$internalCode] ?? 'Tanımsız hata kodu.',
        ]
    ];

    // Debug modunda teknik detayları da ekle (stack trace, exception mesajı vb.)
    if (config('app.debug') && $technicalDetails) {
        $response['error']['debug'] = $technicalDetails;
    }

    return response()->json($response, $httpCode);
}

Kullanımı şöyle:

PHP:
try {
    // ... riskli işlem
} catch (AuthenticationException $e) {
    return ApiResponse::formattedError('AUTH_001', 'Giriş yapılamadı.', $e->getMessage(), 401);
} catch (ValidationException $e) {
    return ApiResponse::formattedError('VAL_001', 'Lütfen form alanlarını kontrol edin.', $e->errors(), 422);
}

✅ Elde Ettiğim Kazanımlar

Bu yapıyı kurduktan sonra hayatım çok kolaylaştı. Frontend artık response'un formatından emin. Her zaman `status` alanına bakıp işlemin başarılı mı hatalı mı olduğunu anlıyor. Hata durumunda, gelen `error.code` ile hatanın kaynağını loglayabiliyor veya kullanıcıya daha spesifik bir mesaj gösterebiliyor. API dokümantasyonu yazmak da inanılmaz derecede standartlaştı.

Siz backend geliştiriciler, API response'larınızı nasıl standartlaştırıyorsunuz? Laravel için `Resources` & `Collections` mı kullanıyorsunuz yoksa benimki gibi merkezi bir helper mı? Ya da Node.js'te (Express) benzer bir yapı kurmak için middleware veya utility fonksiyonlar mı yazıyorsunuz? Deneyimlerinizi ve farklı yöntemlerinizi yorumlarda paylaşırsanız çok sevinirim!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri