Başlangıçta beş kritik API tümleştirme hatası
Hata # 1. Hiçbir idempotence ve geri çekilme "fırtına"
Belirtiler: yinelenen siparişler/ödemeler, tutarlarda tutarsızlık, tartışmalı iadeler, DLQ uyarıları artıyor.
Kök: taleplerin/webhook'ların ve ağ flapplerinin tekrarlanan teslimatı normaldir. "Oluştur/kapat" işlemi idempotent değilse, retrays hasarı çarpar.
Nasıl yapılır
Tüm güvensiz yöntemlere Idempotency-Key/' operation _ id '(POST/PATCH).
'Operation _ id' için veritabanında benzersiz dizin. Tekrar oynatma - önceki sonucu döndürür.
Gelen Kutusu tablosu üzerinden Webhooks ('event _ id + signature'ile tekilleştirme). Giden olaylar - Giden kutusu.
Retrai: maksimum 1-2 kez, üs + jitter, sadece güvenli işlemler için.
HTTP kuralı (örnek):http
POST/v1/ödemeler
Idempotency-Key: ik_f35a2
İçerik Türü: uygulama/json
{"miktar": 5000, "para birimi": "EUR", "kaynak": "card_..."}sql
ALTER TABLE ödemeleri ADD CONSTRAINT uniq_op UNIQUE (operation_id);Aralıkta i için python (2):
try: return call_api (yük, zaman aşımı = 0). 6)
Zaman aşımı hariç:
uyku (0. 05 2i + rastgele. üniforma (0, 0. 05))
UpstreamUnavailable öğesini yükseltin- Tüm "para/yaratma" mantığı 'operation _ id've uniq indeksine sahiptir.
- Gelen webhooks sadece idempotent işçi ile Gelen Kutusu üzerinden.
- İstemci SDK otomatik olarak Idempotency-Key'i ayarlar.
2 numaralı hata. Zaman Aşımları/Retrays vs. SLO: Bağımlılık Aşırı Isınma
Semptomlar: p95 aniden yüzer, kuyruklar büyür, devre kesici "patlama".
Kök: Yanıtın toplam SLO'su 400-600 ms'dir ve harici API'lere yapılan zaman aşımları 1-2 s'dir ve hatta × 3'ü geri alır. Yapabileceğinizden daha uzun süre yaparsınız ve bağımlılığı tekrarlarla fırtınaya sokarsınız.
Nasıl yapılır
Bütçe zamanlaması: SLO 400 ms ise, yukarı akış zaman aşımı: 250-300 ms; SLO ≤ isteğinin toplam zaman aşımı.
Sınırlar/Geri basınç: Her bağımlılığa yapılan çağrılar için semaforlar/işçi havuzu. Kalabalık - Aynı anda 429/503.
Devre kesici: Zaman aşımları/5xx ile 'açık', 'yarı açık' dozlu.
Kabul kontrolü: eşzamanlılığı kısıtlayın (iş parçacığı başına, uç nokta/PSP başına).
Örnek (Git):go sem: = make (chan struct {}, 64 )//competition limit to PSP func callPSP (ctx context. Bağlam, req Req) (Res, hata) {
seçiniz {
case sem <- struct {} {}:
Erteleme func () {<-sem} ()
c, iptal: = bağlam. WithTimeout (ctx, 300time. Milisaniye)
İptal etmeyi ertele ()
dönüş psp. Do (c, req)
varsayılan değer:
Return res {}, ErrBusy//sonsuz kuyruk yerine anında arıza
}
}- Zaman aşımları SLO'dan daha kısadır; Retrai ≤ 2; Jitter var.
- Harici API'lere havuzlar/semaforlar; Metrikli devre kesici.
- Yoğun rotalarda 429/Retry-After dönüyoruz, bağlantı kurmuyoruz.
3 numaralı hata. Zayıf Güvenlik: Webhook İmzalar, Sırlar, TLS
Belirtiler: "Diğer insanların" webhook'ları geçer, koddaki/günlükteki sırlar, MITM riskleri.
Kök: imza/tazelik kontrolü yok, sırlar env dosyalarında, eski TLS ve zayıf başlıklarda yaşıyor.
Nasıl yapılır
Webhook'ların imzası HMAC-SHA256 + 'X-Timestamp' (pencere ≤ 5-10 dakika), imzanın sıkı bir şekilde karşılaştırılması.
Kritik entegrasyonlar veya IP allow-list için mTLS.
Vault/Cloud KMS aracılığıyla sırların döndürülmesi; asgari haklar; çıkarma denetimi.
TLS 1. 2/1. Sadece 3, HSTS, doğru CORS (dar kaynak listesi).
İmza Doğrulama (Python):Python def doğrulama (sig_hdr, ts_hdr, gövde, gizli):
eğer abs (zaman. time () - int (ts_hdr))> 600: raise Expired ()
Calc = hmac. Yeni (gizli, (ts_hdr + "." + gövde). kodla (), hashlib. sha256). hexdigest ()
hmac değilse. compare_digest (calc, sig_hdr): BadSig yükseltin ()- Tüm webhook'lar imzalanmış ve doğrulanmıştır; tazelik penceresi sınırlıdır.
- KMS/Vault sırlar, rotasyon ve denetim vardır.
- TLS/HSTS etkin; CORS noktası; Uygun olduğunda IP/mTLS.
4 numaralı hata. Sözleşme sürüklenme: şema "hayatını yaşadı"
Belirtiler: Prod "sadece bazı istemcilerde" düştü, günlüklerde 500/422, SDK ve API'nin farklı sürümleri tartışıyor.
Kök: Sözleşmelerin katı bir tanımı, geriye dönük uyumsuz değişiklikler, "sessiz" alanlar, aynı isimler için farklı anlamlar yoktur.
Nasıl yapılır
Sözleşme-ilk: OpenAPI/AsyncAPI + sunucu/istemci üretimi; Olaylar için - Avro/Protobuf + Schema Registry.
Sürüm oluşturma: 'v1 - v2' (URI/header), sapma-plan, grace-period.
Geriye dönük-compat: sadece küçük sürümlerde ilave değişiklikler; v-bump olmadan silinemez/yeniden adlandırılamaz.
Sözleşme testleri: Pact/Buf - provider/consummer CI'da test edilir.
Örnekler:Yaml
OpenAPI: küçük amount_minor birimlerinde net toplam türü:
Tip: minimum tamsayı: 0 açıklama: Minimum para birimi birimlerinde toplam (tam sayı)- Sözleşmeler git'de saklanır, CI uyumsuzsa doğrular/kırılır.
- Schema olayları kaydeder, "geri/ileri" uyumluluğu.
- Değişikliklerin yerleştirme sayfası, depriction tarihleri, ortaklar için test tezgahı.
5 numaralı hata. "Kör" lansmanı: metrikler/günlükler/yollar ve sanal alan yok
Belirtiler: "Hiçbir şey görünmüyor", destek doluyor, debag - prod'da eller.
Kök: gözlemlenebilirlik dahil edilmedi, sentetik yok, sandbox "kelimelerle" test edildi.
Nasıl yapılır
KIRMIZI/KULLANIM metrikleri: rota/yöntem ile her uç nokta üzerinde hız/hata/gecikme.
Korelasyon: Tüm günlüklerde ve yanıtlarda 'trace _ id'; zapros↔vebkhuk yığını.
Sentetikler: sağlık testleri (giriş/depozito kumu), webhook'lar için SLA izleme T + 60.
Sandbox/stage: tamamen izole edilmiş anahtarlar/etki alanları, hayali PSP'ler, "raporlara dahil olmayan" girişler.
Trace ID ile yanıt:http
HTTP/1. 1 202 Kabul edildi
Trace-Id: 7f2b3d8e9c1a4
Yer :/ v1/ops/req_42/status- KIRMIZI/KULLANIM metrikleri, gösterge panoları, uyarılar (belirtiler + nedenler).
- Uçtan uca yollar; JSON kayıtları, PII yok, 'trace _ id'ile.
- Anahtar bölgelerden sentetikler; sandbox gereklidir, farklı anahtarlar.
Prelaunch Planı (T-7 - T-0)
T-7 günler:- Son sözleşme taraması: uyumsuz değişiklikler var mı; Planları dondurun.
- Sırlar/Sertifikalar: rotasyonu, erişimleri, KMS politikalarını kontrol edin.
- Sentetikler 7 × 24, uyarılar çağrıya bağlıdır.
- Yükleme mini-run (patlama 2-5 dakika): p95/havuzlar/yeşil bölgede kuyruklar.
- DRY-RUN webhooks (tekrarlar, 5xx, jitter), DLQ kontrolü.
- Ortakların "telefon rehberi": L1/L2 kişiler, savaş odası kanalı.
- SLO kapıları için kanal trafiği %5 - %25 - %50; Geri dönüşe hazır.
- Riskli özelliklerde kill-switch/feature-flags dahildir.
- Savaş odası aktiftir, durum şablonları hazırlanır.
Geri alma planı (bir şey ters giderse)
1. Trafiği önceki kararlı sürüme/rotaya bırakın.
2. Tartışmalı değişiklikleri phicheflag devre dışı bırakın.
3. Kuyrukları/havuzları dengeleyin, bir fırtınada geri çekilmeleri durdurun.
4. Olay sonrası: zaman çizelgesi, kökler, görevler toplayın (sabit ileri/sözleşme düzeltmeleri).
Kendini sınama tablosunu başlat (kısa)
Sıkça sorulan "Ya..."
... Sağlayıcı Idempotency-Key'i desteklemiyor mu?
'Hash (body)' + 'partner _ request _ id' depolayın ve idempotency girin.
... Webhooks bazen cevaptan'önce "gelir?
'Operation _ id' üzerine dikin ve geçici olarak "bilinmeyen - uzlaştırın" durumunu koruyun; Periyodik uzlaştırıcılar tutarsızlıkları kapatacaktır.
... Eski müşterileri ve yeni müşterileri desteklemeniz mi gerekiyor?
Uç noktaların ('/v1've'/v2 ') sürümü, başlık/URI ile rota, en az N ay geriye dönük uyumluluk sağlar.
Özgeçmiş Özeti
Entegrasyon başarısızlıkları neredeyse her zaman aynı şeydir: idempotency yok, yanlış zaman aşımları ve geri çekilmeler, webhook'ların zayıf imzası, sözleşme sürüklenmesi ve görünürlük eksikliği. Sözleşmeleri önceden düzeltin, gözlemlenebilirliği sağlayın, sınırları/geri yansıtıcıyı yerleştirin, tüm dış etkileşimleri imzalayın ve sentetikleri çalıştırın. Ardından, ortakların başarısızlıkları durumunda bile, serbest bırakılmanız yönetilebilir kalacaktır - retras'ta kaybedilen para olmadan ve tüm ekip için uykusuz bir gece olmadan.
