Ana sayfa/Hizmetler/Entegrasyon ve API Geliştirme
Hizmet · Yazılım geliştirme

Açıkça, güvenle ve nadiren hata veren API’ler ve entegrasyonlar.

Sözleşme öncelikli API’ler, olay tabanlı entegrasyon ve kurumları tutarlı tutan o gösterişsiz disiplin — idempotency, yeniden denemeler, dead-letter kuyrukları.

Entegrasyon ve API GeliştirmeNeler yapıyoruz
01Sözleşme öncelikli API tasarımı
02Olay tabanlı omurgalar
03Legacy ve SaaS bağlantısı
04Hata mühendisliği
Nasıl ilerler
  1. Sistem haritası
  2. Sözleşmeler
  3. Geliştirme ve gölge
  4. Devreye geçiş ve izleme
Neden var

Karşı tarafın çöktüğü gün için tasarlanır.

Her kurum, aslında iş modeli giymiş bir entegrasyon problemidir. ERP, CRM, ödeme altyapıları, iş ortağı beslemeleri — değer, birleşme noktalarındadır. API’leri sözleşme, entegrasyonları ise hata davranışı açıkça tanımlanmış olay akışları olarak tasarlıyoruz; çünkü kötü bir salı gününde sistem bütününün ayakta kalıp kalmayacağını belirleyen kısım burasıdır.

En sık karşılaştığımız tablo, eksik bir entegrasyon değildir. Yıllar içinde birkaç ekibin yazdığı çok sayıda entegrasyondur; her birinin kendi yeniden deneme mantığı, müşteri kimliğinin ne olduğuna dair kendi tanımı ve o an bir şeyin akıp akmadığına dair ortak bir görünümün yokluğu vardır. Gece çalışan dosyalar boşlukları örter; bir mutabakat tablosu da dosyaları örter. Bizim işimiz, bunun yerine az sayıda yönetişimi tanımlı sözleşme, olguların bir log üzerinde durduğu bir olay omurgası ve bozulan bir akışın ay sonu sürprizi değil hızlı bir uyarı olmasını sağlayacak kadar gözlemlenebilirlik koymaktır.

Bir entegrasyonun sınavı mutlu senaryo değildir — karşı taraf çöktüğünde, yavaşladığında ya da aynı mesajı iki kez gönderdiğinde ne olduğudur.

Ne yapıyoruz

Dört disiplin, bu sırayla uygulanır.

Önce sözleşmeler; çünkü beyaz tahtada değiştirmesi ucuz, birçok tüketici sistemde değiştirmesi pahalıdır. Hata davranışı ise en son unutulması gereken şeydir; çünkü sonunda birlikte yaşadığınız şey odur.

01

Sözleşme öncelikli API tasarımı

Koddan önce OpenAPI tanımları. Sürümleme, sayfalama ve hata anlamları, değiştirmesi hâlâ ucuzken karara bağlanır. Sözleşmeyi onu kullanacak ekiplerle birlikte yazar, sunucu iskeletlerini ve istemci SDK’larını ondan üretir, uyumluluk kurallarını CI içinde zorunlu kılarız; böylece kırıcı bir değişiklik bir iş ortağının entegrasyonunu değil derlemeyi düşürür.

02

Olay tabanlı omurgalar

Outbox deseniyle Kafka / kuyruk tabanlı entegrasyon — çift yazma yarışı yok, sessiz kayıp yok. Olay, iş değişikliğiyle aynı veritabanı işleminde yazılır ve bir connector ya da Debezium tarafından aktarılır; böylece bir üretici bir olguyu kaydedip bildirimini kaybedemez. Tüketiciler idempotenttir, bir iş kimliğiyle anahtarlanır ve offset’i ancak etki kalıcı olduktan sonra işler.

03

Legacy ve SaaS bağlantısı

SOAP önyüzleme, dosya bırakma ile veri alma, webhook normalizasyonu — sistemlerle gerçekte bulundukları yerde buluşuruz. Kimsenin değiştiremeyeceği bir mainframe, change data capture ile bir olay kaynağına dönüşür; bir FTP dizini doğrulanmış, yeniden oynatılabilir bir beslemeye dönüşür. Sarmalayıcının arkasında kendi hızımızda modernize eder, tüketiciler farkı hiç görmez.

04

Hata mühendisliği

