Php ile Rest Api Hazırlama Ders-2

Merhaba arkadaşlar mobilhanem.com üzerinden hazırladığımız rest api eğitimlerinde bir önceki dersimizde rest api hakkında bilgiler vermiştik. Bu dersimizde artık rest apimizin temellerini atacağız. Öncelikle yazacağımız rest apiyi kullanacak insanların gönderdikleri sorgulardan aldıkları cevap türlerini header içerisinde için HTTP mesajları eklememiz gerekmektedir. HTTP mesajlarının listesine buradan bakabilirsiniz.

Rest apinin temel mantığı tek bir base url kullanarak çoklu işlev gerçekleştirmektir. Biraz daha detaylı anlatacak olursam; örneğin bizim base urlimiz /users/  olsun bu linke:

  • POST methodu ile sorgu istek atarsak üye ekleme,
  • PUT methodu ile sorgu atarsak güncelleme,
  • GET methodu ile sorgu atarsak listeleme,
  • DELETE methodu ile istek atarsak silme işlemi gerçekleştirsin.

Rest apiyi hazırlarken örnek alacağımız proje basit bir üyelik uygulaması olacak. Apiyi tamamladığımızda yazdığımız aşağıdaki işlemleri gerçekleştirebiliyor olacak.

  • Üye Kayıt
  • Üye Giriş
  • Üye Bilgileri Güncelleme
  • Üye Bilgileri Çekme
  • Üyelik Silme

Apiyi hazırladıktan sonra android tarafında da bir uygulama hazırlayıp yazdığımız rest apiyi test edeceğiz.

Sitemizde henüz OOP dersleri yayınlamadığımız için yazacağımız rest apiyi salt php kodları ile hazırlayacağız. İstek olması durumunda OOP yani nesne yönelimli olarakta apimizi yazabiliriz.

Öncelikle veri tabanımızı hazırlayalım.

Apiye üye kayıt ekranından başlayarak yapmaya başlayalım.

Öncelikle apimize ait bir klasör oluşturup (örneğin mobilhanem/uyelik) temel ayarlarımızı yapalım.

1- Veri Tabanı Bağlantısı

db.php adında bir dosya oluşturup veri tabanı bağlantımızı yapalım. Rest apimiz boyunca ben veri tabanı işlemleri için PDO kütüphanesini kullanacağım.

Veri tabanı bağlantımızda hata olup olmadığını anlamak için tarayıcı üzerinden localhost/mobilhanem/db.php çalıştıralım. Boş bir sayfa çıkarsa bağlantımız sağlanmış demektir.

2- Kullanacağımız Fonksiyonlar

Hangi fonksiyonu ne için kullandığımızı üzerine açıklama olarak yazdık.

3- .htaccess Dosyası İle Url Yapısı

Biz gelen bütün istekleri index.php de karşılayacağız. bu yüzden apiye hangi url girilirse girilsin bu urli index.php ye yönlendirip urlin sonundaki değerleri de get methodu ile index.php den alacağız.

Kodlarımızı eklemeden önce örnek verecek olursak:

Kullanıcının göreceği ve kullanacağı url:
=> localhost/mobilhanem/users/{5}

Arkaplanada çalışan kimsenin göremediği url:
=> index.php?islem=user_id=5

normal şartlarda 1. urlin çalışması için uyelik/5 yolunda klasör yapımız ve içinde 5 i alabileceğimiz bir yapı olması gerekiyordu.
ama biz url yapımızı editleyerek yukarıdaki gibi yapacağız.

Başlangıçtaki .htaccess kodlarımız:

index.php sayfamızda apinin methodları ile ilgili kısımları ekleyelim. Hangi linkte ne komutu işletileceği ile alakalı koşularımızı ekleyelim.

Apimizin 1.adımı olan üye ekleme işlemini yaparsak, üye  ekleme bir CREATE işlemi olduğu için POST methodu kullanmalıyız.

4- Rest Api ile Http Post  Methodu Kullanımı

Get methodu nedir bilmeyenler get ve post methodunu anlattığımız dersimize  ve get ve post  methodu ile ilgili yaptığımız örneklere bakabilirler.  Rest apide de get ve post  methodunun kullanımında bir farklılık yoktur.

Şimdi üye eklemek için gerekli php kodumuzu yazalım ve geriye eklenme durumunu gösteren bir json çıktısı verelim.

Şimdi Postman aracılığı ile test edelim.

 

 

1. Kullanacağımız method. (Üye ekleme için POST)

2. Api URL. (Çalıştığınız api url yazın)

