bylge-logo

    Bylge

    API Nedir?

    Bu içeriği birden fazla kez okumanızı tavsiye ediyorum. Bunun haricinde, farklı kaynaklardan yararlanmanız iyi olur. Öğrenim açısından hangi konu olursa olsun t

    Picture of the Ali Söylemez

    Ali Söylemez

    @alisoylemez

    Bu içeriği birden fazla kez okumanızı tavsiye ediyorum. Bunun haricinde, farklı kaynaklardan yararlanmanız iyi olur. Öğrenim açısından hangi konu olursa olsun tekrarlı okuma yapmanız ve farklı kişilerden bilgi almanız konuyu tam olarak anlamınız için hayati. Bazı metinlerin üzerinde linkler(kırmızı ile belirtilmiş) verdim. İmkanınız varsa, o kısımları es geçmemeye çalışın. Bazı kelimeler için türkçe karşılıklarını bulmakta zorlandım, belki yanlış çeviri yapmış olabilirim, lütfen maruz görün.


    Yazılım ve programlama ile azıcık haşir neşir olan herkesin kulağına çalınmış bir kelimedir API. IT'nin kutsal sakallı ve takım elbiseli elçilerinin, eventlerde çılgın gibi kullandığı söylemesi dile kolay olan bu akronim kelime, adana kebap gibi on dakika da hapur şupur bitirilmeye çalışılırsa beyin fesatı geçirtir, can sıkar, yazılımdan soğutur, afyon dinlenme tesislerinde ayaz yemiş gibi insanı dondurur. Sizi içeriğe ısındırmak için yazmış olduğum bu lüzumsuz betimlemeleri geçerek, isterseniz içeriğe daha uygun bir yazım dili ile konumuza başlayalım.



    API_Nedir?



    API'nin Açılımı?

    API'nin açılımı Türkçe Uygulama programlama arayüzü anlamına gelen Application Programming Interface'dir. API'nin yazılımsal olarak teknik tanımlamalarına geçmeden önce. Bu kelimenin sonundaki arayüzü açıklamak istiyorum. Bu kelimeyi açıkladığımız zaman kafanızda tam olarak nasıl bir görevi olduğunu rahatlıkla anlayacaksınız. Uygulama ve Programlama kelimelerinin ifade ettikleri anlamları herkesin bildiğini varsayıyorum. Buradaki kritik ve öğrenilmesi gereken kelime Arayüz(Interface). Arayüz, tdk ya göre aşağıdaki anlama geliyor:


    Bilgisayar yazılımlarının kullanıcı tarafından çalıştırılmasını sağlayan, çeşitli resimlerin, grafiklerin, yazıların yer aldığı ön sayfa. - TDK


    Yukarıdaki tanıma göre yazılımcı olmayan kullanıcıların yazılımsal araçlar için kullanmasını sağlamak için geliştirilen ön sayfalar arayüz deniyor. Örneğin, bylge.com üzerinde gezinebilmeniz ve çeşitli işlemleri yapabilmenizi sağlayan şey Bylge.com GUI(Graphical User Interface)'sidir. O zaman şöyle bir sonuç çıkarmamız yanlış olmayacaktır; Interface, yazılımların insanlar tarafından kullanabilmesini sağlayan aracı bir yazılımsal ek işlevdir.


    Yüzeysel olarak vermiş olduğum bu interface açıklamasını bir metaforla zihnimizde daha kalıcı hale getirelim. Eğer yazılımcıysanız yukarıdaki paragraftaki açıklamalarım ve aşağıdaki vereceğim gerçek hayattan örneklemeyi okumanıza gerek yok. Şu anda bu metinler vasıtasıyla iletişim halinde olduğum kişiyi bilemediğim için bu açıklamayı yapmak zorunda hissediyorum.


    Şimdi bir araba düşünelim ve bu arabayı öyle ki bir yazılım bileşeni olarak kabul edelim. Bu arabayla hız yapabiliriz, durmak için frene basabiliriz veya radyoyu kullanarak müzik dinleyebiliriz. Peki bu işlemleri yaparken tam olarak ne gibi işlemler yapıyoruz?. Çok basit, hızlanmak için gaza yükleniyoruz, hızımızı azaltmak için frene basıyoruz ve radyoyu açmak için açma kapama tuşuna basıyoruz. Arabanın içine araba üreticileri tarafından eklenen bu mekanik parçalar, arabanın insanla iletişimi geçmesini sağlayan "arayüzleridir". Bu örnekte dikkat ederseniz, arabanın gaz pedalına bastığımız zaman araçtan beklentimiz sadece arabanın hızlanmasıdır. Bunun haricinde gaz pedalı ile kurmuş olduğum bu ilişkide başka bir şeyi bilmemize gerek yok. Arabayı devinime geçerken enjektörlerin ateşlenmesi, lambda sensörlerinin emisyonu kontrol etmesi, pistonlardan aracın ne kadar güç aldığı, krank milinin gücü tekerleklere ne kadar aktardığı vb. işlemler bizim hiç ama hiç alakadar etmez. Sadece, arabayı nasıl yürüteceğiniz bilsek yeterli. Yukarıda GUI olarak geçtiğim ancak açıklamasını detaylı olarak vermediğim şey budur. Sizin işlemlerinizi yaparken arkasındaki karmaşık süreçleri saklayarak kolay iş yapabilmenizi sağlar.


    API, GUI'ye benzer mantıkla çalışır. İkisi arasındaki fark, GUI kullanıcılara yönelik arayüzler sağlarken, API makinelere, yazılımlara ve programların birbiriyle olan iletişimi için arayüzler sunar. Bu kısma kadar ki kısım sadece "Arayüz" nedir kısmını açıklıyor, kelimenin anlamını ve ifade ettiği şeyi anladığımıza göre Apinin tanımlaması, özellikleri, işlevler vb. gibi konulara geçebiliriz.


    API Ne Demek?

    API'nin farklı kaynaklarda yüzlerce tanımını bulmak mümkün. Bana göre API'yi en sade ve güzel şekilde açıklayan tanımlama şudur:


    Uygulama ve sistem yazılımlarını oluştururken veya bunları başka bir sistemle entegre ederken kullanılan tanımlamalar ve protokoller dizisi.


    API, yazılım olmasından ziyade bir programlama konseptidir. Komut satır araçları, kurumsal kaynak planlama projeleri, web siteleri ve yapay zeka gibi daha farklı alanlarda kullanılır. API, başka yazılımlarla veya kaynaklarla iletişim kurmak için yazılım dünyasının uzun yıllardır kurduğu sistemsel ve kurallarla sınırları tanımlanan bir ara geçittir. API'yi, günlük hayatta iki tüzel kişi arasında yapılan şartnameler olarak düşünebilirsiniz. İki kişi arasında yapılan sözleşmeler, yazılım dünyasında API'ler aracılığıyla yerine getirilir.


    Apiler bilgisayar biliminde çok önemli bir yer kaplayan ve her programcı için mutlaka bilinmesi gereken konulardan biri olan Soyutlama metodolojisi üzerine inşa edilmiştir. Soyutlama bilgisiyar biliminde, sistemin hacmiyle birlikte artan ve karmaşıklaşan yapıyı daha kolay yönetmek için kullanılan bir tekniktir.


    Api, sadece başka bir yazılımın başka bir yazılımla iletişim kurmak için gerekli olan kurallar ve tanımlamalar bütünü olarak düşünmemek gerekir(Bkz: Mikroservisler ). Kimi zaman çok hacimli yazılımların kendi bileşenleri arasında iletişim kurması api olarak adlandırılabilir.


    Apiler, sistemin genişletilmesini sağlaması için fevkalade kullanışlı bir yapıya sahiptir. Buna şöyle bir örnekle açıklama getirebiliriz; google translate çok fazla sitede çeviri olarak görüyoruz. Diğer siteler bu çevirme işlemlerini nasıl yapıyorlar? Tahmin ettiğiniz gibi arkada programsal olarak tasarlanmış bir programsal arayüz vasıtasıyla, translate'in apisine bağlantı kurup gerekli olan veriyi aldıktan sonra ham veya işlenmiş şekilde size kaynaktan gelen datayı sunuyorlar.


    Apiler sadece iki temel bileşenin üzerine inşa edilir.


    Bugün dünyada sayamayacağımız kadar api var. Günümüzde fark etmesekte her alanda dijital dünyaya kendini kabul ettirmiştir. Örneğin, hava durumlarını uygulamalarının kullandığı hava durum apileri, tercüme için dil apileri, finansal işlemler için her bir kuruluşun kendine ait apileri, yandex api, facebook api vb.


    Yukarıda iki madde halinde vermiş olduğum bileşenlerin birincisideki maddeyi biraz açmak gerekirse. Yazılım, talep ettiği veriye ulaşabilmek için API'nin tasarımında belirtilen koşullara uyarak API'yi çağırmak zorundadır. Nasıl araba metaforumuzda fren yapmak için gaza basmıyorsak, apilerde de bir şey talep etmek için apinin belirlemiş olduğu tanımlamalar ve spesifikasyolara uyarak talebimizi yapmak zorundayız. API'yi sağlayan yazılım, talep edilen bilgiyi yine kendi içinde belirlemiş olduğu tanımlamalar çerçevesinde ya isteği olumlu cevaplar veya istek belirlenen sınırlar dışındaysa red cevabıyla diğer yazılımı bilgilendirir.



    API 'lerle birlikte bu protokolün nasıl kullanıcılığı dokümanlarla açıklanır. Bunu, günlük hayatımızdaki diğer elektronik ve mekanik eşyaların kullanım kılavuzu gibi düşünebilirsiniz. Yazılımcılar, servis hizmeti alacakları apilerde yerine getirmesi gereken teknik koşulları, sağlayıcı tarafından dokümante edilmiş bu apiler yardımıyla bulurlar.


    Yukarıda bahsi geçen soyutlamayı şimdi daha açık hale getirirsek. Yukarıdaki iki yazılım arasındaki kaynak paylaşımında, ihtiyacımız olan verileri elde etmek için apiyi sağlayan yazılım eğer bizim yazılım dilimizde farklı ise, apiyi sağlayan yazılımı öğrenmemize gerek kalmaz. Sadece, bir yazılımdan bir yazılıma bağlantı sağlayarak bu süreci yerine getiririz. Api tam bu noktada iki sistem arasındaki karmaşıklığı ve çalışma detaylarını gizleyen bir soyutlama katmanı olarak görev yapar. Bu cümle bizi şu sonuca götürür. Her api yazılım dilinden bağımsız olarak fonksiyon çağrılarak ile tüketilir.


    Apilerin burada listelemeyeceğim kadar çeşitli kullanım amacı var. Bugün itibariyle her şeyin apisi mevcut desek yalan olmaz. Ama kısaca bir kaç madde ne gibi amaçlar için kullanıldığını belirtmek gerekirse.



    Bu başlığı son ama önemli bir cümle ile kapatırsak. API'yi kullanırken hem bu hizmeti sağlayan üçüncü kişilerin ara yüz için belirlemiş olduğu kurallar ve tanımlara uyulur, hem de bu api sayesinde yazılımla direkt olarak iletişime geçilir.


    API Tipleri

    Apiler kullanabilirdik politikasına göre ayrılırlar.


    Özel Apiler(Private APIs): Bu apiler, bir organizasyonun içindeki servisleri ve çözümleri geliştirmek için tasarlanırlar. Tam zamanlı olarak organizasyonda çalışan yazılımcılar veya çözüm ortakları mevcut olan sistemi geliştirmek veya başka işlevsel yetenekler kazandırmak için oluşturulmuş olan apileri kullanabilirler. Uygulama kendisi açık olsa bile apiler sadece bunu kullananlara açık olabilir.


    İş Ortağı Apiler(Partner APIs): İki veya daha fazla iş ortağı tarafından ortak olarak bakımı yapılan ve hizmeti sağlanan apilerdir. Bu api tipi daha çok yazılım ve teknoloji endüstrisindeki şirketler tarafından kullanılır. Aynı işi yapan ve maliyetleri düşürmek isteyen firmalar ve ortak api sistemi kurarak uygulamalarını geliştirmek ve daha kapsamlı hizmet sunmak için bu tür apilere yönelirler.


    Açık Apiler(Open APIs): Üçüncü parti yazılımcıların hepsine açık olan api türüdür, kimi zaman yazılımcıya dönük olarak apiler olarak da adlandırılır. Bir apinin açık api olarak adlandırabilmesi için mutlaka hiçbir kullanım kısıtlaması olmadan, ücret talep edilmeden ve mutlaka dokümante edilerek sunulması gerekir. Mesela, şu anda okumuz olduğunuz bu yazıyı ben bir editör vasıtasıyla size yazıyorum ve bu editörü sistemime dahil edebilmek için bir adet api kullanıyorum ama bu apiyi sağlayan kişi açık api olarak tanımladığı için kullanım için yazılımcıdan yetki almak zorunda değilim. Ama bu içeriğe destek olmak isteyen arkadaşlardan kredi kartı ile ödeme yapmalarını sağlamak kullanmış olduğum finansal api için belirli bir ücret vermem ve aynı zamanda api sağlayan şirket tarafından apiyi kullanabilmem için yetkilendirilmem gerekiyor. Açık apilerini tanımlamasını daha detaylı olarak incelemek isteyen arkadaşları githubdaki open api tanımlamasına bakabilirler.



    API Kullanım Senaryoları

    Apilerin temel olarak dört farklı kullanım senaryosu vardır, bunlar:


    Uzak Apiler(Remote APIs): Farklı makinelerde çalışan uygulamalar arasında standart iletişim sağlamak için kullanılır. Bir yazılım, fiziksel olarak farklı bir yerde bulunan kaynaklara ulaşmak için uzak apilerden yararlanır. Genellikle birbirinden farklı yerlerde bulunan uygulamalar genellikle internet üzerinden veri alışverişini yaparlar.


    Web Apiler(Web APIs): Api sınıfının en yaygın olan tipidir. Web apiler, client-server mimarisi ile inşa edilmiş iki farklı web temelli sistem arasında makine kodları aracılığıyla iletişim sağlarlar. Bu tip apiler, web uygulamaları tarafından Hypertext Transfer Protocol (HTTP) iletilen istekleri(request) server tarafından cevap verilmesi ile haberleşirler.


    Veritabanı Apileri: Veritabanı yönetim sistemi ile uygulama arasındaki iletişim sağlar. Yazılımcılar veri tabanındaki verilere ulaşmak için sorgularla(query) çalışırlar. Bu tip apiler sayesinde verilerin listelenmesi, koşullu olarak alınabilmesi, silinmesi ve değiştirebilmesi gibi farklı görevleri yerine getirir. Günümüzde en popüler veri tabanı apileri Oracle, MongoDB, MySQL, PostgreSQL, CouchDB 'dir.


    İşletim Sistemi Apileri: Her işletim sistemi, bilgisayar donanım kaynaklarının nasıl kullanılması gerektiğini belirten apiler sağlarlar. Örneğin, Windows bunu Windows API 'yle gerçekleştirirken, Linux kernel-user space Api ve kernel interal Api ile kullanıcıların hizmetine sunar.


    API Spesifikasyonları ve Protokolleri

    Api spesikifakasyonlarındaki amaç web servisleri arasındaki veri değişimin standart hale getirmektir. Standart hale getirmek, farklı program dillerinde yazılan uygulamaların ve farklı işletim sistemi üzerinde koşan yazılımların birbiriyle fark gözetmeksizin kaynak paylaşımını yapabilmesini sağlamaktır.


    Geçmişten günümüze kadar belirli başlı api spesifasyonları ise şöyledir.


    Service Object Access Protocol(SOAP)

    Protokolü geliştiren Microsofta göre SOAP, dağınık veya merkezi olmayan sistemlerde yapılandırılmış veri alışverişini olanak sağlayan hafif bir protokoldür. Bu spesifaksyon web uygulamaları tarafından yapılan istek ve cevapların sentaks kurallarını içerir. SOAP ile çalışan apiler, mesajlarını XML mesaj formatıyla HTTP veya Simple Mail Transfer Protocol(SMTP) üzerinden gönderirler.


    Burada kısaca XML 'de değinmek gerekirse. Extensible Markup Language(XML) basit ve çok esnek bir text formatıdır. Günümüzde kullanımı giderek azalmasına rağmen, veri depolamada, internet ve farklı ağlar arasında veri değişimi için hala tercih edilir. XML, mesajlarını hem insanın hem makinenin anlayabileceği text formatında kurallarına bağlı kalarak kodlanmış şekilde iletir.XML metin dokümanları kişisel olarak tanımlanmış nesne etiketlerine izin vermesi nedeniyle çok kolay okunur.


    SOAP, veri alışverişinde güvenlik seviyesi yüksek olan kurumsal kaynak planlama sistemlerinde daha fazla tercih edile gelmiştir. Çoğunlukla, ödeme sistemleri ile çalışan, kimlik ve kullanıcı yönetimi yapan, CRM(Müşteri İlişkileri Yönetimi) hizmeti veren ve telekomünikasyon şirketlerinin bazıları hala SOAP kullanır.


    Representational State Transfer(REST)

    REST, dünyaya ilk defa bilgisayar bilimcisi Roy Fielding tarafından 2000 yılında doktora tezi olarak sunuldu. SOAP bir protokolken, REST uygulamalar oluştururken altı tane koşula uyulması gereken bir yazılım mimarisidir. Bu ikisi arasındaki farkı açıklamam gerekiyor ancak bu açıklama için sanırım yeni bir içeriği ihtiyacım var, bu yüzden bu kısmı size bırakıyorum.


    Rest HTTP üzerinden çalışır. The World Wide Web, bu mimarının yapının en bilineni ve en çok üzerinde uygulama geliştirilen uygulamasıdır. Çoğu yazılımcı tarafından REST, yazılım süreci geliştirmesinde daha az kodun kullanılması ve XML gibi her mesajda belirlenmiş yapıyı takip etmemesi nedeniyle tercih edilir. Rest üzerinde her kaynak benzersiz bir URL ile tanımlanır. Herhangi bir yazılım bu URL'yi sağlayarak kaynağa ulaşabilir. REST yapısını kullanan Web Apileri Restful API olarak adlandırılır. Bu apiler kaynaklarla çalışmak için GET, PUT, HEAD, POST, OPTIONS gibi HTTP requestlerinden yararlanırlar. REST; HTML, JSON, XML veya YAML gibi farklı formatlarda mesajlaşmaya olanak sağlar.


    Bugün web temelli çoğu api veri alış verişinde REST(Representational State Transfer) mimarı yapısını kullanır. Rest, yazılımcılara esnek bir iletişim ve web üzerindeki bilgilerin görüntülenmesi için gerekli olan genel amaçlı bileşenlerin oluşturulmasını sağlayan kolay bir yapı sistemi sunar.


    Rest api'de kaynak veri sağlayacak olan her hangi bir şey olabilir. Bu kaynakların hepsi resource identifier ile adreslenir. Bu adresler genellikle , https://api.bylge.com/x/y... şeklindedir. Uygulamalar bu kaynağa request(istek) göndererek bilgiyi talep ederler, Rest api üzerine kurulmuş olan api ise bu kaynağı tanımlayarak, talebin istediği biçimde(JPEG Image, HTML, veya JSON formatında döner.



    API Örnekleri

    Bugün dünyada dünyanın teknoloji ve yazılım devleri tarafından sunulan ve kullanabileceğiniz binlerce api bulunuyor. Bugün sadece bylge.com üzerinde ben Transferwise API, Stripe API ve Google API gibi çok farklı apiler kullanıyorum. Günümüzde web dünyasında eğer bir platform oluşturulmak isteniyorsa mutlaka apilerden yararlanmak zorundayız. Bugün gerekli olan apileri kullanmadan zengin bir site oluşturmak çok mümkün değil.



    Daha fazlası için buraya bakabilirsiniz.


    API Tasarımı

    API tasarımı, "ne" ve "nasıl" olmalı sorularının nasıl formüle edileceğini belirleme sürecidir. Yazılımda oluşturabilecek diğer her şey gibi api tasarımında da farklı seviyelerde api tasarımı yapılabilir. İyi tasarlanmış bir api stabil olmalı, kullanıldığı kapsamı dikkate almalı ve kullanıcı isteklerini göz önünde bulundurmalıdır. API içinde kullanılacak tutarlı ve güvenilir bir tasarım hız üzerinde oldukça önemlidir. Yapılacak yapısal ve mantıksal hataları büyük olasılıkla veri işleme ve transfer işleminde yavaşlıklara neden olur. Apiler kullanılırken sağlayıcı tarafından verilecek olan dokümanlara dikkat etmek gerekir.


    Madem sonuna kadar geldiniz, üye olmadan geçmezsiniz herhalde.


    Published Date:

    December 17, 2020

    Updated Date:

    December 02, 2023