Web geliştirme serüvenimizde bugüne kadar formları işledik, veritabanlarına bağlandık ve kullanıcı oturumlarını nasıl güvenli bir şekilde yöneteceğimizi öğrendik. Ancak modern web dünyasında uygulamalar kendi içlerinde kapalı bir kutu olarak yaşayamazlar. Bir e-ticaret sitesi kurduğunuzda kredi kartı işlemlerini yapmak için bir ödeme geçidiyle haberleşmeniz, adresleri göstermek için Google Haritalar’a bağlanmanız veya bir mobil uygulamaya veri göndermeniz gerekir.
İşte farklı sistemlerin ve uygulamaların birbiriyle sorunsuzca haberleşmesini sağlayan yapıya API (Application Programming Interface – Uygulama Programlama Arayüzü), bu iletişimin sağlandığı evrensel veri diline ise JSON adı verilir. Bu rehberimizde, PHP ile JSON verilerini nasıl işleyeceğinizi, dışarıdaki bir API’den nasıl veri çekeceğinizi ve kendi PHP uygulamanızı nasıl basit bir API’ye dönüştüreceğinizi örneklerle, adım adım öğreneceğiz.
JSON Nedir ve Neden Önemlidir?
Açılımı “JavaScript Object Notation” olan JSON, verileri depolamak ve farklı platformlar arasında taşımak için kullanılan, insanlar tarafından okunması ve makineler tarafından ayrıştırılması son derece kolay olan hafif bir metin formatıdır.
Geçmişte sistemler arası veri transferi için genellikle XML yapısı kullanılırdı (XML’in ağaç yapısını ve etiketlerini önceki derslerimizde incelemiştik). Ancak JSON, XML’e kıyasla çok daha az karakter içerdiği, daha hafif olduğu ve doğrudan diziler (arrays) ile nesnelere (objects) dönüştürülebildiği için günümüzde modern REST API’lerin standart veri formatı haline gelmiştir.
PHP’nin gelişim tarihine baktığımızda, dile yerleşik (native) JSON desteğinin ilk olarak 2006 yılında PHP 5.2 sürümüyle eklendiğini görürüz. O günden beri PHP, JSON verileriyle çalışmak için mükemmel bir uyum sunmaktadır.
Bir JSON verisi tıpkı PHP’deki ilişkisel dizilere (associative arrays) benzer. Örnek bir JSON metni şöyledir:
{
"kullanici_adi": "ahmet123",
"yas": 28,
"aktif_mi": true,
"yetenekler": ["PHP", "MySQL", "API"]
}
PHP’de JSON Fonksiyonları
PHP, JSON verilerini işlemek için son derece basit ama güçlü fonksiyonlara sahiptir. Gelin bu fonksiyonları pratik örneklerle inceleyelim.
1. PHP Verilerini JSON’a Çevirmek: json_encode()
Elinizdeki bir PHP dizisini (array) veya nesnesini (object), API üzerinden başka bir sisteme göndermek üzere JSON metnine dönüştürmek için json_encode() fonksiyonunu kullanırız.
<?php
// PHP'de klasik bir ilişkisel dizi oluşturalım
$ogrenci = array(
"isim" => "Zeynep",
"bolum" => "Bilgisayar Mühendisliği",
"mezun_mu" => false,
"notlar" => array(85, 90, 78)
);
// Diziyi JSON formatına dönüştürelim
$json_metni = json_encode($ogrenci);
// Ekrana yazdıralım
echo $json_metni;
?>
Bu kodun çıktısı, yukarıda tanımladığımız JSON yapısının tam olarak aynısı olan tek satırlık bir metin olacaktır.
2. JSON Verilerini PHP’ye Çevirmek: json_decode()
Başka bir web sitesinden veya mobil uygulamadan size JSON formatında bir veri geldiğinde, PHP’nin bu veriyi anlayabilmesi ve üzerinde işlem yapabilmesi için onu PHP dizilerine veya nesnelerine geri çevirmeniz gerekir. Bunun için json_decode() fonksiyonu kullanılır.
<?php
// Dışarıdan geldiğini varsaydığımız JSON metni
$gelen_json = '{"urun":"Dizüstü Bilgisayar", "fiyat":15000, "stokta_var":true}';
// JSON'ı PHP nesnesine (Object) çevirme (Varsayılan kullanım)
$urun_nesnesi = json_decode($gelen_json);
echo "Ürün: " . $urun_nesnesi->urun . "<br>";
// JSON'ı PHP Dizisine (Array) çevirme (İkinci parametre 'true' yapılır)
$urun_dizisi = json_decode($gelen_json, true);
echo "Fiyat: " . $urun_dizisi['fiyat'] . " TL";
?>
İpucu: Eğer verileri diziler üzerinden anahtarları (key) belirterek yönetmeyi seviyorsanız, json_decode() fonksiyonuna ikinci parametre olarak mutlaka true değerini vermeyi unutmayın.
3. Modern PHP: json_validate() İle Güvenlik Kontrolü
Kullanıcılardan veya dış kaynaklardan gelen verilere asla %100 güvenmememiz gerektiğini güvenlik konulu makalemizde öğrenmiştik. Gelen bir metnin gerçekten kurallara uygun, geçerli ve bozulmamış bir JSON olup olmadığını anlamak kritik bir güvenlik adımıdır.
Eskiden geliştiriciler metni json_decode() ile çevirmeye çalışıp hata verip vermediğine bakarlardı. Ancak Kasım 2023’te yayınlanan PHP 8.3 sürümüyle birlikte, bu işlem için özel olarak tasarlanmış çok daha performanslı olan json_validate() fonksiyonu dile eklendi.
<?php
$metin = '{"isim": "Ahmet", "yas": 25'; // Dikkat: Süslü parantez kapatılmamış, hatalı JSON!
// PHP 8.3 ve sonrasında geçerlilik kontrolü
if (json_validate($metin)) {
echo "Bu geçerli bir JSON formatıdır. İşleme devam edilebilir.";
$veri = json_decode($metin, true);
} else {
echo "Hata: Gelen veri geçerli bir JSON değil!";
}
?>
API Nedir? Gerçek Hayattan Bir Analoji
Bir API’nin (REST API) ne olduğunu anlamak için restoran örneğimize geri dönelim. Bir restorana gittiğinizde mutfağa (Veritabanı/Sunucu) girip kendi yemeğinizi alamazsınız. Masada (İstemci/Web Sitesi) oturursunuz ve elinizdeki menüden bir seçim yaparsınız. Seçiminizi mutfağa ileten, mutfağın hazırladığı yemeği de alıp size getiren kişi Garsondur.
İşte web dünyasında API’ler dijital garsonlardır. Sizin web siteniz, başka bir sitenin veya hizmetin mutfağına doğrudan erişemez. Bunun yerine, o hizmetin API’sine JSON formatında bir “sipariş” (istek) gönderirsiniz. API isteğinizi alır, mutfakta işler ve size JSON formatında bir “yemek” (cevap) getirir.
PHP ile Dışarıdan Bir API’den Veri Çekmek
Şimdi gerçek bir örnek yapalım. Dünyadaki rastgele kullanıcı bilgilerini sağlayan ücretsiz bir test API’sinden (örneğin jsonplaceholder veya randomuser.me gibi bir servisten) veri çektiğimizi varsayalım.
Bir web adresinin içeriğini PHP’de okumanın en pratik yollarından biri, daha önce dosya okuma işlemlerinde de kullandığımız file_get_contents() fonksiyonudur.
<?php
// 1. API'nin adresini (URL) belirliyoruz
$api_url = "https://jsonplaceholder.typicode.com/users/1";
// 2. URL'deki JSON verisini metin olarak çekiyoruz
$json_cevap = file_get_contents($api_url);
// 3. Gelen JSON metnini PHP dizisine çeviriyoruz
$kullanici = json_decode($json_cevap, true);
// 4. Veriyi sitemizde anlamlı bir şekilde ekrana basıyoruz
echo "<h2>Kullanıcı Profili</h2>";
echo "İsim: " . $kullanici['name'] . "<br>";
echo "E-posta: " . $kullanici['email'] . "<br>";
echo "Şehir: " . $kullanici['address']['city'] . "<br>";
?>
Yukarıdaki kod, başka bir sunucudan veriyi alır, onu PHP’nin anlayacağı formata çevirir ve sanki kendi veritabanımızdan çekmişiz gibi sitemizde gösterir.
Kendi PHP API’mizi (Endpoint) Oluşturmak
Veri tüketmeyi öğrendik. Peki ya mobil uygulamamıza veya başka bir iş ortağımıza kendi veritabanımızdaki bilgileri bir API olarak sunmak istersek ne yapmalıyız?
Bunun için PHP dosyamızın, sonuçları standart bir HTML web sayfası olarak değil, saf bir JSON verisi olarak “kusması” (çıktı vermesi) gerekir. Tarayıcıların ve karşı sistemin bu durumu anlayabilmesi için sayfamızın en başına header() fonksiyonu ile “İçerik Türü”nün (Content-Type) JSON olduğunu bildirmeliyiz.
Örnek bir API uç noktası (endpoint) oluşturalım (api.php):
<?php
// 1. Karşı sisteme bu sayfanın bir JSON API olduğunu söylüyoruz
header('Content-Type: application/json; charset=utf-8');
// 2. Veritabanından verilerimizi çektiğimizi varsayalım
$urunler = array(
array("id" => 1, "isim" => "Kablosuz Fare", "fiyat" => 450),
array("id" => 2, "isim" => "Mekanik Klavye", "fiyat" => 1200)
);
// 3. Eğer kullanıcıdan gelen özel bir hata durumu varsa onu da yakalayabiliriz
if(empty($urunler)) {
// HTTP hata kodu gönderme (Örn: 404 Bulunamadı)
http_response_code(404);
echo json_encode(array("mesaj" => "Ürün bulunamadı."));
exit;
}
// 4. PHP dizimizi JSON formatına çevirip dış dünyaya sunuyoruz
echo json_encode($urunler);
?>
Artık herhangi bir uygulama sizin api.php adresinize bağlandığında, temiz ve standartlara uygun bir JSON verisiyle karşılaşacak ve sitenizin mutfağından veri “sipariş” edebilecektir.
Modern PHP’de API Çerçeveleri (Frameworks)
Sıfırdan API yazmak öğretici olsa da, 2026 yılının modern web geliştirme standartlarında, karmaşık ve yüzlerce uç noktaya sahip bir RESTful API inşa ederken genellikle PHP Çerçeveleri (Frameworks) kullanılır.
Eğer devasa bir e-ticaret altyapısı, detaylı veritabanı ilişkileri ve token tabanlı güvenlik (OAuth vb.) gerektiren gelişmiş bir REST API inşa ediyorsanız, zengin ekosistemi ve hazır API mimarileriyle pazar lideri olan Laravel en doğru tercihtir.
Buna karşın, amacınız sadece hızlı, sade ve çok az kaynak tüketen küçük çaplı web servisleri oluşturmaksa, Mikro-Çerçeveler (Micro-frameworks) devreye girer. Örneğin:
- Slim Framework: Basit web uygulamaları ve güçlü RESTful API’ler geliştirmek için özel olarak tasarlanmıştır. HTTP istek/yanıtlarını mükemmel yönetir ve şifreli çerezler, esnek yönlendirme (routing) gibi zengin olanaklar sunar.
- FlightPHP: Minimalist yapısıyla öğrenmesi inanılmaz kolaydır. Kurulumu çok hızlıdır ve karmaşıklığa yer bırakmadan anında bir REST API’yi canlıya almanızı sağlar.
Sonuç
JSON ve API kullanımı, günümüzde bir PHP geliştiricisi ile sadece web tasarımı yapan biri arasındaki en kalın çizgiyi çizen konulardan biridir. json_encode() ile verilerinizi paketlemeyi, json_decode() ile bu paketleri açmayı ve PHP 8.3’ün getirdiği json_validate() gibi modern özelliklerle bu süreci güvene almayı öğrendiniz. Sitenizi dış dünyaya açan API’lerin ve mikro-servis mimarilerinin kapısından içeri adım attınız. Artık mobil cihazlarla konuşan arka uç (backend) sistemleri kurmaya hazırsınız. İyi kodlamalar!






Bir Yorum
Thanks for one’s marvelous posting! I certainly enjoyed reading
it, you are a great author.I will be sure to bookmark
your blog and will eventually come back down the
road. I want to encourage one to continue your
great posts, have a nice afternoon!