PHP ile API Oluşturma

PHP İLE API OLUŞTURMA

Merhaba arkadaşlar,

Bu örneğimizde kendi oluşturacağımız api ile veri tabanı ile iletişim kurarak ekleme, düzenleme, listeleme ve silme işlemlerini gerçekleştireceğiz.

Yapacağımız Örneği Test Etmek İçin Tıklayınız

İlk olarak “ArticleAPI” adında bir veri tabanı oluşturalım. Ardından bu veritabanımıza “article” adında bir tablo oluşturalım. Bu tabloda

  • id : Yazının Uniq numarası
  • title: Yazının başlığı
  • slag: Yazının SEO uyumlu başlıkları
  • text: Yazının metin kısmı

Veritabanımızı oluşturduk. Artık kod kısmımıza geçebiliriz. İlk olarak “apiOrnegi” adında bir klasör oluşturalım. Bu klasör de 4 temel dosyamız bulunacaktır. Bunlar

  • .htaccess
  • class.Article.php
  • database.php
  • index.php

Veritabanı Bağlantısı (database.php)

İlk olarak veritabanı bağlantımızı yapalım. Bunun için database dosyamızı açalım ve Database adında bir class oluşturalım.

<?php 
Class Database
{
 //Kodlar buraya...
}
?>

Veritabanı bağlantımız da kullanacağımız kullanıcı adı, şifre, veritabanı adres ve veritabanı adı parametreleri için birer değişken oluşturalım.

<?php 
Class Database
{
    private $user ;
    private $host;
    private $pass ;
    private $db;
}
?>

Bu değişkenlerimiz sabit bir değeri tutacakları için construct içerisinde bu değişkenlere sabit değerler atayalım.

<?php 
Class Database
{
    private $user ;
    private $host;
    private $pass ;
    private $db;

    public function __construct()
    {
        $this->user = "root";
        $this->host = "localhost";
        $this->pass = "";
        $this->db = "ArticleAPI";
    }
}
?>

Sabit değerleri atadığımıza göre artık bağlantı cümlemizi oluşturabiliriz. Bağlantı cümlesi için connect isimli bir metot oluşturalım. Ardından içerisine bağlantı cümlemizi ekleyelim. Oluşturduğumuz bağlantı değişkenini geri döndürelim. return $conn;

Database.php Tüm Kodlar

<?php 
Class Database
{
    private $user ;
    private $host;
    private $pass ;
    private $db;

    public function __construct()
    {
        $this->user = "root";
        $this->host = "localhost";
        $this->pass = "";
        $this->db = "ArticleAPI";
    }
    public function connect()
    {

        $conn = new PDO("mysql:host=".$this->host.";dbname=".$this->db.";", $this->user, $this->pass);
        return $conn;
    }
}
?>

Bağlantı cümlesi de eklendiğine göre veritabanı bağlantımız tamamlanmıştır.


Veritabanı İşlemleri (class.Article.php)

Veritabanı işlemlerimizi gerçekleştireceğimiz “Article” isminde bir sınıf oluşturalım. Bu sınıfımız içerisinde

  •  __construct(): Veritabanı nesnemizi tutacağımız yapıcı metot.
  • getAll() : Tüm listeyi getirecek olan metot.
  • getId($id = ”): Id ye göre veri getirecek olan metot.
  • getSlag($slag = ”): SEO url tipinde veri getirecek metot.
  • setArticle($title = ”, $text = ”): Yazı ekleme işleminde kullanacağımız metot.
  • editArticle($id = ”, $title = ”, $text = ”): Yazı düzenleme işleminde kullanacağımız metot.
  • deleteArticle($id = ”): Yazı silmek için kullanacağımız metot.
  • permalink($str, $options = array()): Başlıklarımızı SEO uyumlu hale getirecek metot.

Metotları belirlediğimize göre ilk sınıfımızı oluşturmaya başlayalım. İlk olarak sınıfımızın bulunduğu dosyaya veritabanı dosyamız olan “database.php” dahil edelim. Ardından kurucu metot da bu sınıfımızdan bir adet nesne oluşturalım.

<?php
require_once 'database.php';
class Article
{
	private $conn;
	public function __construct() {
		$conn= new Database();
		$this->conn = $conn->connect();
	}
}

Artık veritabanı sınıfımızdan türeyen “$conn” adında bir nesnemiz var. Bu nesnemizi kullanarak veritabanı işlemlerimizi yapabiliriz.

Tümünü Listeleme Metodu

Veri tabanına sorgu göndererek bütün yazıları aldığımız metot. Veri tabanından gelen verileri JSON tipinde geri gönderiyoruz.

function getAll()
	{
		
		$statement = $this->conn->prepare("SELECT * FROM article");
		$statement->execute();
		$results = $statement->fetchAll(PDO::FETCH_ASSOC);
		$json = json_encode($results);
		return $json;
	}

