API versiyonlama yöntemleri nelerdir? Geriye dönük uyumluluğu nasıl korursunuz?
Cevap
Versiyonlama, mevcut istemcileri bozmadan API'yi geliştirebilmek içindir.
Yöntemler
| Yöntem | Örnek | Artı | Eksi |
|---|---|---|---|
| URL path | /v1/orders | Açık, kolay test, cache dostu | URL kaynağı değil versiyonu da taşır |
| Query param | /orders?version=2 | Kolay | Unutulabilir, cache karmaşası |
| Header | Api-Version: 2 | URL temiz kalır | Tarayıcıdan test zor, görünmez |
| Media type | Accept: application/vnd.firma.v2+json | REST'e en uygun | Karmaşık |
Pratikte en yaygın yöntem URL path'tir. Stripe gibi bazı API'ler tarih bazlı header versiyonları kullanır (Stripe-Version: 2024-06-20).
Breaking vs non-breaking değişiklik
Non-breaking (aynı versiyonda yapılabilir):
- Yeni endpoint eklemek
- Yanıta yeni, opsiyonel alan eklemek
- Yeni opsiyonel istek parametresi
Breaking (yeni versiyon gerektirir):
- Alan silmek veya adını değiştirmek
- Alanın tipini değiştirmek (
idsayıdan string'e) - Opsiyonel alanı zorunlu yapmak
- Hata kodlarını veya anlamını değiştirmek
Geriye dönük uyumluluk pratikleri
- İstemcilerin bilinmeyen alanları yok saymasını bekleyin (tolerant reader).
- Yeni versiyonu yayınlayınca eskisini hemen kapatmayın;
DeprecationveSunsetbaşlıklarıyla duyurun. - Eski versiyonun kullanımını metriklerle izleyin, istemcilerle iletişim kurun.
- Versiyonu yalnızca major değişiklikte artırın; her küçük değişiklikte v3, v4 açmak bakım yükünü katlar.
- Mümkünse versiyonlar arası farkı ayrı controller kopyaları yerine bir dönüşüm katmanıyla yönetin.
İlgili API Tasarımı soruları
- HTTP 401 ile 403 durum kodları arasındaki fark nedir?
- JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?
- Idempotency nedir? Hangi HTTP metotları idempotent'tir?
- OAuth 2.0 nedir? Authorization Code (PKCE) ve Client Credentials akışları nasıl çalışır?
- Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.
- gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.