Şu tarihte

Uzun Yola Çıkan Bir API

Aman tanrım, o kadar zamandır yazmamışım ki etrafın tozunu almak bir hayli vaktimi aldı. Dolma kalemlerime mürekkep yetişmediğinde anlamalıydım buraları boşladığımı. Ne idi amacımız "kendime notlar" çıkarmak. Yeri geliyor not çıkarmayı dahi unutuyorum, sahi ben ne yapıyorum? Neyse boş muhabbeti yazının başlığına muvafık gelsin diye kısa kesiyorum.

Başlığı okuyanlar API ne yahu? diyecektir. Hemen tulumumu giyip geliyorum, bekleyin. Efendim, API (Application Programming Interface) dediğimiz bir nane-ül method vardır. Ben bunu inatla "eypiay" diye okusam da büyük bir çoğunluk "api" diyerekten okumaktadır. Kimseyi yargılamıyorum hepimiz alfa olmak zorunda değiliz. API, çok kısaca bir "aracı kurumdur". Siz ondan bir şey ister veya verirsiniz o da size bir takım işlemler yapıp sonucunu söyler. Mesela hepimizin her gün kullandığı bankacılık uygulamaları API'lar üzerinden çalışmaktadır.

api nasil

Banka örneğinden yola çıkarsak şöyle oluyor, siz bir bankanın müşterisisiniz ve bilgileriniz bankanın ULTRA güvenli veritabanlarında tutuluyor. (umarım öyledir) EFT yapmak istediğinizi varsayalım. Öncelikle uygulamaya T.C. kimlik numaranız ve şifreniz ile giriş yapmalısınız. Kimlik numaranız ve şifrenizi girip "Giriş" butonuna bastığınızda ne oluyor? Uygulama, verileri bankanın API'ına gidip "Bu kullanıcı adı ve şifre doğru mu ağam?" diye soruyor. Nasıl mı yapıyor? - Herhangi bir bankacılık API ile çalışmadığım için varsayımlarla konuşacağım - API'lar HTTP protokolünde bulunan methodlar ki bunlar "POST, PUT, GET, DELETE" vd. ile kullanıcı (sizin mobil uygulamanız) istekte bulunuyor. Mesela kullanıcı adınız ve şifrenizi doğrulamak için GET methodu kullanılabilir (veya POST). API bu isteği gidip bankanın veritabanlarına iletiyor. Veritabanı da bulduğu cevabı API'ya iletiyor. API bu verilerle kullanıcıya (yani size) bir cevap dönüyor. "Kullanıcı adı veya şifreniz yanlış." gibi, veya doğruysa kendiniz zaten uygulamada buluyorsunuz. (2-Factor Authorization mevzusunu pas geçiyorum.) Yani siz burada API'ın belirlediği methodlar dışında sunucu veya veritabanı ile işlem yapamıyorsunuz. Bu eğer güvenliği doğru sağlanırsa güzel bir yaklaşım. API'ın güvenliği tüm bankanın selameti açısından kritik öneme sahip olacaktır yani.

EFT yapıyorduk değil mi? Yani işimiz bitmedi, siz uygulamada EFT ekranına gidip IBAN ve diğer bilgileri doldurduktan sonra API'a istek yolladığınızda API aslında arkada hem IBAN'ı kontrol ediyor hem sizin belirlediğiniz para miktarını kontrol ediyor (Önyüzden de yapılabilir) hem de veritabanında gerekli işlemleri yapıp parayı göndermenizi sağlayan fonksiyonları çalıştırıyor. Bunun sonucunda da size başarılı veya başarısız sonuçlar dönüyor ve ya Enpara gibi ücretsiz ya da İşbankası gibi 9.5 TL EFT ücreti kesiyor. (Keşke viral alsaydım) Buradaki güvenlik, yetkilendirme gibi konular detay gerektirdiği için anlatmıyorum.

Ee bunu mu anlatmaya geldim, aslında hayır. Bir süredir Javascript ve NodeJS ile haşır neşirim. Bu sebeple yapacak bir şeyler arıyordum (sanki yokmuş gibi) ve geçenlerde attığım bir tweet beni harekete geçirmekten alıkoyamadı:

https://twitter.com/kerimkaandonmez/status/1124754978365739008

Amatörce bir yerden başladım ve nev-i şahsına münhasır İsmet Özel'in şiirlerini ve bu şiirlerden dizeler veren bir API geliştirdim. Amacım rastgele dize vermesiydi fakat henüz onu başaramadım an itibariyle. Şu an rastgele şiir verebiliyor hem HTML sayfası hem de JSON formatında. İstediğiniz şiirin başlığını yazarakta HTML/JSON formatında cevap alabiliyorsunuz. Şiir ekleyebiliyor, değiştirebiliyorsunuz. Veri modelinde şu an başlık, yıl ve şiir verilerini alıyor, daha fazlasına gerek var mı bilmiyorum belki Youtube linki olabilir.

Mesela cURL ile şöyle bir istek yaptığınızda:

Şöyle bir cevap dönecektir:

Bunu Python ile yapmak isterseniz şöyle bir kod yazmanız gerekir:

HTML olarak bir örnek vermek gerekirse şuraya bakılınabilir. Diğer endpointleri görmek için sizi Github reposu'na alalım.

Biraz teknik bilgi vermek gerekirse, NodeJS ve Express Framework ile MongoDB kullanarak geliştirdim. MongoDB Atlas adlı bulut veritabanı çözümünü kullandım, node Heroku üzerinde çalışıyor. Yani API ve veritabanı farklı sunucularda çalışıyor. Ayrıntılara Github reposundan ulaşabilirsiniz. Geliştirmeye devam ettiğim için hala eksiklikleri bulunuyor, eklemek istedikleriniz varsa Issues kısmından belirtebilirsiniz.

Bu gereksiz yazıya da böylelikle son veriyorum, "Uzun Yola Çıkan API" başlığı size bir şey ifade etmediyse Özel'in Mataramda Tuzlu Su şiirini okumanızı tavsiye ederim.