Direct3D. OpenAL. Winsock. Bunları duymuş olabilirsiniz, belki daha önce kullanmışsınızdır, ancak bir şey kesin: bilgisayar kullanan herkes, bunlardan iyi faydalanan bir yazılımı mutlaka çalıştırmıştır.
Burada bahsettiğimiz şey API’lar – dünya çapındaki programcılar için altın kadar değerli. Bir API’ın tam olarak ne olduğunu açıklarken, nerelerde ve nasıl kullanıldığını hızlıca inceleyeceğiz.
API Ne Demek
API terimi, “Application Programming Interface” yani “Uygulama Programlama Arayüzü” anlamına gelir, ancak yazımızın devamında göreceğimiz gibi, sadece uygulama yapmak için kullanılmaz. Bilgisayar dünyasında bir arayüz, bir bilgisayar sisteminin iki veya daha fazla yönü arasında köprü işlevi gören bir araç.
Bu köprü, donanım şeklinde olabilir (örneğin USB) veya yazılım şeklinde, tıpkı bu durumda olduğu gibi.
Temelde, arayüz, bilgisayar bileşenlerinin birbirine bilgi göndermesine olanak tanır; bazen bu, tek yönlü bir köprü olur (örneğin bir fare USB soketini kullanarak laptopa giriş sinyalleri gönderir), ancak genellikle çift yönlü olurlar.
Bir API söz konusu olduğunda, sahne arkasında sadece veri iletmekten çok daha fazlası gerçekleşir. Veri taleplerinin nasıl yapılacağını, bu taleplerin hangi formatta olması gerektiğini, verilerin nasıl iletileceğini belirleyen kurallar koyarlar. Bu, oldukça kısıtlayıcı gibi görünebilir, ancak API’lar programlamayı çok daha kolay hale getirmeye yardımcı olurlar.
Çünkü, bilgisayar sisteminin tüm arka planda çalışan karmaşık detaylarını ve iç işleyişini programcıdan gizler ve yalnızca ihtiyacı olan araçlara erişim sağlar. Bu da demek oluyor ki, API’lar çok çeşitli olmalılar; bazıları çok geniş kapsamlı bir doğaya sahipken, bazıları oldukça belirli bir rolü yerine getirir.
Muhtemelen duyduğunuz API’lar
Eğer bir PC oyuncusuysanız, kesinlikle 3D grafikler yaratmak için kullanılan bazı API’ları bilirsiniz – en dikkat çekici olanlar OpenGL, Direct3D, ve Vulkan’dır. Bunlar, her türlü görselleştirme kodunun temel iskeleti işlevi görür ve programcılara karmaşık görselleri nispeten kolay bir şekilde yaratma imkanı tanır.
Grafik API’ları, her şeyin nasıl biçimlendirileceği ve yapılandırılacağına dair özel kurallar koyar ve rutin matematiksel algoritmaları işlemek için basit talimatlar sunar. Hepsi yıllar içinde önemli ölçüde güncellendiler ve yalnızca güzel görüntüler yapmakla kalmayıp, compute shaders sayesinde çok daha fazlasını yapabiliyorlar.
PC dışındaki oyun platformları da API’lar kullanır – Microsoft, Xbox için Direct3D‘nin değiştirilmiş bir sürümünü kullanırken, Nintendo ve Sony, Switch ve PlayStation için kendi sürümlerini kullanır, ancak her ikisi de OpenGL‘in temellerine dayanır.
Eğer telefonlarda oyun oynamayı seviyorsanız, onların da grafik API’ları var, örneğin Apple ürünlerine özel Metal.
Okuyucular, 1990’larda bazı grafik kartı üreticilerinin kendi API’larına sahip olduğunu hatırlayabilir – 3dfx, Glide‘ı ve S3 Graphics, S3D‘yi geliştirmişti. Bunun nedeni, OpenGL gibi API’lerin nispeten yeni olması ve üreticilerin ihtiyaç duyduğu özellik seti ve performansa sahip olmamalarıydı.
Bir süre için Glide, grafik API’leri arasında zirveye oturdu, çünkü programlaması kolaydı ve 3dfx’in Voodoo‘sunu en iyi şekilde sergiliyordu. Glide ve S3D çok kısa ömürlüydü, çünkü oldukça özel tasarımlara sahiplerdi – Direct3D açık kaynaklı değil, ancak Windows ile sınırlı olmasına rağmen, her GPU üreticisi, ürünlerinde bunu desteklemek için sürücüler geliştirebilir.
Bununla birlikte, özel grafik API’ları hala kullanılmakta. Nvidia’nın CUDA API’ı, yalnızca kendi GPU’ları için özel olup, 3D görselleştirmeden ziyade, genel amaçlı hesaplama işler için kullanılır.
2013’te, AMD, Battlefield oyunlarının geliştiricileriyle iş birliği yaparak “düşük seviyeli” bir API üzerinde çalışmaya başladı.
“Düşük seviyeli” terimi, API‘daki donanım soyutlamasını ifade eder – yazılım rutinleri, çipin temel mimarisinin belirli detaylarını geliştiriciden gizler ve bu da, farklı platformlarda çalışacak bir program yazmayı daha kolay hale getirir. API’ın bu alandaki yaptığı iş ne kadar fazla olursa, işlenmesi gereken CPU yükü de o kadar fazla olur.
AMD‘nin Mantle‘ının amacı, Direct3D ve OpenGL‘den daha az CPU bağımlı olması ve daha fazla programlanabilirlik sunmasıydı. Proje geliştirmesi 2015’te durdu ve 2019’da tamamen raflara kaldırıldı, çünkü AMD çalışmalarını ücretsiz olarak Khronos Group‘a devretti – bu grup Vulkan‘dan sorumlu idi.
API’ların Tek İşi Güzel Görüntüler Yaratmak Değil
Oyunlar, yalnızca görsellerden ibaret değiller: ses, ağ, ve giriş yönetimi gibi diğer bileşenler de kodlanmalı. Direct3D, aslında büyük bir koleksiyonun parçası ve bu koleksiyon DirectX olarak bilinir; oyun içindeki tüm bu öğeleri içeren API’lar ve yazılım kütüphanelerini içerir.
Örneğin, DirectInput, oyun kumandalarından, joystick’lerden ve direksiyonlardan gelen komutları yönetir. Doğal olarak, bunlar için de OpenGL karşılıkları vardır (örneğin, ses için OpenAL), ancak bazıları işletim sistemi tarafından da karşılanabilir, ki buna birazdan göz atacağız.
Donanım ile iletişim kurma konusuna gelirsek, telefonların genellikle sahip olduğu çok sayıda özellikten yararlanmak için kullanılabilecek birçok API var. Örneğin, hemen hemen her modern telefonda bir ivmeölçer bulunur (üç boyutta hareketi algılayan minik bir çip).
Bir uygulama, telefonun hangi yönde olduğunu bilmek isterse, programcılar bu bilgiyi kolayca almak için bir API kullanabilir.
Arttırılmış gerçeklik uygulamaları, örneğin bir yıldız gözlem uygulaması, böyle API’ları kullanan yazılımlara iyi bir örnek. Eğer telefonunuzu gece gökyüzüne doğrultarak hangi takımyıldızlarını gördüğünüzü gösteren bir uygulama ise, o da kamera, ivmeölçer, GPS sistemi, dokunmatik ekran gibi birçok API kullanır.
Bir uygulama, herhangi bir sosyal medya platformu ile entegre olacaksa, API’lar yine devreye girer! Hangi isimle anıldıklarını bilmeseniz bile, kesinlikle bu API’lar ile yapılmış bir program kullanmışsınızdır.
Bilgisayar Varsa, API Vardır
İki önemli, ancak oldukça spesifik API sınıfı, Remote ve Web API’larıdır ve ikincisi, birincisinin alt kümesine ait. Bunlar, bir sistemde çalışan, ancak başka bir sistemdeki veriye erişen ve bunu manipüle eden uygulamalar için tasarlandılar. Şu an bu web sitesini okurken kullandığınız tarayıcı, her iki API’ı da kullanan uygulamalara bir örnek olarak verilebilir.
Bu API’lardan bazıları asla halka sunulmaz (yani Özel API’ler) ve yalnızca onları yaratan organizasyon tarafından kendi dahili uygulamaları için kullanılabilir.
Diğerleri, onaylı kullanıcılara kiralanan Ortak API’lar olarak bilinirler; bu sistem, API sahibinin, uygulamanın hangi verileri talep ettiğini tam olarak kontrol etmesini sağlar. Hiç bir paylaşımlı yolculuk uygulaması kullanarak bir araç rezervasyonu yaptınız mı? Bu da bir Özel Uzaktan API kullanımına örnek olarak verilebilir.
Ancak çoğu bilgisayar kullanıcısının kullandığı uygulamalar, Halka Açık API’lar ile yapılıyor. Windows tabanlı PC’ler, Windows API (genellikle WinAPI olarak adlandırılır) kullanarak yazılır ve macOS, iOS, Linux, Android gibi diğer işletim sistemleri de, geniş bir kamuya açık programlama arayüzleri koleksiyonu sunar.
Tıpkı DirectX gibi, bunlar, veri depolamadan sistem hizmetlerine ve güvenliğe kadar her şeyi işlemek için çok sayıda kısayol sağlayan bir kütüphane koleksiyonları olmakla birlikte, yaygın GUI öğeleri, ağ oluşturma ve program yönetimi yaratmaya da olanak tanır.
WinAPI ve Cocoa’ya aşina olan birçok okuyucumuz olabilir; hatta bazıları POSIX’i de duymuştur. POSIX doğrudan bir API olmasa da, IEEE Computer Society tarafından geliştirilen ve çapraz platform uygulamalar oluşturmak için kullanılan bir dizi standarttan oluşur. Bu standartlar dolaylı olarak çeşitli API’ları da kapsar.
POSIX başlangıçta Unix tabanlı sistemler için tasarlanmış, ancak günümüzde farklı işletim sistemleri tarafından da uygulanmakta. Öte yandan Windows, bu standartları tamamen benimsememekte ve bazı API’larıyla bu yapıdan kısmen ayrılmakta. Yine de, bugün kullanılan çoğu API, kullanıcı dostu, sağlam ve işlerini oldukça verimli bir şekilde yapıyor – resmi olarak POSIX uyumlu olmayabilirler, ancak kurallar tarafından şekillendirilmişler.
Sonuç
İşte API’lar kısaca böyle. Kodlamayla ilgileniyorsanız – ister deneyimli bir geliştirici olun, ister Stack Overflow’da ilk sorularınızı soruyor olun – artık API’ların ne olduğunu biliyor ve sundukları kolaylık için muhtemelen minnettarsınız. Ama sadece bir bilgisayar kullanıcısıysanız – bir oyuncu, bir ofis çalışanı ya da uygulama mağazalarında saatler geçiren biri – API’lar hakkında biraz fikir sahibi olmak iyidir.
Bir sonraki Techolay içeriğimizi okurken, YouTube kanalımızdan videolarımızı izlerken ya da Yeni bir tablet kurarken, arka planda sessizce çalışan API’ları bir selamlamayı unutmayın. Onlar olmasaydı, bugün kullandığımız yazılımlar çok daha az olurdu ve olanlar da bolca hatayla dolu olurdu.