Asp.Net WEB Web Services

API Nedir?

Bu yazımızda API Nedir, yazılım dünyasında önemi neden bu kadar büyüktür, sahip olduğu potansiyeli ve sunduğu faydaları anlamaya çalışacağız.

On yıllar boyunca çoğu bilgisayar yazılımı, onu tüketecek olan kullanıcı türü ile birlikte düşünülerek yazılmıştır. Yazılım ne şekilde tasarlanırsa tasarlansın, bir insan geleneksel olarak bu tasarım zincirinin en sonunda yer alır. Yazılımın sunduğu veriler, işlevsellikler bir kullanıcı arabirimi (UI) aracılığı ile son kullanıcının tüketimine sunulur.

Ancak söz konusu bu veriler veya işlevsellikleri bir insan yerine, başka bir yazılım parçası tarafından da tüketilmesine izin verilirse, bu durumda kullanıcı arayüzüne dair tasarım endişeleriniz çok farklı olacaktır. Sonuçta tüketici durumundaki yazılımın gözleri, duyguları, ya da sezgileri yoktur. Dolaysıyla eğlenceli sezgisel bir grafik arabirimine ihtiyaç duymazlar. İşte tam bu geçit noktasında API adı verilen bir teknoloji karşımıza çıkar. Kısaca API’leri yazılımların birbirleriyle konuşmasına izin veren arayüzler olarak açıklayabiliriz.

Teknik anlamda API , (Application Programming Interface) kelimelerinin kısaltması olarak söylenir. Farklı türden uygulamaların aynı ana akışı üzerinden birlikte çalışmasını sağlayan yazılım parçasıdır. Bu  daha kolay anlamda bir yazılımın, başka bir yazılımla iletişime geçmesi, fonksiyonelliklerini kullanması, iş akışlarını paylaşmasını sağlamakla görevlidir. API söz konusu farklı türden yazılım unsurlarını, birlikte ortak bir noktada buluşturur.

API’ler çoğu kez makine tarafından okunabilen arabirimler (insan okunabilirliğine karşı) olarak ele alınır. Günümüz dünyasında farklı türden makinaların artması ve bütününün iletişim ihtiyaçlarını karşılamada oluşacak karmaşıklığı göz önüne aldığımız da  API’lerin önemi küçümsenmemelidir. 

API’leri ne olduğunu daha iyi anlamak için gerçek hayat üzerinden örnekleme yapmakta fayda var. API’leri duvardaki elektrik prizlerine benzetebilirsiniz. Mesela şu an bu yazıyı okuduğunuz bilgisayarın enerjisini sağlamak için fişini taktığınız duvarınızda bulunan elektrik prizinden bahsediyorum. Tıpkı diğer odalarınızın duvarlarında olduğu gibi ve hatta diğer evlerde bulunan belki iş yerinizde ki gibi… Sonuçta hepsi aynı şekilde ve aynı görevi görmektedirler, aslında bu bir hizmetin arayüzüdür. Peki nedir bu hizmet? Tabiki bilgisayarlar, akıllı telefonlarımız, elektrikli süpürgeleri ve saç kurutucuları gibi cihazlara kadar aklınıza prize fişi takılan her şey tarafından tüketilen elektriktir. Bu senaryoda enerji tüketen cihazlarımız kendi ayrı güç kaynaklarına sahip olmak yerine, güç gereksinimlerini dış kaynaklardan gelen bir hizmet sağlayıcıya herhangi bir priz arabirimi vasıtasıyla bağlanarak karşılamaktadır. Dünyadaki konumlarına göre az da olsa farklılıklar gösterse de, elektrik prizlerinin kendi şekliyle eşleşen elektrik fişlerinin içine yerleşebileceği türden kalıplara sahiptir. 

Böyle bir standart olmadan hayatın nasıl bir şey olabileceğini hayal edin. Örneğin, fiş, eşleştirme yuvası veya diğer standart ayrıntılar olmadan, elektriğe ihtiyaç duyan aletleri, binaların duvarlarına sabit telle bağlamamız gerekebilirdi. Bu durum, gerekli aletlerin toplanmasını, tüm kabloların izolasyonunu ve kabloların birbirine yapıştırılmasını gerektirir. Elbette, duvardan çıkan kablolar hakkında da en azından elektrikçi kadar bir şeyler bilmekte gerekmektedir. En azından bir cihazı bir konumdan diğerine taşımak, bağlantıyı kesme ve yeniden bağlamada bu bilgilerin bize yardımı olacaktır.

