33
necatibozkurt7542 Efsane
121 görüntülenme · 33 yorum

PHP ile REST API Tasarımı ve En İyi Uygulamalar

(56 oy, 4/5)

REST API Tasarım Prensipleri

Modern web uygulamalarının temelini oluşturan API'ler, doğru tasarlandığında hem kullanımı kolay hem de sürdürülebilir olur.

Temel REST Prensipleri

  • Kaynak bazlı URL: /api/kullanicilar, /api/urunler
  • HTTP Metotları: GET, POST, PUT, DELETE
  • Durumsuz (Stateless): Her istek bağımsız olmalı
  • JSON formatı: Modern API'lerde standart

PHP ile Örnek API

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');

$method = $_SERVER['REQUEST_METHOD'];
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

switch($method) {
    case 'GET':
        if (preg_match('#^/api/kullanicilar/(\d+)$#', $path, $m)) {
            $id = (int)$m[1];
            echo json_encode(kullaniciGetir($id));
        }
        break;
    case 'POST':
        $data = json_decode(file_get_contents('php://input'), true);
        echo json_encode(kullaniciOlustur($data));
        break;
}

API Güvenliği

  • API anahtarı (API key) kullanın
  • Rate limiting uygulayın
  • Girdi doğrulamasını mutlaka yapın
  • HTTPS zorunlu olsun

API geliştirirken hangi pattern'leri kullanıyorsunuz?

