30 Temmuz 2012

Slim ve MongoDB ile Api Denemeleri

ile hasan

Slim (Php framework) ve MongoDB nasıl kurulur başlı başına bir yazı konusu olduğu için başka bir zamanda değinmek üzere doğrudan örneklere geçiyorum.

Api, “Application Programming Interface” ibaresini “Uygulama Programlama Arayüzü” diye doğrudan çevirince pek anlam ifade etmeyebilir. Uygulama ve programlama ülkemizde aynı anlama geliyor çoğu zaman. Uygulama; programlama ile yapılmış bir üründür. API’den anlamamız gereken şey ise uygulamaların programlanabilen arayüzleridir. Kabaca bir uygulamanın başka uygulamalarla nasıl iletişim kuracağını ifade eden kapılardır. Nerede kullanırız api’leri? Mesela Facebook’un PHP ve Javascript apileri vardır. Facebook’a PHP ve Javascript programları ile erişip izin verdiği ölçüde iletişim kurmamızı sağlıyor. Bu sayede kendi yazdığımız uygulamalar ile Facebook’a login olup kullanıcıların arkadaşlarını çekebiliyor, duvarlarına mesajlar gönderebiliyoruz (tabi kullanıcılar da izin verdiği müddetçe). Aynı şekilde Twitter’ın da benzeri api’leri var.

Bizim internet (web) tabanlı minik bir uygulamamız olsun: İşçi kayıt takip programı. Bu uygulamamızın iki ana fonksiyonu var. Biri işçi kaydediyor (isciKaydet). Diğeri de falanca işçi kayıtlı mı diye bakıyor (isciKayitliMi). Biz istiyoruz ki bu web tabanlı uygulamamızı web sitemizden kullanabildiğimiz gibi (bu yazının konusu değil), komut satırından da, ya da herhangi bir nativ mobil uygulamadan da kullanabilelim.

Bu örnek için izlediğimiz yol Slim’in harika api uyumlu hafif yapısı ile api fonksiyonlarımızı yazmak ve verilerimizi MongoDB ile saklamak. MongoDB şart değil, sadece şu sıralar bu konuya eğildiğim için MongoDB örneği vermek istiyorum. Slim ile Zend Framework’ün sadece veritabanı (Zend DB) classlarını kullanarak çok rahat proje geliştirebilirsiniz.

Bizim iki fonksiyonumuz Slim’de şu şekilde hazırlandı:

$app->post(“/iscikayitprogrami/isciKaydet/:ad/:soyad”, “isciKaydet”);
$app->post(“/iscikayitprogrami/isciKayitliMi”,”isciKayitliMi”);
$app->post(“/iscikayitprogrami/isciKayitliMi/”,”isciKayitliMi”);
$app->post(“/iscikayitprogrami/isciKayitliMi/:kelime”,”isciKayitliMi”);

$m=new Mongo();   //localdeki mongodb sunucusuna baglan

$_DB=$m->iscikayitprogrami;   //veritabani sec

function isciKaydet($ad,$soyad)
{
global $_DB;
$coll = $_DB->isciler;

$obj=array(“ad”=>$ad,”soyad”=>$soyad);
if($coll->insert($obj))
{
echo ‘isci kaydedildi’;
}
}

function isciKayitliMi($kelime=””)
{
global $_DB;
$coll = $_DB->isciler;

if($kelime)
$cursor = $coll->find(array(‘$or’=>array(array(“ad”=>$kelime),array(“soyad”=>$kelime))));
//bu yapi sayesinde or sorgusu yapiyoruz. adi $kelime olan veya $kelime olan kayitlar
else
$cursor = $coll->find();  //kelime girilmemisse tum kayitlar

foreach ($cursor as $obj) {
echo $obj[“ad”] .” “. $obj[‘soyad’].”\n”;
}
}

Bu iki fonksiyonu hazırladıkdan sonra artık kendi lokal makinenizdeki komut satırından curl yardımı ile şu şekilde api’nizi deneyebilirsiniz:

# curl -d “” http://iscikayitprogrami.com/isciKaydet/Huseyin/Kerata
# isci kaydedildi
# curl -d “” http://iscikayitprogrami.com/isciKaydet/Mustafa/Ondankerata
# isci kaydedildi

Kaydettiğimiz işçileri arayalım:

# curl -d “” http://iscikayitprogrami.com/isciKayitliMi/Huseyin
# Huseyin Kerata
# curl -d “” http://iscikayitprogrami.com/isciKayitliMi/Ondankerata
# Mustafa Ondankerata
# curl -d “” http://iscikayitprogrami.com/isciKayitliMi/
# Huseyin Kerata
# Mustafa Ondankerata

Curl komut satırından kullanılabildiği gibi perl, php gibi pek çok dille de kullanılabilir. Böylece kendi favori programlama dilimizle İşçi Kayıt Programı’mıza veri girişi yapabilir ve kayıt sorgulayabiliriz. iPhone uygulası bile yapabiliriz.  Yeteneklerimiz api’nin bize sunduğu kapılarla sınırlı.

Api’yi de api’yi kullanacak diğer programları da biz yazacaksak eğer bağımsız düşünmeyi öğrenmeliyiz. Api yazarkan api programcısı olarak “benle konuşacak herhangi bir programcı benden şunları talep edebilir, ben ona şunları sağlarım” gibi düşünmeliyiz. Api’yi kullanacak uygulamayı hazırlarken de sanki api’yi başkası yazmış gibi “eğer şöyle bir iş yapacaksam apinin şöyle bir fonksiyonu olmalı” diye araştırmalıyız. Böylece ihtiyaçları belirleyip birbirinden bağımsız ama mümkün olduğunca olası tüm temel ihtiyaçlara cevap verebilen bir api geliştirebiliriz.