Neyse ki, bunlardan hiçbirini yapmak zorunda değiliz. Bir fişe ve prizlere sahibiz. 

Sahip olduğumuz elektrik prizlerinin sağladığı faydalar, kolaylıklar nedir peki bir bakalım;

  • Bir fişe sahip olan herhangi bir tüketici (bu durumda bir cihaz) elektrik gereksinimlerini kolayca dışardan alabilir ve cihazdan aynı sonuçları elde etmeyi bekleyebilir. Elektriğin tahmin edilebilir bir standart arayüz aracılığıyla dış kaynaklardan besleneceğini bilen cihaz üreticileri, bu cihazların gücünü nasıl alacağını (standart arabirimi desteklemenin ötesinde) düşünmek yerine, mükemmel cihazlar üretmeye odaklanabilirler.
  • Tüketici cihazlar kolayca bir soketten diğerine taşınır. Standart bir arayüz sayesinde, İstanbul’daki bir evden Ankara’daki bir otele bir saç kurutma makinesinin taşınması, yatak odasından mutfağınıza geçmekten farklı değildir. Hatta standart arabirimin modeli değişse bile (Türkiye’den Amerika’ya  seyahat ederken olduğu gibi) tüketen cihazlar basit bir dönüştürücü yardımıyla kolayca adapte olur ve hizmetten faydalanmaya devam edebilir.
  • Elektrik prizi bir sokettir. Aslında soket, temel alınan hizmetin arayüzü şeklinde bir soyutlama katmanıdır ve pek çok ayrıntıları gizler . Örneğin duvarlardaki kabloların rengi, kabloların paylaşıldığı dağıtım cihazları, bir rüzgar tribünü, nükleer kaynaklı, kömürle çalışan jeneratör veya güneş panelleri gibi elektriğin nasıl üretildiğini, nerelerden transfer edildiğini gizler. Hizmet, standarda uygun bir şekilde duvar prizine 220 volt 50Hz AC güç sağladığı sürece, hizmeti sunan servis sağlayıcılar hangi sebeple olursa olsun (maliyet tasarrufu, politika veya üretim tercihleri gibi) soketin hemen arkasına kadar, herhangi bir şeyi veya her şeyi değiştirme konusunda özgürdür. Elektriği tüketen cihazlar bu değişikliklerden etkilenmezler. Cihaz üreticileri, cihazlar için soket arayüzüne bağlı kalmak koşuluya, kendi tasarımlarında, cihaza ait elektrik devrelerinde herhangi bir değişikliğe gidebilir. 

API’lerin tüketici yazılımlar (masaüstü, Web, mobil ve sunucu tarafı uygulamaları gibi) için sağladıkları faydalar, elektrik prizlerinin sağladığı hizmeti tüketenlere (elektrikli cihazlara) sağladıkları faydalardan farklı değildir.

Örneğin, tüketici durumundaki bir cihazın elektriğini, bir duvar soketi arayüzü aracılığıyla dış kaynaknaktan sağlayabilmesi; tüketen bir uygulamanın, veri gereksinimlerini (hasta kaydı, durum bilgisi gibi) veya işlevselliğini (örn. etkileşimli bir harita üzerinde konum sabitlemek gibi) bir uygulama programlama arabirimi (API) aracılığıyla bir servise göndermesi veya alması ile aynı faydaya sahiptir. Her iki taraftaki uygulama türleri birbirlerinden ayrık noktalarda olmalarına rağmen ve birbirleri hakkında hiçbir şey bilmedikleri halde, iletişim kurdukları arabirim (API), servis taleplerinin yerine getirilmesinde ve bunun karşılığında veri veya işlevsellik elde etmesinde üzerinde anlaşmaya vardıkları standartlar dizisi olmaktadır. Tıpkı Elektrik için 220v / 50Hz’e benzer AC standardı gibi API’ler de bu standardı temsil ederler.