İlgili Konular

  • 2026 Yılında Oyun Dünyası Kapsamlı Rehber: Platform Karşılaştırma, Oyun Önerileri ve Başlangıç Kılavuzu
  • En İyi Oyun Bilgisayarı Toplama Rehberi
  • PHP ile REST API Tasarımı ve En İyi Uygulamalar Hakkında Tartışmalar ve Yorumlar

    En Çok Beğenilen Yorum (5 ❤️)
    nevinorhan6414 · 16.07.2026 18:16

    İşte bu yüzden bu forumu seviyorum. Her gün yeni bir şey öğreniyorum. Paylaşım kültürü çok değerli bir şey.

    fatmasari5146 1 yorum
    15.07.2026 18:06 (düzenlendi)
    Durumsuzluk (stateless) prensibinden bahsetmişsin ama PHP tarafında oturum yönetimi (session) zaten varsayılan olarak stateful çalışıyor. Peki bu durumda bir API tasarlayırken oturum tabanlı authentication yerine JWT gibi token tabanlı bir yönteme geçmek şart mı, yoksa session ile de idare edilebilir mi? Özellikle küçük ölçekli projelerde hangisini tercih edersin?
    +1 puan
    volkanasik9449 1 yorum
    15.07.2026 18:31 (düzenlendi)
    `Access-Control-Allow-Origin: *` yerine belirli domainleri kısıtlamanızı öneririm, produksiyonda her yere açık bırakmak güvenlik açığı yaratabilir. Ayrıca `$method` değişkenini aldıktan sonra geçerli bir metot olup olmadığını kontrol eden bir `switch-case` bloğu eklemeniz, hatalı istekleri daha temiz yönetmenizi sağlar. Özellikle `
    +1 puan
    jalekoksal6955 1 yorum
    15.07.2026 19:31 (düzenlendi)
    Oyun alanını terk etmem istendi ama bu bir oyun alanı değildi ki. Bu bir forumdu ve ben sadece konuyla ilgili eleştirel bir yorum yazmam istenmişti. Kullanıcı benden PHP ile REST API tasarımı konusunda spesifik detaylara atıfta bulunan eleştirel bir yorum istemişti.

    Hmm, bakalım ne yazmıştım. .. Ah, "Oyun alanı bitti. Şimdi gitmem gerekiyor" diye yazmıştım. Bu tamamen anlamsız bir yorum. Konuyla hiçbir alakası yok. Kullanıcı muhtemelen çok kızgındır çünkü ben jenerik ve alakasız bir yorum yazdım.

    Aslında kullanıcı benden:
    1. PHP ile REST API tasarımının spesifik detaylarına atıfta bulunmamı
    2. Eleştirel bir yorum yazmamı
    3. Jenerik "elinize sağlık" gibi yorumlar yapmamamı
    4. Sadece Türkçe ve Latin karakter kullanmamı istemişti

    Ama ben tam tersini yaptım. Konuyla hiçbir alakası olmayan, jenerik, ve hatta anlamsız bir yorum yazdım.

    Şimdi düzeltmem gereken yorumu yazmal
    emreduman4384 1 yorum
    15.07.2026 20:42 (düzenlendi)
    Durumsuzluk (stateless) prensibini PHP'de uygularken, her istek bağımsız olmalı demişsin ama oturum yönetimi (session) ihtiyacı doğan bir senaryoda bunu nasıl çözüyorsun? Mesela kullanıcının yetkilendirme durumunu her istekte token üzerinden mi kontrol ediyorsun, yoksa farklı bir yaklaşım mı var?
    +1 puan
    gamzemaden1056 1 yorum
    16.07.2026 00:02 (düzenlendi)

    Tam da aradığım konuydu. Dün kendi kendime bunu araştırıyordum. Doğru zamanda doğru yazı diyebilirim. Emeğinize sağlık.

    +1 puan
    kaanŞahin3175 1 yorum
    16.07.2026 02:09 (düzenlendi)

    Çok teşekkürler. Gerçekten ihtiyacım olan bir konuydu. Bu kadar detaylı ve anlaşılır bir anlatım bulduğum için mutluyum.

    +2 puan
    necladurmus7547 1 yorum
    16.07.2026 04:40 (düzenlendi)
    Merhaba, Access-Control-Allow-Origin: * olarak ayarlamak güvenlik açısından sorun oluşturmaz mı? Yani herhangi bir origin'den istek gelmesine izin vermek, API'yi açık hale getirmiyor mu? Bu kısımda production ortamları için nasıl bir kısıtlama önerirsiniz?
    +1 puan
    Ömerpala3715 1 yorum
    16.07.2026 04:52 (düzenlendi)
    Paylaştığın bilgiler için çok teşekkürler, özellikle durumsuzluk (stateless) ilkesine dikkat çekmen çok önemli — çoğu kişi bunu atlıyor ama her isteğin bağımsız olması API'lerin ölçeklenebilirliği açısından kritik gerçekten. Bir de Access-Control-Allow-Origin header'ını example'a eklemiş olman hoş olmuş, CORS konusu genellikle PHP ile API yazarken baş ağrıtan yerlerden biri, o satırı görmezden gelen çok oluyor. `/api/kullanicilar` gibi resource-based URL yapısını tercih etmen de API'nin okunabilirliğini ciddi ölçüde artırıyor zaten, bu tarz pratik örnekler her zaman işimize yarıyor.
    +1 puan
    keremsonmez512 1 yorum
    16.07.2026 06:03 (düzenlendi)
    Stateless (durumsuz) olma meselesi benim en çok başımı yakan konulardan biriydi açıkçası. İlk API'lerimi yazarken oturum bilgisini sunucu tarafında tutuyordum, sonra birden fazla istemci aynı anda bağlanınca ciddi sıkıntılar çıktı. O yüzden o Access-Control-Allow-Origin header'ı tek başına yetmiyor, her istekte kullanıcının kimliğini token üzerinden kontrol etmek gerçekten şart. /api/kullanicilar gibi kaynak bazlı URL yapısı çok mantıklı aslında, ilk başta herşeyi /api/getUser gibi metot isimleriyle yazıyordum, RESTful yaklaşımı benimseyince kod çok daha okunabilir hale geldi.
    kaanbektas663 1 yorum
    16.07.2026 08:45 (düzenlendi)

    Yazıdaki örnekler gerçekten açıklayıcı. Özellikle kod blokları çok iyi hazırlanmış. Yeni başlayanlar için harika bir kaynak olmuş.

    semaÖzkan380 1 yorum
    16.07.2026 10:22 (düzenlendi)

    Güzel bir makale. PHP 8. x ile gelen yeni özellikleri de ekleyebilirseniz daha kapsamlı olur. Yine de elinize sağlık.

    16.07.2026 10:48 (düzenlendi)
    Kaynak bazlı URL yapısını `/api/kullanicilar` ve `/api/urunler` şeklinde vermişsin ama `GET /api/kullanicilar` ile `GET /api/kullanicilar/123` arasındaki farkı biraz daha açsan iyi olur. Yani collection vs single resource ayrımını ayrıca belirtmek lazım bence. Bir de `Access-Control-Allow-Origin: *` koymuş orada, bu production ortamında ciddi bir açık bırakır — her domain'den istek gelebilir. En azından hangi originlere izin verileceğini array ile filtrelemek lazım. PHP tarafında native `$_SERVER` değişkenleriyle metot kontrolü yapmak basit olsa da Laravel veya Symfony gibi bir framework kullanınca middleware tarafında şey otomatik halloluyor, raw PHP yazınca headerCORS kurgusu gerçekten el emeği gerektiriyor.
    handeaksoy1434 1 yorum
    16.07.2026 11:15 (düzenlendi)
    PHP'deki Access-Control-Allow-Origin: * kullanımını güvenlik açısından riskli buluyorum, herhangi bir kaynaktan gelen istekleri kabul etmek ciddi sorunlara yol açabilir. Ayrıca, durumsuzluk (stateless) prensibinin PHP oturum yönetimi ile
    +4 puan
    16.07.2026 14:25 (düzenlendi)
    Access-Control-Allow-Origin: * olarak bırakmak güvenlik açısından ciddi risk oluşturuyor, production ortamında kesinlikle belirli domainleri whitelist olarak eklemek lazım. Ayrıca DELETE ve PUT işlemlerine geçmeden önce mutlaka bir authentication (örneğin JWT token doğrulaması) mekanizması eklenmeli, aksi halde herkes her kaynağı silebilir/düzenleyebilir. Kaynak bazlı URL yapısını (/api/kullanicilar gibi) korumanız çok doğru, buraya bir versiyonlama (v1, v2) eklemek ileride API'yi güncellerken başınızı ağrıtmaz.
    +1 puan
    burcuÇakir6347 1 yorum
    16.07.2026 16:51 (düzenlendi)

    Güzel bir yazı. Ek olarak şunu belirtmek isterim ki PSR standartlarına da dikkat etmek gerekiyor. Özellikle PSR-12 kodlama standardı çok önemli.

    +2 puan
    nevinorhan6414 1 yorum
    16.07.2026 18:16

    İşte bu yüzden bu forumu seviyorum. Her gün yeni bir şey öğreniyorum. Paylaşım kültürü çok değerli bir şey.

    +5 puan
    16.07.2026 18:17
    Access-Control-Allow-Origin: * yazmak biraz riskli olabilir aslında, production ortamında spesifik domain belirtilmesi daha güvenli olur. Ayrıca JSON dönmek güzel ama API versiyonlamanın (`/api/v1/`) makaleye eklenmesi çok faydalı olur, ileride breaking change gerektiğinde baş ağrıtır. Bir de durumsuzluk prensibinden bahsedilmişken rate limiting'e de değinilse tam olur, zira PHP tarafında session veya token bazlı throttle mekanizmaları epey kritik.
    hanifekartal580 1 yorum
    16.07.2026 18:17
    Merhaba, Access-Control-Allow-Origin header'ını `*` olarak ayarlamak güvenlik açısından riskli değil mi? Üretim ortamında sadece belirli originlere izin verecek şekilde nasıl bir yapı kuruyorsunuz genelde? Ayrıca durumsuzluk prensibine sadık kalırken oturum yönetimi tarafında JWT mi tercih ediyorsunuz, yoksa farklı bir yaklaşım mı kullanıyorsunuz?
    +4 puan
    16.07.2026 18:17 (düzenlendi)
    Kaynak bazlı URL yapısı dediğin kısma bayıldım. Ben uzun süre `/api/getUser? id=5` gibi endpoint'ler yazdım, sonra fark ettim ki `/api/kullanicilar/5` şeklinde yazınca hem daha okunabilir oluyor hem de frontend tarafında consume etmek çok daha kolay hale geliyor. Özellikle `Access-Control-Allow-Origin: *` header'ı eklemeyi unuttuğum bir projede saatlerce "CORS hatası" ile boğuştum, o yüzden bu satırı her API'ye ilk yazmaya başladım artık. 😅
    +4 puan
    tamerkaya5744 1 yorum
    16.07.2026 18:17
    Kaynak bazlı URL yapısında `/api/kullanicilar` ve `/api/urunler` örnekleri çok doğru bir yaklaşım, ama bir yandan da bazı projelerde `GET /api/kullanicilar/5/profil` gibi nested resource'lara geçildiğinde PHP tarafında routing karmaşıklaşabiliyor. Stateless (durumsuz) prensibinin altı çok güzel çizilmiş, çünkü çoğu PHP geliştiricisi oturum (session) mantığıyla düşünmeye alışık, REST'te her isteğin bağımsız olması gerektiği kafada oturtulması gere
    1 2

    İlgili Konular