design

Laravel'de API Versioning: Backward Compatibility

April 4, 2025


API'nizi güncellerken eski istemcileri mutlu etmek mi istiyorsunuz? Laravel'de backward compatible API sürüm yönetimiyle tanışın! İşte profesyonel çözümler:


Neden API Sürüm Yönetimi? 🤔

  • Eski mobil uygulamalar çalışmaya devam etmeli 📱
  • Yeni özellikler eklerken eski endpoint'leri bozmama ➕
  • Kademeli geçiş imkanı 🚦
  • Daha kontrollü yayın süreçleri ⏳


1. En İyi Sürüm Stratejileri 🧩

URL ile Sürümleme (En Popüler)

// routes/api.php
Route::prefix('v1')->group(function () {
    Route::get('users', [UserControllerV1::class, 'index']);
});

Route::prefix('v2')->group(function () {
    Route::get('users', [UserControllerV2::class, 'index']);
});

✔️ Avantaj: Debug kolaylığı

✔️ Kullanım: Kurumsal API'ler için ideal


Header ile Sürümleme (Daha Temiz)

// Middleware
$version = $request->header('X-API-Version', 'v1');
config(['app.api_version' => $version]);


2. Backward Compatibility Nasıl Sağlanır? 🔄

Strateji Deseni ile Çözüm


// UserServiceProvider.php
$this->app->bind(UserRepository::class, function () {
    return match(config('app.api_version')) {
        'v1' => new UserRepositoryV1(),
        'v2' => new UserRepositoryV2(),
        default => throw new Exception('Unsupported API version')
    };
});


Transformer Kullanımı

class UserTransformerV1 {
    public function transform($user) {
        return ['full_name' => $user->name];
    }
}

class UserTransformerV2 {
    public function transform($user) {
        return [
            'first_name' => explode(' ', $user->name)[0],
            'last_name' => explode(' ', $user->name)[1] ?? ''
        ];
    }
}


3. Sürüm Geçiş Best Practices 🏆

Minimum 6 ay destek: Eski sürümleri hemen kaldırmayın

Deprecation header'ı ekleyin:


return response()
    ->json($data)
    ->header('Deprecation', 'true')
    ->header('Sunset', 'Mon, 31 Dec 2024 23:59:59 GMT');

Dökümantasyonu güncel tutun 📚

İstemcilere geçiş süresi tanıyın ⏰


4. Otomatik Yönlendirme Sistemi ⚡

// ApiVersion middleware
public function handle($request, $next)
{
    $version = $this->detectVersion($request);
    
    if ($version === 'v1' && $this->isDeprecated('v1')) {
        return response()->json([
            'message' => 'v1 API is deprecated',
            'migration_guide' => 'https://...'
        ], 410);
    }
    
    return $next($request);
}


Sorunsuz API Evrimi 🎯

Laravel'de doğru sürüm yönetimiyle:

  • Yeni özellikler ekleyebilir 🆕
  • Eski istemcileri koruyabilir 🛡️
  • Kullanıcı deneyimini koruyabilirsiniz ✨

API sürüm geçişlerinde hangi stratejiyi kullanıyorsunuz? Yorumlarda paylaşın! 💬

Bir sonraki yazımız: 🚀 [Laravel'de Error Handling: Özel Hata Sayfaları ve Loglama] - Kullanıcı dostu hata yönetimi rehberi!

#Laravel #APIDesign #Versioning #BackendDevelopment #BestPractices 🚀

9 + 3 =