Tüketen cihazların elektrik gereksinimlerini bir elektrik şebekesi aracılığıyla hizmet olarak alması şekline benzer bir durum ise uygulamalar, veri ve işlevsellik gereksinimlerini, internet, intranet gibi dijital ağlardaki, servis sağlayıcılarından dış kaynak olarak alabilir. Örneğin, bir mobil uygulama, interaktif harita ihtiyacını bir dış kaynaktan edinmek durumundadır. Bu işlevselliği “Google Haritalar” ile uygulama içine dahil edebilir. Bunu yapabilmek için, mobil uygulamada yeni bir etkileşimli harita eklenir ve çalışma zamanında her görüntülendiğinde, internet üzerinden bu amaçla Google tarafından sunulan özel bir API’ya bir istek göndererek harita görüntülemeyi yapar.

Böylece, elektrik gibi API’ler de tüketilen bir kaynak haline gelirler , Bir uygulama geliştiricisi, ağ üzerinden API’leri çağırmanın yanı sıra, uygulamanın çalıştığı yerel sistem veya aygıt tarafından sunulan API’lerden de yararlanabilir. Örneğin, uygulamalar, telefonun GPS alıcısına bağlı API’yı çağırarak akıllı telefonun mevcut konumunu keşfedebilir. Chrome ve Firefox gibi modern Web tarayıcıları her türde sistemde (masaüstü bilgisayarlar, tabletler, akıllı telefonlar vb.) ana cihazın depolama, ses sistemi, kameralar ve daha pek çok donanıma erişmek için standart bir yol olarak sistemin API’lerini kullanır. 

API’ler Geliştiricileri Daha Verimli Yapar

Geliştiriciler kod yazarken nadiren sıfırdan başlarlar. Örneğin, bir yazılım şirketi Microsoft Windows üzerinde çalışan bir kelime işlemci oluşturacaksa sözcük işlemcisinin geliştiricileri, bu özellikleri yeniden yaratmaya çalışmak yerine önceden Windows’da bulunan çeşitli özellikleri kullanır. Windows üzerinde bir iletişim kutusu oluşturmak istenirse, bir başlık çubuğu, kapatma, simge durumuna alma, ekranı kaplama gibi unsurları üstelik grafik olarak çizebilmek adına binlerce satır kod yazmak yerine, söz konusu işletim sisteminin iletişim pencerelerine yönelik sunduğu API desteğine başvurarak bu işi birkaç satırda gerçekleştirirler.  Benzer şekilde, programcılar, bilgisayarın sabit sürücüsüne ayrı bitler ve baytlar depolamak için binlerce kod satırı yazmak zorunda kalmazlar. İşletim sistemleri bunun için özel bir API’ler içerir. Programcılar bellekte tutulan verilerini, işletim sistemine bağlı sabit sürücüye kaydetmek istediklerinde, bu API’ye (daha yaygın olarak “bir API çağrılması” olarak anılır) bir referans çağrısı (Invoke) yaparlar. API’ler temel alınan hizmete soyutlama katmanı olarak hizmet etmektedir.

API’lerin, tekrarlanan karmaşık süreçleri, yalnızca bir veya birkaç kod satırı ile yüksek oranda yeniden kullanılabilir hale getirme yetisi, geliştirici üretkenliği, modern uygulama geliştirme ve API ekonomisi için temel önemdedir. Bu tür bir model kullanan programcılar, kodu sıfırdan yazmak zorunda kalmadıklarından normalden çok daha verimli işler çıkarabilmektedirler. Yazdıkları her yeni program ile “tekerleği yeniden icat etmek” zorunda değiller. Bunun yerine tüm ürün işlevselliğini API’ler ile basitçe dış kaynaklardan elde ederken, uygulamalarının diğer benzersiz operasyonlarına daha fazla odaklanabilirler. Örneğin e-ticaret konusunu işleyen bir yazılım ödeme süreçlerini, bir bankanın konu ile ilgili API’lerine devredebilir. Bu sayede ödeme güvenliği, şekli gibi unsurlarına odaklanmak yerine ürün vitrinini daha iyi hale getirmek için uğraşabilir. Ödeme süreçlerinde kendi özel kodunu kullanmak ile dış kaynak kodlarını kullanmak kıyaslandığında API’ kullanımı finansal açıdan daha uygun hatta alternatifsiz olur. 

