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 Versiyonu Değişince Sustu Kalan Middleware Botum ve Akıl Sağlığım

webnix

Üye
Katılım
14 Mart 2026
Mesajlar
36
🔥 "500 Internal Server Error" Değil, "0 Soul Error"

Dostlar, selam. Bu seferki hikayem, iki farklı servisi birbirine konuşturan şirin mi şirin bir middleware botuyla ilgili. Her şey yolundaydı, FastAPI ile yazdığım bot, A servisinden veriyi alıyor, biraz işliyor, B servisine güzelce yolluyordu. Ta ki A servisinin backend'cileri "Hadi bi v2'ye geçelim, daha şık olur" diyene kadar. O andan sonra botum, bir daha asla konuşmadı. Sessiz, derin, karanlık bir sessizlik.

🕵️‍♂️ Loglarda Hiçbir Şey Yok, Ama Hiç

İlk başta basit bir endpoint değişikliği sandım. Loglara baktım, bot çalışıyor gibi görünüyor ama B servisine hiç veri gitmiyor. requests kütüphanesiyle yapılan isteklerde hata fırlatmıyor, sadece boş response dönüyor. Kafayı yiyecektim. "Acaba benim kodumda mı sorun var?" diye kendi yazdığım şeyi 50 kere debug ettim. Meğerse sorun bambaşka bir yerdeymiş.

A servisinin yeni v2 API'si, eski JSON yapısını değil, tamamen farklı, iç içe geçmiş bir schema ile veri dönüyormuş. Üstelik başarılı isteklerde bile artık 200 OK değil, 201 Created dönüyormuş. Benim saf bot ise hala eski endpoint'e istek atıp, eski key'leri parse etmeye çalışıyordu. Ve en kötüsü, bu servis hata mesajlarını da çok "nazikçe", ana response body'sinin içine gömüyordu. Yani standart HTTP Status kontrolü bile işe yaramıyordu.

Python:
# Eskiden çalışan naif kod
response = requests.get("https://api-a.com/v1/data")
data = response.json()["items"] # 🚨 V2'de "items" diye bir key yok artık!

💡 Çözüm: Paranoyak Loglama ve Defansif Kodlama

Çözüm, defansif kod yazmakta ve her şeyi loglamakta yattı. Artık sadece status code'a değil, response header'daki Content-Type'a ve body'nin structure'ına da bakıyorum. Gelen verinin beklediğim formatta olup olmadığını kontrol eden bir validator yazdım. En önemlisi, artık tüm request ve response'ları (tabii ki hassas dataları maskeledikten sonra) detaylı bir şekilde logluyorum.

Python:
# Yeni ve paranoyak yaklaşım
response = requests.get("https://api-a.com/v2/data")
log(f"Status: {response.status_code}, Headers: {dict(response.headers)}")

if response.status_code not in [200, 201]:
    raise CustomAPIError("Beklenmeyen status kodu!")

raw_data = response.json()
# Gelen verinin şeması doğru mu?
if not validate_schema(raw_data):
    log(f"Şema uyumsuz! Gelen veri: {raw_data}")
    raise InvalidDataError("API şeması değişmiş olabilir.")

Sonuç olarak, başka servislere bağımlı çalışan bir bot/middleware yazıyorsanız, onların sizi habersiz değiştirebileceğini ASLA unutmayın. API dokümanı? O sadece bir "niyet beyanıdır". Gerçek hayat, loglarınızda saklıdır.

Siz de böyle "sessiz katil" API değişiklikleri yaşadınız mı? Bu tarz external dependency'leri nasıl sağlamlaştırıyorsunuz? Belki Circuit Breaker pattern falan mı kullanmalıyım artık?
 

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