Idempotency anahtarları, yeniden deneme bütçeleri, dead-letter kuyrukları ve yeniden oynatma araçları — ilk olaydan sonra eklenmez, baştan tasarlanır. Teslim ettiğimiz her akışın dört soruya yazılı bir yanıtı vardır: hedef çöktüğünde, yavaşladığında, hata döndürdüğünde ve aynı mesaj iki kez geldiğinde ne olur. O yanıt varsayılmaz, test edilir.

Uygulamada

İş günlük olarak nasıl yürür?

01

Çıktı kod değil, sözleşmedir.

Tüketicileri şartnameyi okumadan yayına çıkan bir API, canlı ortamda ve seyirci önünde yeniden tasarlanır. Biz bunu tersine çeviriyoruz. Önce OpenAPI ya da AsyncAPI dokümanı yazılır ve onu kullanacak her ekiple gözden geçirilir — kaynak şekilleri, sayfalama, idempotency başlıkları, hata kodları, hız sınırları ve kullanımdan kaldırma politikası. Uygulama ancak sözleşme bu incelemeden geçtikten sonra başlar ve istemci SDK’larıyla mock sunucunun da üretildiği aynı dokümandan üretilir. Tüketiciler, sözleşme imzalandığında mock üzerinde geliştirmeye başlayabilir; bu da plandan sıra bekleme süresini çıkarır.

  • Sürüm kontrolü altında OpenAPI 3.1 ve AsyncAPI dokümanları, diğer her değişiklik gibi pull request olarak incelenir
  • CI içinde uyumluluk kontrolleriyle eklemeli değişiklik politikası — kırıcı bir alan silme işlemi CI hattını düşürür
  • Kullanım telemetrisiyle desteklenen kullanımdan kaldırma pencereleri; v1’i kapatmadan önce kimin hâlâ çağırdığını görebilirsiniz
02

Karanlığa çağrı değil, log üzerinde olgular.

İki sistem arasındaki senkron bir çağrı, ikisinin çalışma süresini, işlem hacmini ve sürüm takvimini birbirine bağlar. Etkileşim aslında birkaç sistemin bilmesi gereken bir olguysa — sipariş verildi, sevkiyat açıldı, ödeme geçti — bunu kalıcı ve sıralı bir log’a bir kez yayınlar, her tüketicinin kendi hızında okumasına izin veririz. Yavaş bir sistem herkesin problemi olmaktan çıkar, bir kesinti kayıp değil birikmiş iş hâline gelir ve alt sistemdeki bir tabloyu bozan bir hata, veriyi yeniden girerek değil bir zaman aralığını yeniden oynatarak düzeltilir. Üretici tarafı outbox desenini kullanır; böylece olgu ve olayı tek bir commit’i paylaşır.

  • Topic sahipliği, anahtarlar, şemalar ve saklama süreleri, depoda duran bir olay kataloğunda kayıtlıdır
  • Bir registry’de tutulan ve CI’da uyumluluk kuralları uygulanan şemalar — Avro, Protobuf ya da JSON Schema
  • Kaynağın değiştirilemediği yerlerde Oracle, SQL Server, MySQL ya da PostgreSQL üzerinden change data capture
03

Hata davranışı, önceden kararlaştırılır.

Entegrasyonlar genellikle bir exception ile bozulmaz. Bir tarafta zaman aşımı, diğer tarafta işlenmiş bir yazma ile bozulur; ya da bir iş ortağının dünkü dosyayı yeniden göndermesiyle, ya da yavaş bir bağımlılığı büsbütün ölü hâle getiren bir yeniden deneme fırtınasıyla. Hata politikasını her akış için koddan önce yazarız: ne, kaç kez yeniden denenir, ne geri çekilir, ne bekletilir, ne dead-letter kuyruğuna gider, kim çağrılır ve yeniden oynatma prosedürü nedir. Politika, bir incelemede okuyabileceğiniz bir tablodur ve saat 03:00’te keşfedilmek yerine devreye geçişten önce hata enjeksiyonuyla test edilir.

  • Bir iş kimliğine anahtarlanmış idempotency; en az bir kez teslimat, tam olarak bir kez sonuç üretir
  • Üstel geri çekilme ve devre kesicilerle yeniden deneme bütçeleri; yavaş bir bağımlılık kesintiye dönüştürülemez
  • Provası yapılmış yeniden oynatma prosedürüne sahip dead-letter kuyrukları ve yalnızca hatalarda değil dead-letter hacminde de uyarı