API sağlayıcılar, çeşitli işlevsellik türlerini (kredi kartı işleme, haritalama, gezinme, çeviri gibi) uygulama geliştiricilerine sunarak kullanmalarını sağlama yönünde çalışırlar. Bu durum API kullanan uygulamaları aynı zamanda dışa bağlı kılmaktadır. Sağlayıcılar da bu hizmetlerini kendi ekonomilerini uzun vadede güç olarak ellerinde bulundurmak için üretirler. 

Duvardaki elektrik soketi, elektrik tüketen aygıtların takılı olduğu elektrik sisteminin son noktasını temsil ettiği gibi, API’ler bir bitiş noktası olarak görülür. Esas itibariyle onu tüketen uygulamaların takılı olduğu bir soket. Elektrik prizine takılabilen cihazların sayısı ve türleri, yalnızca mucitlerin hayal gücü (kapasitesiyle) sınırlıdır ve benzer şekilde, bir API’nın bitiş noktası tarafından soyutlanan işlevsellikten yararlanabilecek uygulamalar API’nin yeteneklerini kullanarak onu programlayacak yazılımcıların hayal gücü ile sınırlı olacaktır. Örnek: Google’ın Google Haritalar için bir API sunmasından kısa bir süre içinde, binlerce üçüncü taraf geliştiricinin API’yi tüketen benzersiz ve yenilikçi uygulamalar geliştirmesine olanak sağlamış, böylelikle Google ile bu yazılımlar arasında bir bağımlılık meydana getirmiştir. Instagram fotoğraf paylaşım servisinin kurucuları, Instagram kullanıcılarının son fotoğraflarını Facebook’daki arkadaşlarına yayınlamasına izin veren Facebook API’sı olmasa belki uygulamalarının bu kadar çok kullanıcıya ulaşmasında başarılı olamazlardı. 

Mimari olarak Bir API’nin bitiş noktası, API’yi tüketen uygulamanın aslında tüketilen hizmetten ayrıldığı noktadaysa, hizmet sağlama konusunda API sağlayıcısına önemli miktarda esneklik de sağlar. Tekrar elektrik prizi örneğimize geri dönelim. Elektrik şirketi standart 220v / 50Hz AC servisini duvar prizine sunmaya devam ettiği sürece, O hizmeti sunmak için gereken altyapısını, kömür yakma tesisinden rüzgar tribünlerine çevirebilir. Cadde üzerindeki telleri yerden yukarıya veya yeraltına değiştirilebilir. Elektrik şebekesini izleyen sistemleri iyileştirilebilir. Etkin, çevre dostu ve daha uygun maliyetli bir şekilde hizmet etmek için istediği iş kararlarını verebilir.

Aynı şekilde, bir API uç noktası, tüketen uygulamayı ona hizmet sağlayan altyapıdan, hizmetini nasıl sunduğuna göre muazzam bir esneklik kazandırır. Örneğin, API’nin altındaki altyapıda bir veri merkezinde bulunan fiziksel sunucuları içeriyorsa, hizmet sağlayıcı bu sunuculardan buluta , seçeneklerden ise Amazon veya Microsoft Azure gibi çalışan sanal sunuculara geçebilir. Bu sunucularda bulunan mesela kredi kartı işleme yazılımı gibi çalışan yazılım, örneğin Oracle tabanlı bir veritabanı yönetim sistemi üzerine kurulmuş Java’da yazılmışsa, servis sağlayıcı bu kod tabanını Node.js’ye (sunucu taraflı Javascript’e) Windows Azure üzerine taşıyabilir. Hizmet sağlayıcının uçbirime ne verdiği konusundaki şartname değişmeden kaldığı sürece, gereken değişiklikleri gerçekleştirebilir. Uç noktanın arkasındaki altyapı değişiklikleri bu API’ya kullanan uygulamalar tarafından fark edilmemelidir.

