Legacy Sistem Entegrasyonu: API Yoksa Veritabanı, Dosya, RPA
'Sistemin API'si yok' cümlesi entegrasyonun sonu değil, başlangıcıdır. AS/400'deki muhasebe, Delphi ile yazılmış üretim takibi ya da API vermeyen tedarikçi yazılımı için veritabanı köprüsü, CDC, dosya alışverişi ve RPA seçeneklerini güvenilirlik, gecikme ve risk açısından karşılaştırıyor; her birinin doğru yapılışını, cephe servisi desenini ve sahadaki tuzakları anlatıyoruz.
Her kurumsal entegrasyon projesinde en az bir tane vardır: AS/400 üzerindeki muhasebe, 2004'te Delphi ile yazılmış üretim takibi, API vermeyen tedarikçi yazılımı, yalnızca Excel çıktısı alabilen bir laboratuvar cihazı. "Sistemin API'si yok" cümlesi genellikle iki kötü sonuçtan birine gider: veriler elle iki kez girilir ya da entegrasyon "ileride" diye rafa kalkar. Oysa API'si olmayan sistemle entegrasyon, doğru yol seçilirse çözülebilir bir mühendislik problemidir.
Bu yazıda API'si olmayan sistemlere bağlanmanın yollarını — veritabanı köprüsü, değişiklik yakalama (CDC), dosya alışverişi, RPA/ekran otomasyonu ve satıcı uzantı noktaları — güvenilirlik, gecikme ve risk açısından karşılaştırıyor; karar rehberini, her yolun doğru yapılışını, tüm köprüleri modern bir API arkasında toplayan cephe servisi desenini ve sahada gördüğümüz tuzakları anlatıyoruz.
Seçenekler
Yol | Nasıl | Güvenilirlik | Gecikme | Risk | Ne zaman |
|---|---|---|---|---|---|
Satıcı uzantı noktaları | Gizli export/import, zamanlanmış dışa aktarım, ODBC erişimi, makro/eklenti | Yüksek | Dakikalar | Düşük; destek kapsamında | Her zaman ilk soru: satıcıya sorun |
Veritabanı köprüsü (okuma) | Salt okunur kullanıcı + görünümler; sorgu ya da CDC | Yüksek | Saniyeler–dakikalar | Şema bilinmiyor; satıcı desteği şartı | Okuma ağırlıklı, orta–yüksek hacim |
Veritabanı köprüsü (yazma) | Ara (staging) tablo + satıcının içe aktarım işi ya da onaylı saklı yordam | Orta | Dakikalar | Yüksek; iş tablolarına doğrudan yazma desteği bozar | Satıcı onaylı bir yazma yolu varsa |
Dosya alışverişi | CSV/XML/Excel, SFTP/paylaşımlı klasör, zamanlanmış | Yüksek (doğru kurulursa) | Dakikalar–saatler | Düşük–orta; biçim sözleşmesi kritik | Toplu veri, günlük/saatlik akışlar, her sistemin yapabildiği tek şey |
RPA / ekran otomasyonu | Robot arayüzde tıklar, yazar, okur (UiPath, Power Automate, Playwright) | Düşük–orta | Saniyeler–dakikalar | Yüksek; arayüz değişince kırılır | Başka yol yoksa, düşük hacim, geçici çözüm |
Rapor / yazıcı çıktısı yakalama | Sanal yazıcıya PDF, metin raporunu ayrıştırma | Orta | Dakikalar | Orta; rapor düzeni değişince kırılır | Yalnızca rapor alınabilen kapalı sistemler |
Karar rehberi
Önce satıcıya sorun. Şaşırtıcı sayıda "API'siz" sistemin zamanlanmış dışa aktarımı, ODBC arayüzü ya da belgelenmemiş bir import formatı vardır. Bir e-posta, üç aylık RPA projesinden ucuzdur.
Okuma mı, yazma mı? Yalnızca okuma çoğu zaman güvenli bir veritabanı köprüsüyle çözülür; yazma tarafı her zaman satıcı onaylı bir yol ister.
Hacim ve gecikme. Günde 200 kayıt dosyayla; saniyede 20 kayıt CDC ile; "anlık" gerekiyorsa RPA zaten yetmez.
Sistemin kalan ömrü. İki yıl içinde değişecek sistem için pahalı köprü kurmayın; ucuz ve yeterli olanı seçin, cephe servisi kalıcı olsun.
Destek sözleşmesi. Satıcının "veritabanına yazan destek dışında kalır" maddesi tasarımı belirler.
Veritabanı köprüsü: doğru yapılışı
Salt okunur, ayrı kullanıcı; iş tablolarına değil, sizin için oluşturulmuş görünümlere erişim. Görünüm, satıcı şema değiştirdiğinde tek düzeltme noktasıdır.
Değişiklik tespiti: Tabloda
guncelleme_zamanivarsa su damgası (watermark) ile artımlı sorgu; yoksa satıcı onayıyla tetikleyici tabanlı değişiklik günlüğü ya da CDC (Debezium: SQL Server, Oracle, MySQL, PostgreSQL, Db2 için işlem günlüğünden okur; uygulamayı ve şemayı değiştirmez, satıcı tarafında yalnızca CDC/log erişimi ister).Yazma için: Satıcının import mekanizmasının okuduğu ara tabloya yazın; satıcının işi (job) iş tablolarına aktarsın. Doğrudan iş tablosuna INSERT, tetikleyicileri, iş kurallarını ve denetim izini atlar.
Yük: Sorgular satıcının yoğun saatlerinde değil; okuma replikası varsa oradan;
statement_timeoutve sayfalama.
@Component
public class MuhasebeFaturaKoprusu {
private final JdbcClient eskiDb; // salt okunur kullanıcı, yalnızca V_ENTEGRASYON_* görünümleri
private final SuDamgasiDeposu damga; // son işlenen (zaman, id) kalıcı olarak saklanır
@Scheduled(fixedDelayString = "PT2M")
@SchedulerLock(name = "muhasebe-fatura-koprusu") // çok replikada tek çalışan (ShedLock)
public void cek() {
var son = damga.oku("muhasebe.fatura");
List<FaturaSatiri> yeni = eskiDb.sql("""
SELECT fatura_no, musteri_kodu, tutar, para_birimi, guncelleme_zamani
FROM V_ENTEGRASYON_FATURA
WHERE (guncelleme_zamani, fatura_no) > (:zaman, :no) -- bileşik su damgası: aynı saniyedeki kayıtlar kaçmaz
ORDER BY guncelleme_zamani, fatura_no
FETCH FIRST 500 ROWS ONLY
""")
.param("zaman", son.zaman()).param("no", son.id())
.query(FaturaSatiri.class).list();
for (FaturaSatiri f : yeni) {
faturaServisi.iceAktar(MuhasebeEsleme.toDomain(f)); // idempotent: fatura_no ile upsert
damga.yaz("muhasebe.fatura", f.guncellemeZamani(), f.faturaNo());
}
}
}Dosya alışverişi: doğru yapılışı
Dosya en eski ve en küçümsenen entegrasyon yoludur; yanlış kurulunca sessizce veri kaybeder, doğru kurulunca yıllarca çalışır. Kurallar:
Biçim sözleşmesi yazılı: sütunlar, tipler, kodlama (UTF-8; Excel'in BOM'u ve Windows-1254 tuzağı), ayırıcı, ondalık işareti (Türkçe virgül!), tarih biçimi, boş değer gösterimi, sürüm numarası başlıkta.
Atomik teslim: Dosya
.tmpolarak yazılır, tamamlanınca yeniden adlandırılır; yarım dosya asla okunmaz. Adlandırma:fatura_20261210_143000_000123.csv(zaman + sıra).Bütünlük ve onay: Yanında
.sha256ya da manifest; işleyen taraf.ack/.errdosyası bırakır; hata satırları ayrı rapora.İdempotent işleme: Aynı dosya iki kez gelirse (yeniden gönderim) çift kayıt olmaz; dosya adı ve satır anahtarı ile tekilleştirme.
Arşiv ve yeniden işleme: İşlenen dosyalar tarihli klasöre; "10 Aralık dosyasını yeniden işle" tek komut.
İzleme: Beklenen dosya gelmezse uyarı ("saat 06:00 dosyası yok" en sık kaçırılan hata).
Spring Integration'ın SFTP inbound adapter'ı ya da basit bir zamanlanmış iş yeterlidir; karmaşıklık kütüphanede değil, sözleşmede ve hata yollarındadır.
RPA ve ekran otomasyonu: son çare, ama disiplinli
Robotun arayüzde tıklaması, başka hiçbir yolun olmadığı yerde meşrudur: satıcı erişim vermiyor, veritabanı kapalı, dosya yolu yok. Kurallar: robot her işlemden önce hedef durumu kontrol eder (kayıt zaten girilmişse atlar — idempotency); her adımda ekran görüntüsü ve log; istisnalar insana düşer (kuyruk + onay ekranı), robot tahmin etmez; ayrı ve dar yetkili kullanıcı; izole sanal makine ve sabit ekran çözünürlüğü; uygulama sürümü sabitlenir, güncelleme öncesi robot test edilir. Web tabanlı eski uygulamalarda Playwright ile yazılan otomasyon, masaüstü RPA'dan daha dayanıklıdır (DOM seçicileri koordinattan sağlamdır). RPA'nın hacim sınırı vardır: günde birkaç yüz işlem; binler için başka yol bulunmalıdır.
Cephe servisi: köprüleri gizleyen modern API
[uygulamalar / ERP / e-ticaret] ──REST/olay──► [Cephe servisi (Spring Boot)]
├─ veritabanı köprüsü (okuma, CDC)
├─ dosya köprüsü (SFTP, saatlik)
└─ RPA köprüsü (kuyruk, insan onaylı istisna)
│
[API'si olmayan eski sistem]Tüm köprüler tek bir Spring Boot servisinin arkasında toplanır; servis dışarıya temiz bir REST/olay API'si sunar: GET /faturalar?since=, POST /siparisler, FaturaOlusturuldu olayı. İç uygulamalar eski sistemin dosya biçimini, şema adlarını ya da robotun varlığını bilmez. Bu, ERP entegrasyonundaki anti-corruption katmanının aynısıdır ve iki büyük kazancı vardır: köprü değişince (RPA'dan CDC'ye geçiş) tüketiciler değişmez; eski sistem strangler fig ile emekliye ayrıldığında cephe servisi kalır, arkasındaki uygulama değişir. Cephe servisinde her köprünün durumu (son başarılı çalışma, kuyruk, hata sayısı) tek panoda izlenir.
Sahada sık yapılan hatalar
Satıcıya sormadan RPA'ya başlamak: Üç ay sonra ODBC erişiminin baştan beri var olduğu öğrenilir.
İş tablolarına doğrudan yazmak: Destek sözleşmesi düşer; tetikleyiciler atlanır; bir gün gizli bir iş kuralı ihlal edilir.
Tek sütunlu su damgası: Aynı saniyede eklenen kayıtlar kaçar; bileşik damga ya da CDC.
Dosya sözleşmesinin sözlü kalması: Karşı taraf ondalık ayırıcıyı değiştirir, tutarlar 100 kat büyür.
Robotun istisnada tahmin yürütmesi: "Kayıt bulunamadı" ekranında yeni kayıt açan robot, çift kayıt üretir.
Köprüleri her uygulamaya ayrı kurmak: Beş uygulama, beş SFTP ayrıştırıcısı, beş farklı hata; cephe servisi bunu tek yerde toplar.
İzleme yokluğu: Gece dosyası üç gündür gelmiyor, kimse fark etmiyor.
Sık sorulan sorular
CDC her eski veritabanında çalışır mı?
Debezium; MySQL, PostgreSQL, SQL Server, Oracle, Db2 ve MongoDB için bağlayıcı sunar; işlem günlüğüne erişim ve bazı sunucu ayarları (SQL Server'da CDC'yi açmak, Oracle'da LogMiner) gerekir. Çok eski sürümler ya da dosya tabanlı veritabanları (Paradox, DBF) için CDC yoktur; zamanlanmış sorgu ya da dosya yolu kalır.
RPA'yı yapay zekâ daha dayanıklı yapar mı?
Görsel öğe tanıma ve dil modelleri, arayüz değişikliklerine toleransı artırır ve serbest metinli ekranları okumada işe yarar; ama belirsizlik de getirir. Kritik iş kayıtları için belirleyici (deterministic) yol ve insan onayı kalır; yapay zekâ istisna sınıflandırmada ve belge okumada daha iyi yer bulur.
Eski sistem tek kullanıcılı masaüstü uygulamasıysa?
Genellikle Access/Paradox/DBF gibi dosya tabanlı bir veritabanı vardır; ODBC ile salt okunur okuma çoğu zaman mümkündür. Yazma için uygulamanın kendi içe aktarımı ya da RPA; ama böyle bir sistemin değiştirilme planı da aynı anda yapılmalıdır.
Sonuç
API'si olmayan sistem entegrasyonun sonu değildir: önce satıcı uzantı noktaları, sonra görünümler ve CDC ile veritabanı köprüsü, toplu akışlarda sözleşmeli dosya alışverişi, başka yol yoksa disiplinli RPA — hepsi tek bir cephe servisinin arkasında, idempotent, izlenen ve yeniden işlenebilir. Cephe servisi, eski sistem değiştiğinde bile kalan yatırımdır.
API'si olmayan sistemlerinizi kurumsal uygulamalarınıza güvenilir biçimde bağlamak için entegrasyon ve otomasyon hizmetimize göz atabilirsiniz.