Azure Data Factory ile REST API Entegrasyon Senaryoları

Ataberk Teknekaya
PEAKUP Tech News
Published in
4 min readOct 5, 2023

Veri ambarı sistemlerinde OLTP veritabanları ve Excel dosyalarından sonra en yaygın olarak kullanılan kaynaklar API’lar diyebiliriz. Bu yazıda, Azure Data Factory’nin API entegrasyon yeteneklerini keşfedecek ve farklı senaryolarda nasıl kullanabileceğini öğreneceğiz.

REST API Nedir?

REST (Representational State Transfer), web tabanlı hizmetler arasında iletişim kurmak için kullanılan bir mimari tarzıdır. REST API, bu mimari tarzını kullanarak, istemcilerin sunucudaki kaynaklara erişmelerine ve bu kaynaklar üzerinde işlem yapmalarına olanak tanır. Kaynaklar genellikle JSON veya XML formatındadır. HTTP yöntemleri (GET, POST, PUT, DELETE vb.) kullanılarak kaynaklar üzerinde işlemler yapabilirsiniz. Örneğin, GET isteği bir kaynağı okumak için kullanılırken, POST isteği yeni bir kaynak oluşturmak için kullanılabilir.

Sayfa Sayısı Veren REST API’lardan Veri Aktarma

Bazı Rest API’ların çağrı başına maksimum kayıt limiti vardır. Bu kayıt limitine göre API cevabı sayfalara böler. Daha önceki bir yazımızda copy data activity‘i anlatırken Yüzüklerin Efendisi Rest API’ı olan “https://the-one-api.dev/v2" base url’ini kullanmıştık. Yine aynı API’ı kullanarak karakter verilerini aktaralım.

İlk başta bir REST tipinde linked service oluşturup base url’i yazıyoruz ve bağlantı token’ımızı Auth headers bölümüne giriyoruz. Sonrasında bir dataset oluşturup relative url bölümüne ilgili çağrı metodu olan characater’ı yazıyoruz ve yanına “?limit=100” ekliyoruz.

Not: Bu API’ın default limiti 1000 kayıt ve toplamda 933 karakter kaydı var. Sayfalandırma senaryosunu göstermek için bu limiti daraltıyoruz.

Bu dataseti bir copy data aktivitesinde kullanıp preview data butonuna tıkladığımızda çağrı sonucunun 933 kayıt olduğunu ve limitinin 100 kayıt olduğunu görüyoruz. Bu da 9 tam bir yarım olacak şekilde çağrıyı toplamda 10 sayfaya bölmüş oluyor.

Tüm kayıtları aktarmak için bu çağrıyı oluşturan pipeline’ı sayfa sayısını parametrize hale getirecek şekilde oluşturmamız lazım. Çağrıyı yapacağımız URL’ler aşağıdaki gibi sayfa 10'a kadar oluşmalı.

İlk başta toplam sayfa sayısını öğrenmek için pipeline’a bir Web aktivitesi ekliyoruz. Bu aktivitenin URL bölümüne “https://the-one-api.dev/v2/character?limit=100” yazıp methodu GET seçiyoruz. Sonrasında da gerekli Auth header’ı ekleyip token’ı yazıyoruz.

Bu aktivitenin output’undan toplam sayfa sayısını alıp 1'den o sayfa sayısına kadar bir liste oluşturmamız lazım. Bu listeyi oluşturmak için range() fonksiyonunu kullanıyoruz. Toplam sayfa sayımız 10 olduğu için fonksiyonumuz “range(1,10)” şeklinde oluşmalı.

Oluşan listeyi kullanarak copy data aktivitesini bir döngüye sokacağız. Bunun için bir ForEach aktivitesi eklememiz gerekiyor. Web aktivitesini ForEach aktivitesine bağlıyoruz ve aktivitenin items bölümünde range fonksiyonumuzu oluşturuyoruz. Web aktivitesinin output’unu “activity('Get Page Number').output.pages” şeklinde yazarak pages kaydını istediğimizi belitmiş oluyoruz.

Copy data aktivitesinde dataset’te Relative URL belirtmiştik. Şimdi bu URL parametrik olmalı. Bu yüzden datasete bir parametre ekliyoruz ve Relative URL bölümünü bu parametreyi alacak şekilde yazıyoruz.

Copy data aktivitemizi for each aktivitesinin içine ekleyip oluşturduğumuz RelativeURL parametresine metin birleştirme fonksiyonu olan concat’ı kulllanarak her bir sayfanın relative url’ini oluşturmuş oluyoruz.

En son pipeline’ımızı çalıştırdığımızda copy data aktivitesini döngüye sokuyor ve verileri istediğimiz yere aktarıyoruz.

Sonraki Sayfanın URL’ini Veren REST API’lardan Veri Aktarma

Bazı Rest API’lar sonraki sayfanın url’ini vererek veri aktarma işini kolaylaştırır. Bu senaryo için https://pokeapi.co/ sitesindeki ilgili pokemon API’ını kullanabiliriz. Aşağıdaki call’u denediğimizde next bölümünde bir sonraki sayfanın url’ini görebiliyoruz.

Şimdi bu url’i kullanarak pokemon adlarını aktaralım. Öncelikle bir Rest tipinde linked service ve dataset oluşturuyoruz. Bu API herhangi bir kimlik doğrulama gerektirmiyor.

Sonrasında bir pipeline yaratıp copy data aktivitemizi ekliyoruz. Source ve sink datasetlerimizi ekleyip mapping bölümünde sadece name bölümünü bırakıyoruz.

Copy data aktivitesinin sonraki sayfanın url’ini alması için source sekmesinde Pagination rules bölümüne gelerek tüm url’i aldığımız için AbsouluteUrl seçiyoruz. Sonraki sayfanın url’inin sonucunun body bölümünde next’e tekabür ettiğini belirtiyoruz.

Pipeline’ı çalıştırdığımızda 1292 kaydın veri aktarımının başarıyla gerçekleştiğini görüyoruz.

Referanslar

--

--

Ataberk Teknekaya
PEAKUP Tech News

As a BI consultant with a passion for Azure Data Platform, SQL and Power BI, I write about real-life scenarios to help others in the field.