Rehberlik ve içgörü

Idempotent İş Ortağı API Otomasyonu: Yinelenen Yan Etkiler Olmadan Yapay Zeka Müşterilerini, Anahtarlarını ve Kredilerini Tedarik Edin

İş Ortağı API otomasyonu çoğunlukla ilk istekten sonra başarısız olur: zaman aşımları, yinelenen web kancası etkinlikleri, eş zamanlı çalışanlar ve para ayrıştırma hataları. Dayanıklı operasyonlar, istikrarlı idempotency anahtarları, tam ondalık işleme ve mutabakat etrafında provizyon ve kredi iş akışları oluşturun.

Kayıt çalışanı bir müşteri grubu oluşturur, HTTP isteği zaman aşımına uğrar ve işi çalıştıran yeni bir istekle yeniden dener. Artık aynı müşterinin iki grubu, iki API anahtarı veya yanlış yukarı akış nesnesine işaret eden yerel bir veritabanı kaydı olabilir. Bir ödeme webhook'u bir dakika sonra gelir, iki kez teslim edilir ve webhook işleyicisi her teslimatı yeni bir iş olayı olarak ele aldığından müşteriye iki kez kredi verilir.

İş Ortağı API otomasyonunda gerçek hata modu budur. İlk başarılı arama nadiren işin zor kısmıdır. İşin zor kısmı, ağlar çöktüğünde, çalışanlar çöktüğünde, kullanıcılar çift tıkladığında, ödeme sağlayıcılar web kancalarını yeniden denediğinde ve finans verilerinin daha sonra mutabakata varılması gerektiğinde iş amacını korumaktır.

Pratik model basittir: Değişen her İş Ortağı API eylemini, bir ateşle ve unut HTTP isteği olarak değil, dayanıklı bir iş operasyonu olarak ele alın. Bu, yerel işlem kayıtlarının saklanması, idempotency anahtarlarının kasıtlı olarak kullanılması, paranın tam olarak ayrıştırılması, web kancalarının eşzamansız olarak işlenmesi ve telafi edici değişiklikler yapılmadan önce bilinmeyen sonuçların uzlaştırılması anlamına gelir.

Ayrı Gerçekler, Öneriler ve Tahminler

Gerçekler

Model Gate'in İş Ortağı API belgeleri, POST, PATCH ve DELETE isteklerinin bir Idempotency-Key gerektirdiğini, zaman aşımlarından sonra yeniden deneme yapanların aynı anahtarı yeniden kullanması gerektiğini ve idempotency kayıtlarının 7 gün boyunca saklandığını belirtir.

Aynı belgelerde parasal değerlerin ve sınırların JSON ondalık dizeleri olduğu belirtilmektedir. Bunlar, ikili kayan nokta türleri aracılığıyla dönüştürülmemeli, tam ondalık değerler veya dizeler olarak ele alınmalıdır.

İş Ortağı API'si, bakiye, denetim etkinlikleri, gruplar, anahtarlar, istekler ve işlemler için yönetim ve raporlama yüzeylerini kullanıma sunar. Denetim etkinlikleri, istek kimliği, eylem, hedef, kaynak IP'si, durum, güvenli meta veriler ve UTC zaman damgası gibi alanlarla başarılı yönetim değişikliklerini kaydeder.

Oluşturma ve güncelleme işlemlerini güvenli bir şekilde yeniden denemenin bir yolu olarak belgelerin kimlik anahtarlarını şeritleyin. Webhook kılavuzu ayrıca uç noktaların aynı etkinliği birden fazla kez alabileceği konusunda uyarıda bulunur ve işlenen etkinlik kimliklerinin günlüğe kaydedilmesini ve eşzamansız olarak işlenmesini önerir.

AWS ve Azure rehberliği aynı dağıtılmış sistem kuralını güçlendirir: Yeniden denemeler faydalıdır ancak değiştirme işlemleri, sunucunun arayanın amacını koruyabilmesi için arayan tarafından sağlanan bir istek tanımlayıcısına veya eşdeğer bir tekrarlanabilirlik sözleşmesine ihtiyaç duyar.

Öneriler