API, sağlayıcının uç noktada sağladığı veri veya işlevsellikle ilgili şekli bir nevi İki taraf arasındaki yasal bir sözleşme gibidir. API sağlayıcısı tarafından yapılan altyapı değişiklikleri API bitiş noktasında görünen bir değişiklik oluşturduğunda, bu API’ye bağımlı tüketen uygulamalar muhtemelen kırılacaktır. Elektrik metaforuna geri dönersek, elektrik şirketi elektrik servisinizin spesifikasyonuyla ilgili bir şey değiştirirse – örneğin, mevcut alternatif yönlendirmelerin hızını 60Hz’den 100Hz’e değiştirirse – cihazlarınızı tehlikeye atabilir. 

Geliştiricilerin uygulamalarını bir ağdan veya İnternet’ten bir API’ye nasıl bağlamaları gerektiği konusunda hiçbir kural bulunmamakla birlikte, bu tür bağlantılara ulaşmak ve veri yükleri göndermek veya almak için de pratikte çeşitli standartlar ve yaklaşımlar ortaya çıkmıştır. Örneğin, İnternet’ten API’lere bağlanan uygulamalar söz konusu olduğunda, API sağlayıcılarının çoğu bu tür bağlantıları HTTP protokolü üzerinden mümkün kılar.

HTTP, Web tarayıcılarının (tüketen yazılım olarak) Web sitelerine (hizmet sağlayıcılarına) bilgi gönderip almalarını sağlayan bir protokoldür. Örneğin, Web tarayıcınızla yazilimbilisim.net web sitesini ziyaret ettiğinizde, tarayıcınız HTTP üzerinden sitenin Web sunucusu ile bilgi alışverişinde bulunur.  İster yazı dizilerimizi okuyun ister yorum yapın amaçlarınıza yönelik böyle bir istemci / sunucu arasında gerçekleşen veri alışverişi için hazırlanmış “fiiller” (get, put ve post dahil) adında özel bir HTTP komut setini kullanıyorsunuz demektir. 

Yazılımların aynı sunucudan talepleri olacaktır. Mesela Android veya IOS için mobil bir cihaz üzerinde sunucuda talep edilecek bilgilerin gösterimine dayalı bir uygulama geliştirilebilir. Sitenin bir web tarayıcıda okunması kolay bir biçimde, görüntülenmesi için biçimlendirilmiş olarak bilgi alması yerine, mobil cihazın okuyabileceği şekilde bilgileri alamak ve mobil uygulamanın içinde görüntülemek üzere işleyecektir. Bu durumda sitenin web tarayıcıları için giriş adresinin farklı olarak mobil cihazların bağlanabilmesi için API olarak bilinen özel bir adresi olacaktır. API noktalarının adresleri “Web API” veya “Web Service” olarak bilinir. Internet üzerinde pek çok API’lerin bulunduğunu söyleyebiliriz. Ayrıca, bazı API’ler bir veritabanını sorgulamak veya güncellemek için tasarlanmışken, diğer bazı API’ler yalnızca bir işlemi başlatabilir.   

 API çağrılarının hacmine bağlı olarak, Google gibi bir API sağlayıcısı, API’yi kullanmak için uygulama geliştiricisinden bir ücret talep edebilir (“API ekonomisi” fikrini doğurabilir). Durum böyle olduğunda, uygulama geliştiricisinin, işlevselliği sıfırdan geliştirmeye karşı API’yi kullanmanın tüm maliyetlerini hesaplaması gerekir. Veya API ekonomisinde sıklıkla olduğu gibi, geliştirici de benzer bir hizmet için daha ekonomik bir sağlayıcı arayabilir. 

Veritabanı sorgusunun veya bir harita gibi etkileşimli işlevselliğin yada belirli bir işlevselliğin yapılabilmesi, API aracılığıyla erişilebilir kılınması, yazılım teknolojisinin ve bilgisinin piyasaya sunulma biçimini önemli ölçüde değiştirir.

Sonraki yazılarımızda API kullanımına farklı senaryolar üzerinden örneklerle nasıl yapılandırıldıklarına değineceğiz.  

 

Yorum

Yorum Yap