REST NEDİR?

İstekten yanıta: İstemci — HTTP isteği gönderir; API — İsteği değerlendirir ve işlemi yürütür; Yanıt — Durum kodu ve veri geri döner

Görsel not: İstekten yanıta

REST, HTTP ile CLİENT — SERVER iletişimi yapılabilen bir mimaridir. CLİENT web tarayıcı da olabilir.

REST’te değişken URL ile SERVER iletişimi kurulur. Örnek olarak;

http://mustafaoguzbaran.com/api/getMakaleler/1

Burada, http://mustafaoguzbaran.com adresindeki ID’si 1 olan içerik çağırılır.

RESTful API Nedir?

RESTful, isminde de REST kelimesinin geçmesiyle anlaşılabileceği üzere REST mimarisini kullanır. Veri, CLİENT — SERVER arasındaki iletişimde kullanılır ve bu işlem daha az yükle yapılır. Ayrıca RESTful API, XML ve JSON’ı destekler.

Press enter or click to view image in full size

CLİENT, SERVER hakkında bir şey bilmez; SERVER, CLİENT hakkında bir şey bilmez. İşte bu noktada RESTful api devreye giriyor.

RESTful apileri PlayStation mantığına benzetebiliriz. Bu mantıktan yola çıkarak PS’deki kol ile PS cihazı arasındaki bağlantı api olsun. FPS oyunu oynuyor olalım ve PS kolu ile PS cihazına ateş et isteğinde bulunalım PS cihazı ise kola bir response dönerek kolu titretir. (durum transferi)

WordPress bir blogundaki içerikler RESTful api kullanılarak Android cihaza taşınabilir böylece WordPress blogunun bir android uygulaması olmuş olur.

PHP ile RESTful API İşlemleri

API ile Veri Tabanından Veri Çekme

Veri tabanındaki verileri çekmek için fonksiyon oluşturalım Posts Class’ı;

<?php
public function fetchPostAllData()
    {
        $fetch = $this->conn->prepare("SELECT * FROM posts ORDER BY post_id DESC");
        $fetch->execute();
        return $fetch->fetchAll(\PDO::FETCH_ASSOC);

    }
?>

api.php sayfası;

<?php

use Mobar\Models\Posts;

$data = new Posts();
$token = "06032023"; //token tanımlıyorum.
if($_GET['token'] == $token) {
    $returnArray = array();
    $returnArray['type'] = "Success";
    $returnArray['count'] = count($data->fetchPostAllData());
    $returnArray['data'] = $data->fetchPostAllData();
    $sonVeri = json_encode($returnArray, 1); // 1 parametresi ile veriyi dizi türünde aktardım
    echo($sonVeri);
}else{
    $returnArray = array();
    $returnArray['type'] = "Error";
    $sonVeri = json_encode($returnArray, 1);
    echo($sonVeri);
}
?>

Yukarıda verilen örnekte get ile alınan token değeri 06032023 ise dataları Success ile gösteriyor değilse Error dönüyor.

Get Mustafa Oğuz BARAN’s stories in your inbox

Sonuç;

Press enter or click to view image in full size

API ile Veri Tabanına Veri Yollama

Öncelikle oluşturduğum api’ım için posts sınıfımın içerisine veritabanından verileri çekmek için bir fonksiyon oluşturdum ve fonksiyonuma belirli parametreler atadım.

posts Class’ı;

public function postInstertApi($postTitle, $postDesc, $postImg, $postCategory, $postContent){
        $postApi = $this->conn->prepare("INSERT INTO posts SET 
                post_title = :post_title,
                post_desc = :post_desc,
                post_img = :post_img,
                post_category = :post_category,
                post_content = :post_content");
        $postApi->bindParam(':post_title', $postTitle);
        $postApi->bindParam(':post_desc', $postDesc);
        $postApi->bindParam(':post_img', $postImg);
        $postApi->bindParam(':post_category', $postCategory);
        $postApi->bindParam(':post_content', $postContent);
        $postApi->execute();
    }

Sonrasında ise apiPost.php sayfası oluşturdum.

<?php

use Mobar\Models\Posts;

$apiInsert = new Posts();
$data = json_decode(file_get_contents('php://input'), true); //Gelen JSON değerlerini yakalıyoruz.
if($_SERVER['HTTP_USER_TOKEN'] == "06032023") { //Header'daki token 06032023'e eşitse verileri post ediyor.
    $postTitle = $data['post_title'];
    $postDesc = $data['post_desc'];
    $postImg = $data['post_img'];
    $postCategory = $data['post_category'];
    $postContent = $data['post_content'];
    $returnArray = array();
    $returnArray['type'] = "Success";
    $returnArray['data'] = $data;
    $returnArray = json_encode($returnArray);
    echo $returnArray;
    $apiInsert->postInstertApi($postTitle, $postDesc, $postImg, $postCategory, $postContent);
}else{
    $returnArray['type'] = "Error";
    $returnArray = json_encode($returnArray);
    echo $returnArray;
}

?>

Sonuç;

Press enter or click to view image in full size

Ayrıca Header’a token’ı User-Token anahtarını girip value değerini de 06032023 şeklinde ayarladım. Şu şekilde ekledim;

Press enter or click to view image in full size

Peki Bağımsız Yerden Veri Nasıl Ekleniyor?

Öncelikle burada yardımımıza POSTMAN yetişiyor. Sağ taraftaki Code Snippets alanındaki kodumuz cURL kodudur. Ben PHP ile çalıştığım için PHP — cURL seçeneğini seçtim.

testVeriGonder.php sayfası;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>

    <title>API</title>
</head>
<body>
<form method="POST" action="<?php $_SERVER['PHP_SELF'] ?>">
  <div class="mb-3">
    <label  class="form-label">Post Title</label>
    <input type="text" class="form-control" name="post_title">
  </div>
  <div class="mb-3">
    <label  class="form-label">Post Desc</label>
    <input type="text" class="form-control" name="post_desc">
  </div>
  <div class="mb-3">
    <label  class="form-label">Post img</label>
    <input type="text" class="form-control" name="post_img">
  </div>
  <div class="mb-3">
    <label  class="form-label">Post Content</label>
    <input type="text" class="form-control" name="post_content">
  </div>
  <button type="submit" name="insert" class="btn btn-primary">Submit</button>
</form>  
    
</body>
</html>
<?php
if(isset($_POST['insert'])){ //insert butonuna değer atanmışsa aşağıdaki işlemleri yap
$arrayReturn = array(); //içini doldurmak için boş bir array açtım.
$arrayReturn['post_title'] = $_POST['post_title']; //arrayimin indislerini POST edilen name değerleriyle doldurdum.
$arrayReturn['post_desc'] = $_POST['post_desc'];
$arrayReturn['post_img'] = $_POST['post_img'];
$arrayReturn['post_content'] = $_POST['post_content'];
$sonVeri = json_encode($arrayReturn); //Verilerimi JSON formatına çevirdim.
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'http://localhost:8888/PHP-myBlog/apiPost',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>$sonVeri, //JSON formatına çevirdiğim verileri buraya yerleştirdim.
  CURLOPT_HTTPHEADER => array(
    'User-Token: 06032023',
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
}
?>

Böylece harici bir sayfadan RESTful API kullanarak verilerimizi aktarmış olduk. Umarım mantığı anlatabilmişimdir. :) Hepinize çok cici günler diliyorum.