Hedef 5xx döndürür ya da zaman aşımına uğrarGeri çekilmeyle 5× yeniden dene, sonra dead-letter
Hedef 4xx döndürür (hatalı payload)Hemen dead-letter, sahibini çağır
Aynı idempotency anahtarı yeniden görülürOnayla, yeniden işleme
2 dakika boyunca hata oranı > 5 %Devreyi aç, log’da beklet, uyarı ver
15 min sonunda dead-letter kuyruğu boş değilAkış sahibini yeniden oynatma bağlantısıyla uyar
04

Önce gölge, sonra devreye geçiş.

Bir entegrasyon programının en riskli saati, yeni bir akışın kayıt sistemine yazmaya başladığı saattir. Biz o saati ortadan kaldırıyoruz. Yeni entegrasyonlar gerçek canlı trafiğe karşı gölge modda çalışır — aynı girdileri tüketir, aynı çıktıları üretir, hiçbir yere yazmaz — bu sırada bir karşılaştırıcı yeni sonuç ile mevcut sonuç arasındaki her farkı raporlar. Farklar, geriye kalanlar açıklanabilir ve üzerinde mutabık kalınmış hâle gelene kadar azaltılır. Akış ancak o zaman, genelde önce tek bir segment için, eski yol hâlâ sıcakken ve provası yapılmış bir geri alma hazırken yazmaya başlar.

  • Farkları türe ve hacme göre raporlayan bir karşılaştırıcı; birinin göz kararı baktığı bir örneklem değil
  • Segment, iş ortağı ya da bölge bazında devreye geçiş; her adım geri alınabilir
  • Fark raporu üzerinde anlaşılan süre boyunca temiz kalana kadar legacy yol çalışmaya devam eder
Rollere göre

Bir entegrasyonu üç kişi, üç ayrı nedenle önemser.

Platform ve mimari

Yönetişimi kurulmuş tek bir bütün ve gerçeğe uyan bir resim.

Gerçeği yansıtan bir envanter alırsınız: her akış, sahibi, sözleşmesi, tutarlılık gereksinimi ve hata politikası. Yeni bağlantılar da aynı incelemeden geçer; böylece biz ayrıldıktan sonra sistem bütünü yeniden parçalanmaz. Doğru yanıt daha iyi entegrasyonlar değil daha az entegrasyonsa bunu söyleriz — yalnızca iki ekip sahiplik konusunda anlaşamadığı için var olan noktadan noktaya bir akış, mühendislik değil yönetişim problemidir.

  • Veri sahipleri ve tutarlılık gereksinimleriyle sistem ve akış envanteri
  • REST, GraphQL ve olaylar için standartlar — ve aralarında seçim yapma kuralı
  • Gateway politikası: kimlik doğrulama, hız sınırları, anahtarlar, kotalar ve doküman portalı
Operasyon

Bir panodan haberdar olursunuz, müşteriden değil.

Teslim ettiğimiz her akış kendi görünümüyle gelir: işlem hacmi, gecikme, hata oranı, dead-letter derinliği ve işlenmemiş en eski mesajın yaşı. Uyarı politikaları akışın yanında kod olarak tutulur; böylece yeni bir entegrasyon bunlar olmadan canlı ortama çıkamaz. Her hata modunun runbook’unu akışı kuran mühendisler yazar ve canlıya çıkıştan önce ekibinizle bir game day’de prova edilir.

  • Akış başına panolar ve uyarı politikaları, kodla birlikte sürümlenir
  • Hata modu başına runbook’lar; dosyalanmak yerine prova edilir
  • Nöbetçi ekibinizin bizsiz çalıştırabileceği yeniden oynatma ve mutabakat araçları
İş ortağı ve ürün

İş ortağının görüşme yapmadan katılabileceği bir API.

