RESTful API Nedir? PHP dilinde RESTful API Nasıl Kullanılır?

Mustafa Oğuz Baran
4 min readMar 29, 2023

REST NEDİR?

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.

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.

Sonuç;

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ç;

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

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.

<?php echo “Bug’sız günler dilerim!” ?>

--

--