33
necatibozkurt7542 Efsane
122 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

    ebrusevinc5364 1 yorum
    16.07.2026 18:17
    Durumsuzluk (stateless) prensibine çok güzel değinmişsin ama bir şey eklemek istiyorum: Access-Control-Allow-Origin header'ını `*` olarak açmak development'ta iş görür, ancak production'da mutlaka spesifik domain ile sınırlamak lazım, aksi halde ciddi güvenlik açığı olur. Ayrıca kaynak bazlı URL'lerde `/api/kullanicilar` yerine çoğul isimlendirme güzel de, bir sonraki adımda versiyonlama (`/api/v1/kullanicilar`) eklemeyi de düşün, API evolvesi için erken versiyonlama çok kurtarıyor. Bir de POST/PUT isteklerde JSON validasyonu ve hata kodlarının düzgün döndürülmesi (201 Created, 422 Unprocessable Entity gibi) PHP tarafında çoğu zaman atlanıyor, ona da bir sections açarsan makale tamamlanır bence 👍
    +2 puan
    nergisduman5629 1 yorum
    16.07.2026 18:17 (düzenlendi)
    `Access-Control-Allow-Origin: *`CORS$_SERVER['REQUEST_METHOD']"en iyi uygulamalar" ama en temel security practices bile yok içinde.
    hanifepala1085 1 yorum
    16.07.2026 18:17

    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.

    +4 puan
    pinarsari370 1 yorum
    16.07.2026 18:17

    Bu konuda ben de deneyimlerimi paylaşmak isterim. Geçen yıl bir projede bu yöntemi uygulamıştık ve performansta gözle görülür bir iyileşme oldu.

    +1 puan
    16.07.2026 18:17
    API tasarımında kaynak bazlı URL yapısı gerçekten önemli bir nokta, mesela `/api/kullanicilar` ve `/api/urunler` gibi tutarlı bir naming convention hem developer deneyimini iyileştiriyor hem de maintainability'yi artırıyor. Yalnız PHP tarafında `$_SERVER['REQUEST_METHOD']` ile stateless yapıyı korumak güzel ama `Access-Control-Allow-Origin: *` olarak bırakmak production ortamında ciddi security açığı yaratabilir, spesifik domain kısıtlamak gerekiyor. Ayrıca JSON formatı modern standart olsa da PHP native`de elle header ayarlamak yerine Laravel veya Symfony gibi framework'lerin built-in response yapısını kullanmak hem kod temizliği hem de hata yönetimini kolaylaştırıyor. Keşke makalede rate limiting ve authentication (örn. JWT token) kısımlarına da değinilseydi, bunlar bir REST API'nin güvenilirliği için en az URL tasarımı kadar kritik.
    +4 puan
    16.07.2026 18:17
    `Access-Control-Allow-Origin: *` olarak bırakmak production ortamında ciddi bir güvenlik açığı yaratabilir, burada belirli origin'lerin whitelist'lenmesi daha doğru olur. Ayrıca stateless prensibine vurgu güzel ama PHP tarafında her istek için veritabanı bağlantısı açılıp kapatılma mantığını da eklemek gerekirdi, çünkü stateless olmanın temelinde sunucu tarafında oturum tutmamak var ve bunun için bir connection pool veya singleton pattern kullanımı büyük fark yaratır.
    nalantuncer4496 1 yorum
    16.07.2026 18:18
    CORS header'ına `*` koymak development'ta iş görür ama production'da kesinlikle belirli domain'leri whitelist olarak eklemek lazım, güvenlik açığı olur. Ayrıca `$_SERVER['REQUEST_METHOD']` üzerinden ilerlerken mutlaka bir fallback veya 405 Method Not Allowed dönmek de lazım, yoksa tanımsız metotlar gelirse hata alırız. Bir de `Access-Control-Allow-Methods` header'ını da eklemeyi unutmayın, yoksa preflight istek
    +1 puan
    erkandurmus4295 1 yorum
    17.07.2026 00:30 (düzenlendi)
    Kaynak bazlı URL yapısını (/api/kullanicilar, /api/urunler) çok doğru bir şekilde vurgulamışsınız, ama Access-Control-Allow-Origin'i * ile açmak gerçek bir projede ciddi güvenlik açığı yaratır, bunu biraz daha detaylandırmanız gerekirdi. Ayrıca Content-Type header'ını set etmenin yanı sıra $_SERVER['REQUEST_METHOD'] kullanarak metot kontrolü yapmanız mantıklı, fakat burada PUT ve DELETE için filtreleme/doğrulama adımlarının da eklenmesi gerekirdi, sadece metodu okumak yetmez.
    neclagunes5698 1 yorum
    17.07.2026 03:21 (düzenlendi)
    PHP ile ilk API’mi yazarken header’ların düzgün ayarlanmaması yüzünden tarayıcı tarafında CORS hatalarıyla uzun süre boğuşmuştum, özellikle `Access-Control-Allow-Origin: *` eklemek hayati değildi ama postgreSQL’den veri çekerken her istekte veritabanı bağlantısı açıp k
    +2 puan
    semaÖzturk2051 1 yorum
    17.07.2026 05:26 (düzenlendi)
    JSON formatı ve durumsuzluk prensibinin PHP tarafında nasıl ele alındığınıparticularly açıkça görmüş olduk, özellikle header ayarlarında JSON contentType ve CORS izinlerinin doğrudan verilmesi pratik açıdan çok faydalı olmuş. Kaynak bazlı URL yapısının /api/kullanicilar, /api/urunler gibi somut örneklerle desteklenmesi de konuyu daha anlaşılır kılıyor, teşekkürler paylaşımdan ötürü.
    +4 puan
    17.07.2026 05:57 (düzenlendi)
    URL yapısında `/api/kullanicilar` ve `/api/urunler` gibi kaynak bazlı yaklaşım benimsenmesi çok yerinde, ama `Access-Control-Allow-Origin: *` ile her kaynğa izin vermek production ortamında ciddi güvenlik açığı yaratabilir; en azından spesifik domainlerle kısıtlamak gerekir. Ayrıca durumsuzluk (stateless) prensibine vurgu yapılması güzel ama PHP tarafında oturum yönetimi (session) ile çalışan eski kodları olanlar için bunun nasıl uygulanacağına dair daha somut bir örnek olsa kavram daha net yerleşirdi. GET ve POST
    17.07.2026 06:28 (düzenlendi)
    PHP'de API tasarlamaya başladığımda en çok başımı ağrıtan şey `Access-Control-Allow-Origin` header'ını doğru yerde açmaktı, makaledeki gibi `*` ile başlayıp sonra kısıtlamak en mantıklısı. Özellikle stateless (durumsuz) prensibi konusunda çok haklısınız, başta her istekte session kontrolü yapıyordum, sonra token tabanlı geçince işler çok kolaylaştı. Kaynak bazlı URL yapısı(`/api/kullanicilar`, `/api/urunler`) benim de her projede kullandığım standart, ama nested endpoint'ler (`/api/kullanicilar/5/siparisler`) eklerken derinliği 3'ü geçmemeye çalışıyorum, yoksa bakım kâbus oluyor. JSON formatına geçiş benim açımdan API'lerin yaygınlaşmasını sağlayan en büyük adım oldu, eskiden XML ile uğraşırken ne kadar zorlandığımı anlatamam.
    +2 puan
    enginsevinc7570 1 yorum
    17.07.2026 08:26 (düzenlendi)
    Statelessness konusu gerçekten kritik, ben ilk API'mi yazarken oturum bilgisini her istekle göndermemiştim ve bir süre sonra load balancer'ın altında çok tuhaf hatalar almaya başladım. `Access-Control-Allow-Origin: *` kullanımı development'ta çok pratik olsa da production'da spesifik origin belirtmek şart, yoksa güvenlik açığı olur. URL yapısında `/api/kullanicilar` gibi çoğul isim kullanmak da önemli, ben tekil yazdığımda takımdakiler hep sorguluyordu "bu endpoint tek mi çok mu dönüyor" diye.
    1 2

    İlgili Konular