3. Değişkenleri gönderme şekli. Biz form elemanı olarak gönderdiğimiz için 2. seçeneği seçiyoruz.

4. Apiye gönderilecek değişkenler.

5. Header status kodu.

6. Apiye bilgiler gönderildikten sonra apinin bize vermiş olduğu cevap, output.

 

5- Rest Api ile Http PUT Methodu Kullanımı

Http put methodu get ve post methoduna göre biraz farklı çalışır. normalde istemci tarafından bize bir json veri gelir bizde bu json veriyi alıp diziye çevirmemiz gerekir. Json veriyi aşağıdaki şekilde alabiliriz.

yukarıdaki kod ekrana json bir çıktı üretecektir. Şimdi aldığımız json veriyi json_decode fonksiyonu ile diziye çevirelim. json_decode fonksiyonu ile ister bir objeye istersekte arraye çevirebiliriz.

örneğin:

istediğiniz yöntemi kullanabilirsiniz. Ben dersi analtırken object üzerinden anlatacağım.

Put methodu kullanırken nasıl veri alabileceğimizi ve nasıl çevireceğimizi  öğrendiğimize göre artık üye bilgilerini güncelleme işlemi yapabiliriz.

üye güncelleme işlemini de bitirdik arkadaşlar. Postman aracılığı ile test edecek olursak:

Öncelikle postmandaki raw kısmından raw data olarak json göndereceğiz. Sizde aşağıdaki görseldeki şekilde veri gönderirseniz çalışacaktır.

6- Rest Api İle Http Delete Methodu

Şimdi silme işlemi yapacağımız için httpy ait  delete methodunu kullanacağız. Sileceğimiz üyeye ait user_id değerini alıyoruz ve veritabanımızda o id ye ait bir üye varsa siliyoruz.

Delete işleminde de get kulanabiliriz. örneğin: http://localhost/mobilhanem/users/5 şeklinde link girdiğimizde postmana 5 numaralı id ye sahip üye silinecektir.

Şimdi son olarak üye bilgilerini listeleyip rest apimizi tamamlayalım.

7- Rest Api İle Http Get Methodu

Üye sil işlemindeki gibi bir user_id değeri gönderip geriye cevap olarak  üyeye ait bilgileri listeleyelim.

Ve böylelikle başlangıç seviyesinde rest apiyi  bitirmiş olduk.  Rest api kodlarının tamamına aşağıdaki linkten ulaşabilirsiniz.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

 

 

Vehbi Akdoğan

Erzurum Atatürk Üniversitesi Bilgisayar Mühendisliği Mezunu
Web & Android Developer
#erzurumspor

