Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Webhook Fırtınalarını Önlemek: Laravel’de İdempotans
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Webhook Fırtınalarını Önlemek: Laravel’de İdempotans

Yazılım

Webhook Fırtınalarını Önlemek: Laravel’de İdempotans

teknomers
Son güncelleme: 20 Haziran 2026 09:55
teknomers
Paylaş
Paylaş

Çift Faturalandırma Kabusu

Smart Tech Devs’te Stripe veya kurumsal CRM’ler gibi ödeme işleme sistemleri ile entegre olurken, webhook’lar kullanmak zorunludur. Ancak, dağıtık sistemler doğası gereği kaotiktir. Stripe, API’nize bir charge.succeeded webhook’u gönderdiğinde, 3 saniye içinde 200 OK HTTP yanıtı bekler.

Eğer Laravel sunucunuz kullanıcının çalışma alanını sağlamak için 4 saniye alıyorsa, Stripe teslimatın başarısız olduğunu varsayar ve bir retry tetikler. Şimdi sunucunuz, tam olarak aynı $5,000 kurumsal ücreti bir kez daha işliyor. Aniden iki çalışma alanı oluşturmuş, iki makbuz göndermiş ve muhasebe defterinizi bozmuş oluyorsunuz. Bu kaçınılmaz retry fırtınalarında hayatta kalmak için, webhook uç noktalarınızı Idempotency için mimarlamak zorundasınız.

Idempotency Nedir?

Matematik ve bilgisayar bilimlerinde, idempotent bir işlem, tek seferde veya on binlerce defa çalıştırıldığında aynı sonucu üreten bir işlemdir.

Bunu Laravel’de başarmak için, satıcı tarafından sağlanan benzersiz Olay ID’sini (örneğin, Stripe’ın evt_12345) bir Idempotency Key olarak kullanırız. Bir webhook geldiğinde, o Olay ID’sini anında veritabanımızda veya Redis önbelleğinde kilitleriz. Eğer 2 saniye sonra bir retry gelirse ve ilk görev hala işleniyorsa, sistemimiz kilidi görerek tekrar eden payload’u yok sayar ve satıcıyı memnun etmek için nazik bir 200 OK yanıtı döner.

Adım 1: Idempotent Görevi Mimarisi

Webhook işleme işini arka planda çalışan bir Queue Worker’a devrediyoruz, böylece satıcıya hemen yanıt verebiliriz ve gerçek iş mantığını katı bir atomik Redis kilidi içine sarıyoruz.


namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Cache;

class ProcessStripePayment implements ShouldQueue
{
    use Dispatchable, Queueable;

    public array $webhookPayload;

    public function __construct(array $payload)
    {
        $this->webhookPayload = $payload;
    }

    public function handle(): void
    {
        // 1. Satıcıdan gelen benzersiz Olay ID'sini çıkarıyoruz
        $eventId = $this->webhookPayload['id'];
        $lockKey = "webhook_processing_{$eventId}";

        // 2. ATOMİK KİLİT: 10 dakika boyunca bir kilit almaya çalışıyoruz.
        // get() metodu, başka bir işçi bu kilidi zaten tutuyorsa hemen false döner!
        $lock = Cache::lock($lockKey, 600);

        if (! $lock->get()) {
            // Bir retry fırtınası gerçekleşiyor! Diğer bir iş parçacığı bu tam olayı zaten işliyor.
            \Log::info("Idempotency Tetiklendi: Tekrar eden webhook {$eventId} yavaşça atlanıyor.");
            return;
        }

        try {
            // 3. Kilidi elde ettik. Kritik iş mantığını BİR KEZ yürütüyoruz.
            \Log::info("Olay {$eventId} için ödeme işleniyor...");
            
            // Çalışma alanını sağla, makbuz gönder, defteri güncelle...
            
            // 4. Gelecek benzer webhook'ların (günler sonra) da yok sayılması için kalıcı başarı kaydını tut
            Cache::put("webhook_completed_{$eventId}", true, now()->addDays(30));

        } catch (\Exception $e) {
            // 5. Eğer iş mantığımız HATA VERİRSE, diğer Stripe retry'larının güvenle denemesi için kilidi serbest bırakıyoruz.
            $lock->release();
            throw $e;
        }
    }
}

Adım 2: Kontrolcü Devretesi

API kontrolcünüz artık yalnızca bir trafik polisi. İmza doğrulamasını onaylar, görevi gönderir ve hemen bağlantıyı keser ve böylece satıcının zaman aşımını önler.


public function handleWebhook(Request $request)
{
    // (HMAC imza doğrulama aracıların geçtiğini varsayıyoruz)
    
    // Önceden bu olayı kalıcı olarak tamamlayıp tamamlamadığımızı kontrol ediyoruz
    $eventId = $request->input('id');
    if (Cache::has("webhook_completed_{$eventId}")) {
        return response()->json(['status' => 'already_processed']);
    }

    // Idempotent görevi gönder ve yanıt döndür
    return response()->json(['status' => 'queued']);
}

Mühendislik ROI’si

Idempotency, dağıtık sistemler için son güvenlik ağıdır. Atomik Redis kilitlerine ve satıcının sağladığı Olay ID’lerine dayanarak, uygulamanızın veri bütünlüğünü ağ gecikmesinin belirsizliğinden tamamen ayırırsınız. Çift faturalandırma riskini ortadan kaldırır, veritabanı bozulmasını önler ve API’nizi büyük retry fırtınalarını sorunsuz bir şekilde absorbe edecek şekilde inşa edersiniz.

Kaynak: Orijinal Makale

Contents
  • Çift Faturalandırma Kabusu
  • Idempotency Nedir?
    • Adım 1: Idempotent Görevi Mimarisi
    • Adım 2: Kontrolcü Devretesi
  • Mühendislik ROI’si
API Geçidinin Konfigürasyonunu Yedekleme — Bağlantı Başına, Geri Yükleme Güvenli
Laravel’de Eloquent ORM’ye Giriş
Bir Nav, İki Yığın: Replatforming Yapmadan Magento ve Laravel Arasında Bir Mikrofrontend
Gerçek Zamanlı Güvenlik Tarayıcısı Oluşturma – Laravel için
Her Android uygulaması için aynı backend’i yeniden oluşturmaktan bıktım — bu yüzden kendi temelimi oluşturdum.
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Çin’de 222$’lık sahte RTX 4090 satışı: Gerçek silikon değil plastik
Sonraki Makale SwitchBot’un Ayakta Durabilen Dönel Fanı ile Sıcak Havaya Son

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

SwitchBot’un Ayakta Durabilen Dönel Fanı ile Sıcak Havaya Son
Liste
Çin’de 222$’lık sahte RTX 4090 satışı: Gerçek silikon değil plastik
Donanım
ABD enerji düzenleyicisi, veri merkezi projelerini hızlandıracak
Donanım
RTX 5080 Alienware Oyun PC’sinde 1.390$ İndirimle 3.159$!
Donanım
16 yaşındaki SATA II SSD, 1 petabayt yazımda hayatta kaldı
Donanım
Ücretsiz Video Oynatıcınızı Sorunsuz Hale Getirdi, Şimdi Robotlar İçin Yeteneklerini Geliştiriyor
Genel
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?