← Blog'a Dön

API Nedir Gerçekten?

Dört yeni yazı, hemen yazıyorum! ✍️

API Nedir Gerçekten?
Herkesin Kullandığı Ama Tam Açıklayamadığı Kavram
"API kullanıyoruz" cümlesi her yazılım projesinde geçer. Ama "API nedir?" sorusu sorulduğunda verilen cevaplar çoğunlukla ya çok teknik ya da çok soyut kalır.
API, yazılım dünyasının en sık kullanılan ve en çok yanlış anlaşılan kavramlarından biridir. Gerçekte ne olduğunu anlamak, yalnızca tanımı ezberlemekten çok daha değerlidir.

Kelimeden Başlayalım
API, Application Programming Interface kelimelerinin kısaltmasıdır. Türkçeye "Uygulama Programlama Arayüzü" olarak çevrilir. Ama bu çeviri kavramı net kılmak yerine daha da muğlaklaştırır.
Arayüz kelimesi burada kritiktir. Arayüz, iki tarafın birbirine nasıl bağlandığını tanımlayan sözleşmedir. İki taraf bu sözleşmeye uydukları sürece birbirlerinin iç yapısını bilmeleri gerekmez.
Çok daha anlaşılır bir benzetme: Bir restoranda garson sizinle mutfak arasındaki arayüzdür. Ne pişirileceğini, nasıl hazırlandığını bilmenize gerek yoktur. Menüden seçim yaparsınız, garsona iletirsiniz, yemek gelir. Mutfaktaki süreç sizden tamamen gizlidir.
API tam olarak budur. İçeride ne olduğunu bilmeden bir sisteme ne istediğinizi söylersiniz ve yanıtı alırsınız.

API Yalnızca Web İçin Değildir
"API" denildiğinde çoğu kişinin aklına hemen HTTP istekleri ve web servisleri gelir. Bu çağrışım yanlış değildir ama eksiktir.
Android SDK bir API'dir. TextView.setText() çağırdığınızda metnin ekranda nasıl çizildiğini bilmenize gerek yoktur. Android size bu API'yi sunar ve siz onu kullanırsınız. İçeride ne olduğu sizden gizlidir.
Kotlin standart kütüphanesi bir API'dir. listOf() çağırdığınızda hafızada nasıl bir yapı oluşturulduğunu düşünmeniz gerekmez.
Room veritabanı bir API'dir. SQLite sorgularını kendiniz yazmak yerine Room'un sunduğu DAO arayüzünü kullanırsınız.
İşletim sistemi de geliştiricilere bir API sunar. Kameraya erişmek, dosya yazmak, ağ bağlantısı açmak — bunların hepsinin altında donanım sürücüleri ve çekirdek çağrıları vardır. Siz bunları görmezsiniz, işletim sisteminin API'si üzerinden çalışırsınız.
API her yerdedir. Yalnızca internet iletişiminde değil, yazdığınız kodun her katmanında.

Web API'leri: En Yaygın Karşılaşma Noktası
Android geliştiricisi olarak en sık karşılaşacağınız API türü Web API'leri ya da daha spesifik olarak REST API'leridir.
Bir hava durumu uygulaması yazıyorsunuz. Hava verisi nereden gelecek? Kendi sunucunuzu kurmak yerine bir hava durumu servisinin API'sini kullanırsınız. Bu servis size şunu söyler: "Bana şehir adını belirli bir formatta gönder, ben sana o şehrin hava durumunu JSON formatında döndüreyim."
Siz bu sözleşmeye uyarsınız. O servisin veriyi nasıl topladığını, hangi meteoroloji modelini kullandığını, sunucularının nerede olduğunu bilmenize gerek yoktur. Sözleşme yeterlidir.

API Sözleşmesinin Üç Bileşeni
Her iyi tanımlanmış API üç soruyu net biçimde cevaplar.
Ne isteyebilirsiniz? Endpoint'ler, metodlar, parametreler. "Kullanıcı bilgisini almak için şu adrese şu parametrelerle istek gönder" gibi.
Nasıl isteyeceksiniz? Format, kimlik doğrulama, başlıklar. "İsteklerine Authorization başlığı ekle, veriyi JSON formatında gönder" gibi.
Ne alacaksınız? Yanıt yapısı, hata kodları, olası durumlar. "Başarı durumunda 200 ve kullanıcı nesnesi alırsın, kullanıcı bulunamazsa 404 alırsın" gibi.
Bu üç soruya net cevap veren bir API, onu kullanan geliştiricinin arkada ne olduğunu hiç bilmeden çalışmasına imkân tanır. Ve bu bağımsızlık API'nin en büyük gücüdür.

API Versiyonlama: Sözleşmenin Değişmesi
API bir sözleşmeyse, bu sözleşme değişirse ne olur?
Gerçek dünyada API'ler değişmek zorunda kalır. Yeni özellikler eklenir, eski yapılar güncellenir, gereksiz alanlar kaldırılır. Ama bu değişiklikler, mevcut uygulamaları bozmadan yapılmak zorundadır.
Bu sorunu çözmek için API versiyonlama kullanılır. /v1/users adresi eski davranışı korurken /v2/users yeni yapıyı sunar. Eski uygulamalar v1'i kullanmaya devam eder, yeni uygulamalar v2'ye geçer. İkisi bir arada var olmak zorundadır, ta ki eski versiyonu kullanan istemciler güncellenene kadar.
Android uygulaması geliştirirken tükettiğiniz API versiyonlandığında güncelleme geldiğinde ne olacağını her zaman planlamanız gerekir.

Geliştirici Perspektifinden Bakış
API kavramını gerçekten içselleştirmek, yazdığınız kodun kalitesini doğrudan etkiler.
Kendi sınıflarınızı ve modüllerinizi tasarlarken de API perspektifinden bakın. "Bu sınıfı kullanan biri neye ihtiyaç duyar, neyi bilmek zorunda olmamalı?" sorusu iyi bir API tasarımının başlangıç noktasıdır.
Dışarıya açık her public metot bir API'dir. O metodu değiştirdiğinizde onu kullanan tüm kodu etkilediğinizi unutmayın. Kendi sınıflarınızda bile gereksiz detayları gizlemek, bağımlılıkları yönetilebilir tutmanın en temel yoludur.