15 Yorum

  • Merhabalar yazı için teşekkürler,şu noktayı tam olarak anlamadım. Postman kullanarak post,put ve ya delete olarak işlemimizi gönderebiliyoruz fakat bunu kod kısmında nasıl yapacağız. Request method olarak bunu nasıl ayarlayacağız. http://localhost/mobilhanem/users/5 çalıştırdığımızı düşünelim : ben bu url i yazdığımda 5 numaralı user silinecek mi yoksa 5 numaralı id ye sahip üyenin bilgilerimi gelecek nereden bileceğim. Get mi yoksa delete istek yaptığını nasıl anlayacağım ?

      • Merhaba Vehbi Bey.
        Ben Postman ile işlem yapmanın ne işe yaradığını anlayamadım. Yani web sitesi yaptığımız müşteri üye ekleme ve üye silme işlemlerini bu programlamı yapacak. Eğer öyleyse bu saçma değilmi. Değilse bu postman kullanmanın anlamı nedir. Müşteri bununla uğraşmaz zaten. Bu programcı işi. Ama neye yaradığını anlayamadım. Beni aydınlatırsanız sevinirim.

        • Bunun programcı işi olduğunu anladıysanız, kendi testlerinizde postman kullanmanız gerektiğini anlamış olmalısınız. Bakın yazıda bunu postman aracılığı ile test edelim yazıyor. Postman kendi işlerinizi test ederken kullanabilirsiniz.

  • ben url yi yazıyorum normal php de değerleri parametrik olarak gönderemiyorum htaccess de yanlış birşeymi yaptım acaba?

    • htaccess kodunu bu şekilde değiştirebilirsiniz :

  • merhaba, PHP konusunda yeniyim. elektronik modüller ile kendi sitemden bilgi alabilmek ve oraya bilgi yazabilmek istiyorum. sonrasında ise web sitemde bu dataları gösterebilmek istiyorum.
    bunu php dosyasıyla hazırladığım saat tarih bilgilerini almak için kullanmaya çalıştım olmadı. timezonedb gibi yerlerden api ile alabiliyorum diye api haline getirebilirmiyim dedim. verdiğiniz dosyaları indirdim postman ile de verdiğiniz resim gibi yapmaya çalıştım. zaten db.php dede aunı tip hata veriyor.
    kullandığım db.php aşağıdadır. ve dosyaları kendi websiteme yolladım restapi dizininde api dizini içerisinde duruyor. xp kullandığımdan localhost yapamıyorum.
    db.php:
    getMessage();
    }

    ?>
    internet sayfasından baksamda postman ile bilgi göndersemde aynı tip hata veriyor. BAzı sitelerkullanıcıya apikey veriyor ve girişini sağlıyor. biz kendimiz buradan bakacağız desek de başkalarının bu apiye kontrollü olarak yada sadece bilgi almak için bağlanması da gerekebilecektir.
    Bu hatayı nasıl düzeltebilirim ve client olarak get sorgulamasını nasıl yapabilirim.
    web üzerinden direkt erişebildiğim php dosyam örnektir.
    çeşitli zaman sistemleri mevcut sadece örnek olarak sayfaya web üzerinden bağlandığımda sorun olmuyor tüm işlevler geliyor. fakat get ile modül üzerinden timezondb api si gibi çağırmak istiyorum.
    <?php
    echo '
    Request has been sent. Please wait for my reply!
    ‘;
    echo ‘
    hello php color
    ‘. “” ;
    echo date(“Y/m/d”) . “”;
    echo date(“Y.m.d”) . “”;
    echo date(“Y-m-d”) . “”;
    echo “gun adi : ” .date(“l”) . “”;
    echo date(“h:i:sa”) . “”;
    $d1=strtotime(“July 04”);
    $d2=ceil(($d1-time())/60/60/24) ;// 4 temmuza ne kadar var hesap yapar değer – ise geçmiştir
    echo “There are ” . $d2 .” days until 4th of July.” . “”; // burada yazdırılır. if cümlesiyle gelecek yada geçmiş denir.
    date_default_timezone_set(“Turkey/Ankara”) . “”; // timezone işaretlenir.
    echo “12 saatlik am pm zaman: ” . date(“h:i:sa”) . “”; // 12 saat üzerinden am pm olarak yazar.
    echo “24 saatlik saat :” . date(“H”) . “”; // 24 saat üzerinden saat olarak yazar.
    echo ” dakika : ” . date(“i”) . “”; // 12 saat üzerinden am pm olarak yazar.
    echo “saniye: ” . date(“s”) . “”; // 12 saat üzerinden am pm olarak yazar.
    echo “24 saatlik saat ve dakika ” .date(“G:i”). “”; // 24 saatlik saat ve dakika
    echo “GMT saat farki : ” .date(“P”). “”; // GMT farkı

    ?>
    sizlerde bu sayfaya web üzerinden erişebilirsiniz şifre sormuyor.
    http://www.mikrobotik.com/php_date.php
    umarım ne istediğimi anlatabilmişimdir.

  • Merhabalar benim aklıma şu takıldı açıkçası her işlem için farklı kanalardan veri aldık ya (POST, GET, PUT gibi) Bunun yerine hepsini post ile alıp meselea get hali islem=üye-sil&üye-id=1 veya islem=üye-guncelle&uye-id=1&uye-ad=deneme gibi yapmamamızın sebebi nedir yani Herşeyi Post olarak alıp ana bir değişken ile işlemi takip edip diğer değişkenlerlede parametreleri almak gibi.

  • iyi günler hocam ben bir rest api yazmaya çalışıyorum, veri çekerken tablonun sadece 1 satırını çekebiliyorum. bütün tabloyu nasıl çekebilirim

    • sql sorgunuzda tüm dataları alıp json olarak tamponlayabilirsiniz.

      Örneğin:
      select * from uyeler where id=1; // bu sorgu tek bir satır getirir.

      select * from uyeler; // bu sorgu tüm üyeleri getirir. bunu kullanarak mysql_fetch_array() yada pdo kullanıyosanız fetchAll() methodu ile tüm datayı alabilirsiniz.

  • Merhaba,
    Bir kitap sitesi yapıyorum ve Veritabanı bağlantısını rest apiyle yapmadım ama asp.net ile mobil cihazların kullanacağı REST API yazmak istiyorum nasıl yapabilirim yardımcı olur musunuz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?