Temel hazırlık, anahtar oluşturma, harcama limiti değişiklikleri, kredi yüklemeleri, cüzdan kontrolleri ve webhook odaklı sipariş karşılama için tek bir yerel operasyon defteri kullanın. Defteri, niyet, girişimler, yukarı yöndeki istek kimlikleri, sonuçta ortaya çıkan hedef kimlikleri ve mutabakat durumu için entegrasyonun dayanıklı gerçek kaynağı haline getirin.

Niyetinin istikrarlı olduğu istikrarlı iş amacından bağımsızlık anahtarları oluşturun. Zaman aşımı veya bilinmeyen sunucu sonucundan sonra aynı anahtarı yeniden kullanın. Yalnızca iş operasyonu kasıtlı olarak yeni olduğunda yeni bir anahtar oluşturun.

Web kancalarını iki aşamada işleyin: Etkinlik kimliğini hızla doğrulayın ve kalıcı hale getirin, ardından iş eylemini eş zamanlı olmayan bir çalışan aracılığıyla eşzamansız olarak gerçekleştirin.

Tahminler

Daha fazla ajans ve SaaS platformu yapay zeka erişimini yeniden sattıkça, destek sorunları temel API bağlantısından mutabakata doğru kayacak: mükerrer müşteri temel hazırlığı, tartışmalı krediler, eşleşmeyen cüzdan bakiyeleri ve belirsiz denetim izleri. Kalıcı yerel işlem kayıtlarını tutan entegrasyonların desteklenmesi, yalnızca HTTP yanıtlarına ve günlüklere dayanan entegrasyonlara göre daha kolay olacaktır.

Yerel Ortak Operasyon Defteri Oluşturun

İşlem defteri, ilk İş Ortağı API isteği gönderilmeden önce iş operasyonunu kaydeder. Eklemeye uygun, müşteri tarafından sorgulanabilir ve iki çalışanın aynı işlemi aynı anda gerçekleştirmesini önleyecek kadar katı olmalıdır.

Yararlı bir şema şuna benzer:

partner_operations
- işlem_kimliği // dahili UUID
- external_customer_id // müşteriniz, kiracınız veya hesap kimliğiniz
- eylem // create_group, create_key, set_limit, top_up_credit
- idempotency_key // isteklerin değiştirilmesi için İş Ortağı API'sine gönderildi
- request_fingerprint // yöntem, yol ve anlamlı gövdenin kanonik karması
- model_gate_request_id // X-Request-ID veya mevcut olduğunda eşdeğer yanıt tanımlayıcı
- target_public_id // grup kimliği, anahtar kimliği, işlem kimliği veya elde edilen diğer nesne
- durum // beklemede, başarılı, başarısız_yeniden denenebilir, başarısız_son, uzlaştırılıyor
- deneme_sayımı
- son_hata_kodu
- son_hata_mesajı
- created_at
- güncellendi_at
- kilitli_until

Önemli kısıtlama, iş amacına göre benzersizliktir. Örneğin, external_customer_id + action + Signup_version, ilk temel hazırlık için benzersiz olabilir. İkinci kasıtlı ekleme, birinciyle çakışmamalıdır; farklı bir işlem kimliğine ve önemsizlik anahtarına sahip olmalıdır.

Kayıt akışı için provision_customer gibi tek bir ana işlem oluşturun, ardından create_group, create_key ve set_initial_limit için alt işlemleri izleyin. Bu, kullanıcı arayüzünün müşteriye yönelik bir durumu göstermesine olanak tanırken, arka uç hangi harici mutasyonun takılıp kaldığı konusunda kesin bilgi sahibi olur.

İş Amacından Kimlik Anahtarları Oluşturma

Idempotency anahtarları, yeniden denemelerde hayatta kalabilecek kadar kararlı ve iki farklı işlemin tek bir operasyonda toplanmasını önleyecek kadar spesifik olmalıdır. Belirleyici bir format, destek ve uzlaşma ekiplerinin sistem hakkında akıl yürütmesine yardımcı olur.