Dış API’ler, destek maliyeti olan bir üründür. Gateway katmanını geliştirici deneyimiyle birlikte kurarız: self servis anahtarlar, sandbox kimlik bilgileri, üretilmiş referans dokümantasyonu, kod örnekleri ve neyin değiştiğini, eski davranışın ne zaman biteceğini söyleyen bir changelog. Hız sınırları ve kotalar tüketici bazındadır; böylece hevesli bir iş ortağı diğerlerinin performansını düşüremez ve kullanım telemetrisi hangi uçların bakım maliyetini gerçekten hak ettiğini gösterir.

  • Self servis katılım: anahtarlar, sandbox, üretilmiş dokümanlar ve örnekler
  • Tüketici bazında hız sınırları, kotalar ve kullanım telemetrisi
  • Takvime bağlı, çağrı verisiyle desteklenen sürümleme ve kullanımdan kaldırma duyuruları
Kapsam

Her çalışmada olanlar ve her sistem bütününe göre şekillenenler.

CapabilityIn every engagementShaped per estate
Sahipleri ve tutarlılık gereksinimleriyle akış envanteri
CI uyumluluk kontrolleriyle sözleşme öncelikli tasarım—
Olay kaybetmemesi gereken üreticilerde outbox deseni—
Dead-letter ve yeniden oynatmalı idempotent tüketiciler—
Fark karşılaştırıcısıyla gölge çalıştırma
Legacy bir kayıt sisteminden change data capture—
API gateway, anahtarlar, hız sınırları ve doküman portalı—
İş ortağı katılımı ve sandbox ortamı—
Akış başına panolar, uyarı politikaları ve runbook’lar
Devirden önce nöbetçi ekibinizle game day—
Akışların anlaşılan SLO’lara göre sürekli işletimi—
Nasıl ilerler

Dört faz; gölge modda çalışmayan hiçbir şey yazmaz.

01

Sistem haritası

Sistemlerin, veri sahiplerinin ve akışların envanteri — ve her bağlantının gerçekte hangi tutarlılığı gerektirdiği. Hangi bağlantıların güçlü tutarlılık gerektirdiğini, hangilerinin saniyeler içinde nihai tutarlılıkla yetinebileceğini ve hangilerinin yıllardır kimse şikâyet etmeden gecelik çalıştığını çıkarırız. Bu yanıt mimariyi belirler ve genelde varsayılandan daha ucuza çıkar.

02

Sözleşmeler

Uygulama başlamadan önce OpenAPI / olay şemaları, kullanacak her ekiple gözden geçirilir. Her sözleşme kendi hata anlamlarını, idempotency kurallarını, saklama süresini ve sahipliğini taşır. Mock sunucular ve üretilmiş SDK’lar imzalanan sözleşmeyle birlikte çıkar; böylece tüketici ekipler bizi beklemek yerine bizimle paralel geliştirir.

03

Geliştirme ve gölge

Entegrasyonlar canlı trafiğe karşı gölge modda çalışır; hiçbir şey devreye geçmeden önce çıktılar karşılaştırılır. Hata enjeksiyonu hata politikasının tamamını kapsar — hedef çökmüş, hedef yavaş, yinelenen teslimat, bozuk payload — ve bir tarih üzerinde anlaşılmadan önce karşılaştırma raporu açıklanamayan fark kalmayana kadar çalışılır.

04

Devreye geçiş ve izleme

Akış başına panolar, gecikme ve hata oranlarında uyarılar ve belgelenmiş yeniden oynatma prosedürleriyle kademeli devreye geçiş. Eski yol sıcakken her seferinde tek bir segment taşırız, ardından nöbetçi ekibinizle bir game day’de runbook’ları devrederiz. Hiçbir şey devreye alındığı için bitmiş sayılmaz; ekibiniz kurtarmayı bir kez çalıştırdığında biter.

Ne alırsınız

Sonunda elinizde olanlar.

  • Sürüm kontrolü altında OpenAPI / AsyncAPI sözleşmeleri
  • İzleme panolarıyla birlikte devreye alınmış entegrasyon akışları
  • Idempotency, yeniden deneme ve dead-letter politikaları — belgelenmiş ve test edilmiş
  • Yeniden oynatma ve mutabakat araçları
  • Tasarımda ele aldığımız her hata modu için runbook’lar
  • Sahipleri, anahtarları, şemaları ve saklama süreleriyle bir olay ve uç kataloğu
  • Kod olarak altyapı ve uyarı politikaları, akışlarla aynı depolarda
Genellikle şunlarla kurulur
Node.jsJavaKafkaRabbitMQPostgreSQLDebeziumOpenAPIGraphQLKongOpenTelemetry
Uygunluk

Bunun doğru karar olduğu durumlar.

