🔧 A4 · HTTP Metotları: GET / POST / PUT / PATCH / DELETE
A4 · HTTP Metotları: GET / POST / PUT /: HTTP metotları, bir bug kaydı üzerindeki **eylem fiilleridir**; tıpkı bir dosya dolabındaki hareketler gibi: **GET** = klasörü aç ve OKU
HTTP metotları, bir bug kaydı üzerindeki **eylem fiilleridir**; tıpkı bir dosya dolabındaki hareketler gibi: **GET** = klasörü aç ve OKU (hiçbir şeyi değiştirmeden), **POST** = yeni bir kağıt EKLE, **PUT** = kağıdı komple YENİSİYLE DEĞİŞTİR, **PATCH** = kağıdın tek satırını DÜZELT, **DELETE** = kağıdı ÇÖPE AT. Peki hepsi "veriye dokunuyorsa" neden ayrı fiillere ihtiyaç var? Çünkü her fiilin **güvenlik ve tekrarlanabilirlik** sözü farklıdır: GET güvenlidir (100 kez çağır, hiçbir şey değişmez), POST idempotent DEĞİLDİR (iki kez çağırırsan iki kayıt), PUT/DELETE ise idempotenttir (beş kez çağır, sonuç bir kezki ile aynı). Java'da bunun karşılığı bir metodun yan etkisidir: `getBug()` saf bir okuyucudur, `createBug()` her çağrıda listeyi büyütür, `deleteBug(id)` ilk çağrıda siler, sonrakiler zaten silinmişi bulur. QA açısından kritik: bir "ödeme" endpoint'i POST ile yazıldıysa ve kullanıcı butona iki kez basarsa, idempotency yoksa **çift tahsilat** olur — testerın "aynı request'i iki kez göndererek" bu sınıf hataları avlaması gerekir.
🎬 Çift Tıklama Tehlikesi: POST Neden Idempotent Değildir?
Kullanıcı (çift tık)
Kullanıcı "Bug Oluştur" butonuna sabırsızlıkla İKİ kez basıyor. GET olsaydı sorun olmazdı — ama bu bir POST.
İlk POST sunucuya gider ve yeni bir bug oluşturur (id: 42). Buraya kadar her şey normal.
İkinci POST de gider — sunucu bunun aynı request olduğunu BİLMEZ, çünkü POST idempotent değildir. İkinci bir kayıt daha oluşturur (id: 43).
Sonuç: aynı bug iki kez kaydedildi. Bir ödeme endpoint'inde bu, çift tahsilat demektir — sessiz ama pahalı bir bug.
Ders — Tester bu sınıf bugları "aynı POST'u iki kez göndererek" avlar. Idempotency gerekiyorsa geliştirici PUT ya da idempotency-key kullanmalıdır.
PUT ile PATCH Farkı: Komple mi, Tek Satır mı?
PUT komple değiştirir…
PUT /api/v1/bugs/42 gönderdiğin gövdenin TAMAMINI yazar; göndermediğin alan (örn. severity) SİLİNİR/sıfırlanır.
PATCH tek alanı düzeltir…
PATCH /api/v1/bugs/42/status yalnızca status alanını değiştirir; diğer alanlara DOKUNMAZ.