müşteri için-grup oluştur:{customer_id}:{signup_version}
müşteri için anahtar oluştur:{müşteri_id}:{group_id}:{key_amaç}:{sürüm}
set-spend-limit:{customer_id}:{group_id}:{limit_policy_version}
yükleme:{customer_id}:{payment_event_id}:{ledger_entry_id

İşlem aynı olduğunda ve önceki sonuç bilinmediğinde aynı idempotency anahtarını kullanın. Örnekler arasında istemci zaman aşımı, istek gövdesi gönderildikten sonra bağlantının sıfırlanması, çalışanın yanıtı kaydetmeden önce çökmesi veya sunucunun mutasyonu zaten tamamlamış olabileceği bir 5xx yer alır.

İş amacı değiştiğinde yeni bir geçicilik anahtarı kullanın. İkinci bir kredi paketi satın alan müşteri yeni bir kontör yüklemesidir. Yöneticinin harcama limitini ayrı bir onay sonrasında 100,00'dan 250,00'a yükseltmesi yeni bir işlemdir. İstek gövdesinde önemli bir değişiklik olması durumunda düzeltilmiş bir kayıt şablonunun anahtarın yeni bir sürümüne de ihtiyacı olabilir.

Anahtarın yanında bir istek parmak izi saklayın. Kodunuz aynı önemsizlik anahtarını farklı bir yük ile yeniden kullanmaya çalışırsa, İş Ortağı API'sini çağırmadan önce yerel olarak başarısız olun. Bu kontrol, şablon taşıma işlemleri ve kısmi yeniden denemeler sırasındaki ince hataları yakalar.

Müşterilere Durum Makinesi Olarak Hizmet Sağlayın

Temel hazırlık çalışanı, tek bir işlemin veritabanınızı, İş Ortağı API'sini ve aşağı yönlü faturalandırma sistemlerini kapsayabileceğini varsaymak yerine açık durumlar üzerinden ilerlemelidir.

pending_create_group
  - yerel operasyon kaydı oluştur
  - Idempotency-Key ile grup oluşturma isteği gönderin
  - mağaza istek kimliği ve grup genel kimliği

group_created_key_pending
  - anahtar işlem kaydı oluştur
  - Idempotency-Key ile anahtar oluşturma isteği gönder
  - anahtar meta verileri ve sırrı güvenlik politikanıza göre saklayın

key_created_limit_pending
  - harcama limiti işlem kaydı oluştur
  - Idempotency-Key ile limit güncellemesi gönder
  - ortaya çıkan politika sürümünü veya hedef kimliğini saklayın

sağlanmış
  - müşteriyi hazır olarak işaretleyin
  - iç denetim olayı yaymak
  - ürün sistemlerini bilgilendirin

Bu durum makinesi, çökmeleri yaşanabilir hale getiriyor. Çalışan, grubu oluşturduktan sonra ancak anahtarı kaydetmeden önce ölürse, yedek çalışan operasyon defterini inceleyebilir, aynı kayıtsızlık anahtarını yeniden kullanabilir ve devam edebilir. Grup yukarı yönde mevcutsa ancak yerel kaydetme başarısız olduysa mutabakat, gözü kapalı başka bir nesne oluşturmak yerine grup, anahtar, işlem ve denetim yüzeyleri aracılığıyla hedefi bulabilir.

Parayı Ondalık Veri Olarak İşleyin

Krediler, cüzdan bakiyeleri, harcama limitleri, kullanım toplamları ve işlem tutarları ikili kayan nokta türlerinden geçmemelidir. 0,10 gibi bir değer bir ölçüm değil, finans değeridir. Orijinal JSON ondalık dizesini besleme sınırında saklayın ve aritmetik için yalnızca tam bir ondalık sayı türüne dönüştürün.

JavaScript'te, faturalandırma mantığını Numara etrafına yazmayın. Ondalık kütüphane kullanın veya değerleri özel bir para modülüne ulaşana kadar dizeler halinde tutun. Python'da, kayan noktalardan değil, dizelerden Decimal kullanın. Veritabanlarında, aritmetiğin gerekli olduğu yerlerde sabit ölçekli sayısal sütunlar ve tam yukarı akış temsilinin korunmasının denetim için yararlı olduğu durumlarda metin sütunları kullanın.

// Hatalı: ikili kayan nokta dönüşümü
const sınırı = Sayı(apiResponse.spend_limit);

// Daha iyi: tam ondalık sınır
const limit = new Decimal(apiResponse.spend_limit);

Aynı kuralı karşılaştırmalara da uygulayın. Bir tarafı kuruşa ve diğer tarafı sağlayıcı hassasiyetine yuvarlayan bir harcama sınırı kontrolü, isteklerin hatalı şekilde engellenmesine veya izin verilmesine neden olabilir. Bir dahili hassasiyet politikası tanımlayın, bunu belgeleyin ve sıfır etrafındaki sınır değerlerini, minimum ekleme tutarlarını ve geçişleri sınırlayın.

Webhook Beslemesini Sıkıcı Hale Getirin

Web kancası işleyicileri, satır içi karmaşık temel hazırlık gerçekleştirmemelidir. İşleyicinin görevi olayın kimliğini doğrulamak, kimliğini sürdürmek ve hızla geri dönmektir. Gerçekleştirme, güvenli bir şekilde yeniden deneyebilen bir çalışana aittir.

payment_webhook_events
- sağlayıcı
- event_id
- event_type
- alınan_at
- payload_hash
- işleme_durumu
- ilgili_müşteri_kimliği
- ilgili_işlem_kimliği
- son_hata

provider + event_id'ye benzersiz bir kısıtlama koyun. Aynı olay iki kez gelirse, zaten depolandığını veya işlendiğini onayladıktan sonra başarıyı döndürün. Teslimat iki kez gerçekleştiği için bir cüzdana iki kez kredi vermeyin.

Karşılama çalışanı eşleşen top_up_credit işlemini oluşturmalı veya bulmalıdır. Bağımsızlık anahtarı, ödeme olayı kimliğini ve dahili defter giriş kimliğinizi içerebilir. Çalışan, Partner API yüklemesi başarılı olduktan sonra ancak yerel durum güncellenmeden önce çökerse, bir sonraki denemede aynı anahtar yeniden kullanılır ve sonuçta ortaya çıkan işlemin mutabakatı sağlanır.

İş Ortağı API Çağrılarını Değiştirmeye İlişkin Kuralları Yeniden Deneyin

Yeniden denemeler kurallara ihtiyaç duyar. Bunlar olmadan yeniden deneme kodu, yinelenen yan etki oluşturucuya dönüşür.

Ağ zaman aşımları, bağlantı sıfırlamaları ve bilinmeyen 5xx sonuçları için, belgelenen saklama süresi içinde aynı Idempotency-Key ile aynı isteği yeniden deneyin. Her girişimi operasyon defterine kaydedin.

429 yanıt için, sağlandığında Sonra Yeniden Dene'ye uyun ve aynı işlem için aynı önemsizlik anahtarını koruyun. Hız sınırlaması işin amacını değiştirmez.

Doğrulama hataları durumunda otomatik olarak yeniden denemeyin. İşlemi başarısız olarak işaretleyin, belirli hatayı ortaya çıkarın ve amaçlanan veri yükü değişirse yeni bir istek parmak iziyle düzeltilmiş bir işlem yapılmasını isteyin.

Değiştirilmiş bir veri yükünün neden olduğu bir idempotency-anahtar çakışması durumunda durun. Bu yerel bir hata veya güvenli olmayan bir yeniden denemedir. İş operasyonu açıkça yeni olmadığı ve iş akışı tarafından onaylanmadığı sürece otomatik olarak yeni bir anahtar oluşturmayın.

Telafi Etmeden Önce Bilinmeyen Sonuçları Uzlaştırın

Bilinmeyen bir sonuçtan sonra, en güvenli sonraki adım genellikle telafi edici bir mutasyon değildir. Öncelikle ne olduğunu sorun.

İdempotency anahtarını, istek parmak izini ve bilinen son istek kimliğini bulmak için işlem defterini kullanın. Ardından ilgili İş Ortağı API yüzeylerini kontrol edin: temel hazırlık için grup ve anahtar listeleri, kredi yükleme işlemleri için işlemler, cüzdan durumu için bakiye, kullanım için istek kayıtları ve yönetim mutasyonları için etkinlikleri denetleme.

Pratik bir uzlaşma sırası şöyledir:

  1. Yerel işlem kaydını bir kilitle yeniden yükleyin.
  2. Hala bekletme penceresi içindeyse ve istek parmak izi eşleşiyorsa orijinal mutasyonu aynı önemsizlik anahtarıyla yeniden deneyin.
  3. Yeniden deneme durumu çözmezse ilgili listeyi sorgulayın veya müşteri meta verilerini, grup kimliklerini, anahtar kimliklerini, işlem kimliklerini veya zaman damgalarını kullanarak uç noktaları alın.
  4. İstek kimliğine, eyleme, hedefe ve UTC zaman damgasına bağlı başarılı yönetim mutasyonları için denetim etkinliklerini inceleyin.
  5. Yerel işlemi kanıtla birlikte başarılı, failed_final veya reconciliation_needed olarak güncelleyin.
  6. Yalnızca yukarı akış durumu onaylandıktan ve telafi için yeni bir işlem kaydedildikten sonra telafi edici bir mutasyon yayınlayın.

7 günlük geçicilik tutma penceresi, normal yeniden deneme pencereleri için kullanışlıdır ancak bir muhasebe arşivi değildir. Destek, finans ve gecikmiş anlaşmazlıklar için kalıcı yerel kayıtlar tutun.

Takılı Kalmış Durumlar için Runbook

pending_create_group

Bir işlem kaydının mevcut olup olmadığını ve idempotency anahtarının gönderilip gönderilmediğini kontrol edin. İstek Partner API'sine ulaşmış olabilirse aynı anahtarla yeniden deneyin. İsteğin gönderildiğine dair bir kanıt yoksa orijinal isteği gönderin ve ortaya çıkan istek kimliğini saklayın.

group_created_key_pending

Grup hedef kimliğini yerel olarak ve yukarı yönde doğrulayın. İkinci bir grup oluşturmayın. Anahtar işlemini kendi idempotency anahtarıyla oluşturun veya yeniden deneyin.

key_created_local_save_failed

API anahtar sırları genellikle yalnızca bir kez gösterildiğinden bu güvenlik açısından hassastır. Sır, politikaya uygun şekilde saklanmadıysa anahtarı yerel olarak kullanılamaz olarak işaretleyin, açık bir işlemle iptal edin veya rotasyona tabi tutun ve yeni bir iş amacına sahip bir yedek anahtar oluşturun.

topup_requested_unknown

Mümkünse aynı geçici anahtarla yüklemeyi yeniden deneyin. Daha sonra işlemleri ve cüzdan bakiyesini uzlaştırın. İlk yanıt kaybedildi diye ikinci bir yükleme yapmayın.

webhook_received_processing_failed

Webhook etkinliğini alındı ve yerine getirilmedi olarak işaretlenmiş halde tutun. Nedeni düzelttikten sonra çalışan aracılığıyla tekrar oynatın. Benzersiz etkinlik kaydı, mükerrer gönderimleri önler.

uzlaşma_gerekli

İşlemi, istek kimliği, kimlik anahtarı, müşteri kimliği, hedef kimlikleri, zaman damgaları ve son hatalarla birlikte dahili bir destek kuyruğuna atayın. Manuel inceleme, ayrı bir özel iz oluşturmamalı, aynı işlem kaydını güncellemelidir.

Test Kontrol Listesi

  • Aynı müşteri için kayıt düğmesinin yinelenen tıklamaları, bir grup ve amaçlanan bir anahtar oluşturur.
  • Yukarı akış başarısından sonra ancak yerel kaydetmenin yinelenen yan etkiler olmadan devam etmesinden önce bir çalışanın çökmesi.
  • Yanıt gövdesinden önceki HTTP zaman aşımı, aynı kimlik anahtarının yeniden denenmesiyle işlenir.
  • Yinelenen ödeme web kancası, yinelenen kredi yüklemesi oluşturmaz.
  • Sıra dışı bir ödeme web kancası ve temel hazırlık işi, doğru müşteri durumuna yakınsıyor.
  • Retry-After içeren bir 429 yanıtı, işlem kimliğini değiştirmeden yeniden denemeyi geciktirir.
  • Değiştirilmiş bir veriyle bir idempotency anahtarının yeniden kullanılması yerel olarak başarısız oluyor.
  • 0,01, 0,10, 100,00 civarındaki ondalık değerler ve harcama sınırı sınırları beklenmedik bir şekilde yuvarlanmıyor.
  • Denetim-olay mutabakatı, bir grubu, anahtarı veya limiti kimin ve ne zaman değiştirdiğini açıklayabilir.
  • İdempotans tutma süresinden daha eski olan işlemler, kör tekrarlama yerine yerel kayıtlar ve İş Ortağı API raporlama yüzeyleri aracılığıyla uzlaştırılır.

Ödüller

Deterministik eşitsizlik anahtarları yeniden denemeleri ve araştırmaları kolaylaştırır, ancak bir anahtarın gerçekten yeni bir amaç için yeniden kullanılmasını önlemek için yeterli iş bağlamını içermeleri gerekir.

Yerel işlem defteri şema ve iş akışı karmaşıklığını artırır, ancak ağ çağrıları, web kancaları ve veritabanı yazma işlemleri farklı zamanlarda başarısız olduğunda entegrasyona dayanıklı bir gerçek kaynağı sağlar.

Web kancası alımından hızlı bir şekilde geri dönmek, sağlayıcının yeniden deneme sayısını azaltır ancak işleme hatalarının görünür olması için güvenilir bir sıra, yeniden oynatma araçları ve izleme gerektirir.

Katı istek parmak izi kontrolleri, anahtarın farklı verilerle yanlışlıkla yeniden kullanılmasını önler, ancak kayıt varsayılanları veya sınır şablonları değiştiğinde açık sürüm oluşturmayı zorlar.

Bakiye, işlem, grup, anahtar ve denetim uç noktaları aracılığıyla mutabakat sağlamak, orijinal yanıta güvenmekten daha yavaştır. Ayrıca bilinmeyen sonuçlardan sonra da daha güvenli bir yoldur.

Uygulamaya Uygulanabilir Sonuç

Güvenilir İş Ortağı API otomasyonu, HTTP entegrasyon sorunu olduğu kadar bir muhasebe ve operasyon sorunudur. Dayanıklı iş operasyonlarını tanımlayarak başlayın: müşteri grubu oluşturun, anahtar oluşturun, limiti değiştirin, kredi ekleyin, cüzdanda mutabakat sağlayın ve webhook'u işleyin. Her işleme sabit bir kimlik doğrulama anahtarı, istek parmak izi, durum makinesi ve kalıcı bir yerel kayıt verin.

Sonra her çalışanı sıkıcı hale getirin: İşlemi alın, amaçlanan isteği tam olarak gönderin, bilinmeyen sonuçlardan sonra aynı etkisizlik anahtarını yeniden kullanın, ondalık dizeleri tam olarak ayrıştırın ve telafi etmeden önce uzlaştırın. Bu tasarım her arızayı ortadan kaldırmayacak ancak müşterinin karşılaştığı yinelenen yan etkiler olmaksızın arızaları açıklanabilir, yeniden denenebilir ve denetlenebilir hale getirecek.

İlgili okuma

FAQ

Sık sorulan sorular

Her İş Ortağı API isteğinde bir kimlik anahtarı kullanılmalı mı?
POST, PATCH ve DELETE gibi değişen İş Ortağı API istekleri, belgelenen sözleşmeye göre bir kimlik anahtarı kullanmalıdır. Salt okunur istekler normalde aynı işleme tabi tutulmaz ancak sonuçları mutabakat sırasında kullanılabilir.
Birden fazla müşteri yüklemesi için bir geçicilik anahtarı yeniden kullanılabilir mi?
Hayır. Aynı anahtarı yalnızca aynı iş işleminin yeniden denemeleri için yeniden kullanın. İkinci kasıtlı yükleme, yeni bir iş operasyonudur ve yeni bir operasyon kaydı ve geçicilik anahtarı alınmalıdır.
Grup oluşturma sırasında zaman aşımından sonra ne olmalı?
Zaman aşımını kaydedin, orijinal işlemi beklemede veya yeniden denenebilir halde tutun ve aynı grup oluşturma isteğini, tutma penceresi içinde aynı kimlik anahtarıyla yeniden deneyin. Sonuç belirsiz kalırsa başka bir şey oluşturmadan önce grup kayıtları ve denetim olayları aracılığıyla mutabakat sağlayın.
Parayı neden ondalık dizeler veya tam ondalık sayılar olarak saklayalım?
Cüzdan bakiyeleri, kredi tutarları, kullanım toplamları ve harcama limitleri finans verileridir. İkili kayan nokta dönüşümü yuvarlama hatalarına neden olabilir, bu nedenle alım ondalık dizeleri korumalı veya bunları tam ondalık türlere dönüştürmelidir.