Tek Yazı Gösterme Metodu (ID)

Kullanıcıdan bir id değeri alıyoruz. Bu id değeri sayısal bir değer değilse veya sistemde kayıtlı değilse Not Found hatasını geri döndürüyoruz.

ID değeri sayısal bir değerse ve bu değere eşit bir verinin olup olmadığını kontrol ediyoruz. Eğer böyle bir veri varsa veriyi JSON tipinde geri döndürüyoruz.

function getId($id = '')
	{
		$results = [
			"error"	=> "Not Found"
		];
		if (is_numeric($id)) {
			
			
			$statement = $this->conn->prepare("SELECT * FROM article WHERE id=:id");
			$statement->execute(array(
				"id"		=> $id
			));
			$count = $statement->rowCount();
			if ($count > 0)
				$results = $statement->fetchAll(PDO::FETCH_ASSOC);
		}


		$json = json_encode($results);
		return $json;
	}

Tek Yazı Gösterme Metodu (SLAG – SEO Tip)

Kullanıcıdan bir slag (SEO tipi) değeri alıyoruz. Bu değerin karakter sayısı 1 den küçükse veya sistemde kayıtlı değilse Not Found hatasını geri döndürüyoruz.

Bu değere eşit bir verinin olup olmadığını kontrol ediyoruz. Eğer böyle bir veri varsa veriyi JSON tipinde geri döndürüyoruz.

function getSlag($slag = '')
	{
		$results = [
			"error"	=> "Not Found"
		];
		if (strlen($slag) > 0) {
			
			
			$statement = $this->conn->prepare("SELECT * FROM article WHERE slag=:slag");
			$statement->execute(array(
				"slag"		=> $slag
			));
			$count = $statement->rowCount();
			if ($count > 0)
				$results = $statement->fetchAll(PDO::FETCH_ASSOC);
		}
		$json = json_encode($results);
		return $json;
	}

Yazı Ekleme Metodu

Veri tabanına kayıt işlemini bu metot yardımı ile gerçekleştiriyoruz. Kullanıcıdan başlık ve metin değerlerini alıyoruz.

Başlık veya metin değerlerimizden herhangi birisi boşa eğer Missing Parameter şeklinde bir hata mesajı veriyoruz.

Başlık değerimizi permalink metoduna gönderiyoruz ve bize geri gelen slag değerini değişkene aktarıyoruz. Ardından veri tabanına kayıt ediyoruz.

Kayıt sırasında bir hata oluşursa Something went wrong. şeklinde bir uyarı mesajı döndürüyoruz.

Kayıt başarıyla tamamlanması durumunda Article Added şeklinde bir uyarı mesajı döndürüyoruz.

function setArticle($title = '', $text = '')
	{
		$results = [
			"error"	=> "Missing Parameter"
		];

		if (strlen($title) > 0 && strlen($text) > 0) {
			$title = htmlspecialchars($title);
			$text  = htmlspecialchars($text);
			$slag = $this->permalink($title);

			
			

			$sql = "INSERT INTO article (title, slag, text) VALUES (:title,:slag, :text)";
			$query = $this->conn->prepare($sql);
			$status = $query->execute(array(
				"title"	=> $title,
				"slag"	=> $slag,
				"text"	=> $text
			));
			if ($status == true)
				$results = [
					"success"	=> "Article Added"
				];
			else
				$status = [
					"error"	=> "Something went wrong."
				];
		}
		$json = json_encode($results);
		return $json;
	}

Yazı Düzenleme Metodu

Bu metot için kullanıcıdan 3 adet değer alıyoruz. Bu değerlerden herhangi birisi boş olarak gelmesi durumunda Missing Parameter şeklinde uyarı mesajında bulunuyoruz.

Bu değerlerden en önemlisi id değeridir. Id değeri ile sistemde değiştirilmek istenen yazının olup olmadığını kontrol ediyoruz.

Değiştirilmek istenen yazı bulunamazsa eğer kullanıcıya Not Found şeklinde uyarı mesajında bulunuyoruz.

Değiştirilmek istenen değer bulunursa eğer veritabanımızı yeni değerler ile güncelliyoruz ve kullanıcıya Article Edit şeklinde uyarı mesajında bulunuyoruz.

