OpenAPI şemasını önce mi yazmalıyım yoksa koddan mı üretmeliyim?
Soru
Laravel 11 ile bir REST API geliştiriyorum ve dokümantasyonu ayrı bir OpenAPI dosyasında elle tutuyorum. Controller'larda endpoint'ler değiştikçe yayınladığım dokümanı güncellemeyi unutuyorum; kod ile şema sürekli birbirinden uzaklaşıyor. Entegrasyon yapan partner'lar "dokümanda şu alan var ama response'ta yok" diye sürekli ticket açıyor ve bu güveni yiyor. Şemayı önce mi yazmalıyım (contract-first) yoksa koddan otomatik mi üretmeliyim (Scramble/L5-Swagger)? Hangisi drift'i gerçekten bitirir?
Cevap
Kısa cevap: Asıl sorununuz “spec-first mi, code-first mi” değil — drift’in kendisi. Hangi yönü seçerseniz seçin, spec ile kodu CI’da birbirine karşı doğrulamadığınız sürece ikisi yine ayrışacak. Yön bir tercih; doğrulama ise zorunluluk.
- İki yaklaşımın gerçek farkı. Code-first’te (Scramble, L5-Swagger) şemayı controller’lardan ve annotation’lardan üretirsiniz; implementasyona sadık kalır ama tasarımı koda gömer, review’ı zorlaştırır ve annotation gürültüsü birikir. Contract-first’te önce
openapi.yaml’ı yazar, kodu ona uydurursunuz; tasarımı önden konuşturur ama disiplin ister. - Drift’i bitiren tek şey doğrulamadır. Yön ne olursa olsun, bir contract test olmadan yayınladığınız şema ile gerçek response yine kayar. Sizin ticket’larınız tam bu boşluktan geliyor — kimse elle senkron tutmayı sürdüremez.
- Partner’ınız varsa contract-first seçin. Sözleşmeyi önce yayınlarsınız; partner Prism gibi bir mock server ile sizi beklemeden geliştirir, siz de implementasyonu sözleşmeye kilitlersiniz. Sözleşme tartışması koda dökülmeden biter.
- Laravel’i spec’e bağlayın.
openapi.yaml’ı repo’ya koyun, PR’da Spectral ile lint edin ve Spectator ile her endpoint’in gerçek response’unu şemaya karşı doğrulayın:
$this->getJson('/api/orders/42')
->assertValidResponse(200); // openapi.yaml'a göre şema doğrulaması
- Tek doğru kaynağı (SSOT) belirleyin.
openapi.yamltek gerçek olsun; yayınladığınız dokümanlar da, partner’ların ürettiği client’lar da CI’da o dosyadan türesin. İki kaynağınız varsa drift garantidir. - Maliyeti kabul edin. Contract-first bir öğrenme eğrisi ve YAML disiplini ister; code-first hızlı başlar ama tasarım review’ı zayıf kalır. Karar, ekibinizin sözleşmeyi elle sürdürecek olgunlukta olup olmamasıyla ilgili.
Sonuç: Ben olsam contract-first giderdim: openapi.yaml SSOT olur, PR’da Spectral lint çalışır, testlerde Spectator ile request/response doğrulanır, docs ve partner client’ları CI’da bu dosyadan üretilir. Kritik olan yön değil, o yeşil contract test — drift tespitini kod review’ın insafına değil pipeline’a yıktığınız an ticket’lar kesilir.
İlgili Yazılar
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.