Doğru tercih

Birkaç sistemden fazlası aynı olgular üzerinde anlaşmak zorundaysa, bir bağlantı para ya da bir mevzuat yükümlülüğü taşıyorsa veya mevcut sistem bütünü sahipleri çoktan ayrılmış noktadan noktaya betiklerden oluşuyorsa bunu seçin. Bir modernizasyon ya da legacy yeniden mühendislik programından önce de doğru karardır: yönetişimi kurulmuş bir entegrasyon katmanı, her tüketiciyle yeniden pazarlık etmeden bir kayıt sistemini değiştirmenizi sağlayan şeydir. İş ortaklarına açılan API’ler bir ürüne dönüşüyorsa ve bunun getirdiği katılım, sürümleme ve destek gerekiyorsa yine doğru karardır.

Başka yere bakın

Bir ürün ekibinin uçtan uca sahiplenebileceği, iki sistem arasındaki tek bir bağlantı için doğru karar değildir — o bir program değil bir sprinttir ve bunu size söyleriz. Biz ayrıldıktan sonra sözleşmeleri, şemaları ve tüketici gecikmesini kimse sahiplenmeyecekse doğru karar değildir; sahipsiz bir entegrasyon katmanı, veri kaybetmek için son derece kalıcı bir yere dönüşür. Asıl sorun müşteri kaydının kime ait olduğu konusunda iki departmanın anlaşamaması ise hiçbir mühendislik bunu çözmez — önce o konuşmanın yapılması gerekir.

SSS

Sık sorulan sorular

Farklı işler: kaynaklar için REST, toplama ağırlıklı arayüzler için GraphQL, gevşek bağlı sistemler arası akışlar için olaylar. Çoğu sistem bütünü bilinçli bir karışıma ihtiyaç duyar; asıl hata birini seçip her şeyi oradan geçirmeye zorlamaktır. Seçim kuralını standartlarınıza yazarız; böylece sonraki ekip aynı tartışmayı yeniden açmak zorunda kalmaz.
Genellikle — SOAP’ın, FTP’deki dosyaların ve arayüz olarak kullanılan veritabanlarının önüne katman koyduk. Yöntem şudur: sarmala, normalleştir, sonra sarmalayıcının arkasında modernize et. Kaynağa hiç dokunulamıyorsa change data capture, write-ahead log’unu okur ve sistemin kendisinde hiçbir değişiklik yapmadan bunu bir olay akışına dönüştürür.
Sürümlenmiş sözleşmeler, eklemeli değişiklik politikası, kullanım telemetrisiyle kullanımdan kaldırma pencereleri — v1’i kapatmadan önce kimin hâlâ çağırdığını görebilirsiniz. Uyumluluk, yayınlanmış şemaya karşı CI içinde kontrol edilir; böylece kırıcı bir değişiklik bir iş ortağının olay raporunda değil bir pull request’te yakalanır.
Gateway katmanını da kurarız: kimlik doğrulama, hız sınırlama, anahtarlar, doküman portalı — iş ortaklarının görüşme yapmadan katılabileceği bir API. Sandbox kimlik bilgileri, üretilmiş referans dokümanları ve yayınlanan bir changelog bununla birlikte gelir; çünkü dış bir API’nin destek maliyetini ilk günün ne kadar self servis olduğu belirler.
Evet — önce denetim, sonra en riskli akışların stabilizasyonu, ardından gölge trafikle kademeli platform değişimi. En çok kazandıran genelde ilk yapılan iştir: hiç izlemesi olmayan akışlara izleme, çift kayıt atanlara idempotency ve sistem bütününün söylentiden ibaret olmaktan çıkması için yazılı bir envanter.
Siz karar verirsiniz. Runbook’lar ve provası yapılmış bir game day ile ekibiniz akışları işletebilir. Nöbeti bizim tutmamızı tercih ederseniz akışları anlaşılan SLO’lara göre işletiriz — bunun nasıl kurgulandığı için çalışma modelleri sayfasına bakın.

Ne geliştirdiğinizi anlatın.

Bugün elinizde ne olduğunu ve neye ihtiyacınız olduğunu anlatın. Bir mühendis okur ve nasıl yaklaşacağımızı yazılı olarak iletir.

✓ Satış sunumu yok✓ AI-native bir mühendisten yanıt✓ Yazılı geri dönüş