function editArticle($id = '', $title = '', $text = '')
	{
                $title = htmlspecialchars($title);
		$text  = htmlspecialchars($text) ;
		$results = [
			"error"	=> "Missing Parameter"
		];

		$editStatus = false;
		if (is_numeric($id)) {
			$statement = $this->conn->prepare("SELECT * FROM article WHERE id=:id");
			$statement->execute(array(
				"id"		=> $id
			));
			$count = $statement->rowCount();
			$editStatus = ($count > 0) ? true : false;
		}
		if ($editStatus == false) {
			$results = [
				"error"	=> "Not Found"
			];
		}
		if (strlen($title) > 0 && strlen($text) > 0 && $editStatus == true) {
			$title = htmlspecialchars($title);
			$text  = htmlspecialchars($text);
			$slag = $this->permalink($title);
			$sql = "UPDATE article  SET title=:title,slag=:slag, text=:text WHERE id =:id";
			$query = $this->conn->prepare($sql);
			$status = $query->execute(array(
				"title"	=> $title,
				"slag"	=> $slag,
				"text"	=> $text,
				"id"	=> $id
			));
			if ($status == true)
				$results = [
					"success"	=> "Article Edit"
				];
			else
				$results = [
					"error"	=> "Something went wrong."
				];
		}
		$json = json_encode($results);
		return $json;
	}

Değiştirilmek istenen değer bulunursa eğer veritabanımızı yeni değerler ile güncelliyoruz ve kullanıcıya Article Edit şeklinde uyarı mesajında bulunuyoruz.

Yazı Silme Metodu

Bu metodumuz da kullanıcan id değerini alıyoruz. Id değeri boş gelmesi durumunda kullanıcıya Missing Parameter şeklinde bir uyarı döndürüyoruz.

Id değerinin olması durumunda ilk olarak veri tabanında girilen id değerine uygun bir verinin olup olmadığını kontrol ediyoruz.

İstenilen kayıt yoksa kullanıcıya Not Found şeklinde uyarı mesajında bulunuyoruz.

İstenilen kayıt varsa kaydı siliyoruz ve kullanıcıya Article Deleted şeklinde uyarı mesajında bulunuyoruz.

function deleteArticle($id = '')
	{

		$results = [
			"error"	=> "Missing Parameter"
		];
		$deleteStatus = false;
		if (is_numeric($id)) {
			$statement = $this->conn->prepare("SELECT * FROM article WHERE id=:id");
			$statement->execute(array(
				"id"		=> $id
			));
			$count = $statement->rowCount();
			$deleteStatus = ($count > 0) ? true : false;
		}
		if ($deleteStatus == false) {
			$results = [
				"error"	=> "Not Found"
			];
		}
		if ($deleteStatus == true) {
			
			
			$sql = "DELETE FROM article WHERE id=:id";
			$delete = $this->conn->prepare($sql);
			$status = $delete->execute(array(
				"id"	=> $id
			));
			if ($status == true)
				$results = [
					"success"	=> "Article Deleted"
				];
			else
				$results = [
					"error"	=> "Something went wrong."
				];
		}

		$json = json_encode($results);
		return $json;
	}

İstenilen kayıt varsa kaydı siliyoruz ve kullanıcıya Article Deleted şeklinde uyarı mesajında bulunuyoruz.

Permalink Metodu

Bu fonksiyon ile kullanıcı dostu url’ler oluşturmak için türkçe metinlerinizi derleyebilirsiniz. 

Bu metot alıntıdır. => Php Sef Link Fonksiyonu

function permalink($str, $options = array())
{
$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
$defaults = array(
'delimiter' => '-',
'limit' => null,
'lowercase' => true,
'replacements' => array(),
'transliterate' => true
);
$options = array_merge($defaults, $options);
$char_map = array(
// Latin
'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C',
'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I',
'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O',
'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH',
'ß' => 'ss',
'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c',
'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o',
'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th',
'ÿ' => 'y',
// Latin symbols
'©' => '(c)',
// Greek
'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8',
'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P',
'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W',
'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I',
'Ϋ' => 'Y',
'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8',
'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p',
'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w',
'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's',
'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i',
// Turkish
'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G',
'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g',
// Russian
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh',
'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O',
'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu',
'Я' => 'Ya',
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh',
'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o',
'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu',
'я' => 'ya',
// Ukrainian
'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G',
'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g',
// Czech
'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U',
'Ž' => 'Z',
'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u',
'ž' => 'z',
// Polish
'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z',
'Ż' => 'Z',
'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z',
'ż' => 'z',
// Latvian
'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N',
'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z',
'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n',
'š' => 's', 'ū' => 'u', 'ž' => 'z'
);
$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
if ($options['transliterate']) {
$str = str_replace(array_keys($char_map), $char_map, $str);
}
$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
$str = trim($str, $options['delimiter']);
return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
}

Bu metot alıntıdır. => Php Sef Link Fonksiyonu

Son metodumuzu da ekledik. Artık bu fonksiyonları çağırarak apimizi çalıştırabiliriz.

Devamını okumak için lütfen diğer sayfaya geçiniz…

Yayımlayan

3 Replies to “PHP İLE API OLUŞTURMA

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir