Wordpress İle Özel Rest Api Uç Noktası Nasıl Yapılır?

Wordpress İle Özel Rest Api Uç Noktası Nasıl Yapılır?
Wordpress İle Özel Rest Api Uç Noktası Nasıl Yapılır?

Ön Hazırlık ve Gereksinimler

Özel bir REST API uç noktası oluşturmadan önce çalışma ortamınızın hazır olduğundan emin olmalısınız. WordPress REST API, 4.7 sürümünden beri çekirdek yapının bir parçasıdır. Geliştirme sürecinde aşağıdaki araçlara sahip olmanız işinizi kolaylaştıracaktır:

  • WordPress 6.x veya üzeri: Güncel sürüm, güvenlik ve performans iyileştirmeleri için zorunludur.
  • PHP 8.2 veya üzeri: Modern sözdizimi ve tip güvenliği için önerilen sürümdür.
  • Postman veya Insomnia: Oluşturduğunuz uç noktaları test etmek için kullanacağınız API istemcileri.
  • WP_DEBUG: Geliştirme aşamasında hataları anlık görmek için wp-config.php dosyanızda define('WP_DEBUG', true); modunu açık tutun.

WordPress REST API Yapısını Anlamak

WordPress REST API, HTTP metodlarını (GET, POST, PUT, DELETE) kullanarak verilerle etkileşime girmenizi sağlar. Özel bir uç nokta oluşturmak için register_rest_route() fonksiyonunu kullanırız. Bu fonksiyon, rotanın adını, metodunu ve veriyi döndürecek olan geri çağırma (callback) fonksiyonunu tanımlar.

Aşağıdaki temel örnek, basit bir "Merhaba Dünya" uç noktası oluşturur:

add_action('rest_api_init', function () {
    register_rest_route('ozel-api/v1', '/selam', array(
        'methods' => 'GET',
        'callback' => 'ozel_api_selam_mesaji',
    ));
});

function ozel_api_selam_mesaji() {
    return new WP_REST_Response(array('mesaj' => 'Merhaba, WordPress API dünyasına hoş geldiniz!'), 200);
}

Bu kod bloğu, /wp-json/ozel-api/v1/selam adresine bir GET isteği attığınızda JSON formatında bir mesaj döndürür. register_rest_route fonksiyonu, API'nizin namespace (isim alanı) ve route (rota) yapısını belirler.

Adım Adım Özel Veri Sorgulama

Sadece statik mesajlar döndürmek nadiren yeterlidir. Genellikle veritabanından özel veriler çekmek istersiniz. Örneğin, belirli bir kategoriye ait ürünleri veya özel bir veritabanı tablosundaki kayıtları çekmek için callback fonksiyonu içinde WP_Query veya $wpdb kullanabilirsiniz.

function ozel_api_son_yazilari_getir(WP_REST_Request $request) {
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 5,
    );
    $query = new WP_Query($args);
    $yazilar = $query->posts;

    if (empty($yazilar)) {
        return new WP_Error('yazi_bulunamadi', 'Hiç yazı bulunamadı', array('status' => 404));
    }

    return rest_ensure_response($yazilar);
}

Bu fonksiyon, WordPress'in standart postlarını çeker ve rest_ensure_response ile API formatına uygun hale getirir. Eğer veri bulunamazsa, WP_Error sınıfı ile anlamlı bir hata mesajı döndürmek, API'nizin hata yönetimi kalitesini artırır.

Güvenlik: Yetkilendirme ve Doğrulama

Kritik Uyarı: API uç noktalarınızda hassas veriler (kullanıcı bilgileri, özel ayarlar vb.) paylaşıyorsanız mutlaka yetkilendirme (authorization) kullanın. Herkese açık uç noktalar, veritabanı sızıntılarına yol açabilir. permission_callback parametresini boş bırakmayın.

Bir uç noktayı sadece giriş yapmış yöneticilerin görmesini sağlamak için current_user_can() fonksiyonunu kullanmalısınız:

register_rest_route('ozel-api/v1', '/admin-ozel', array(
    'methods' => 'GET',
    'callback' => 'admin_sadece_verisi',
    'permission_callback' => function () {
        return current_user_can('edit_posts');
    }
));

Bu yapı, isteği yapan kullanıcının yetkisi yoksa API'nin otomatik olarak 401 Unauthorized hatası döndürmesini sağlar.

Girdi Doğrulama ve SQL Injection Koruması

Kullanıcıdan parametre alırken (örneğin /ozel-api/v1/yazi?id=1), gelen veriyi mutlaka temizlemeli ve doğrulamalısınız. args parametresi ile gelen verinin tipini belirleyebilirsiniz.

register_rest_route('ozel-api/v1', '/yazi', array(
    'methods' => 'GET',
    'callback' => 'yazi_detay_getir',
    'args' => array(
        'id' => array(
            'validate_callback' => function($param, $request, $key) {
                return is_numeric($param);
            }
        ),
    ),
));

Veritabanı işlemlerinde ise asla doğrudan SQL sorgusu yazmayın. Her zaman $wpdb->prepare() metodunu kullanarak SQL Injection saldırılarına karşı önlem alın.

Yöntem Karşılaştırması

Yöntem Avantajı Dezavantajı
register_rest_route Standart, ölçeklenebilir, güvenli. Başlangıçta öğrenme eğrisi gerektirir.
admin-ajax.php Eski yöntem, basit. REST API kadar yapısal ve performanslı değil.
Özel PHP Dosyası Tam kontrol. WordPress fonksiyonlarına erişim zor.

Sıkça Sorulan Sorular

API uç noktam neden 404 hatası veriyor?

Genellikle kalıcı bağlantı ayarlarının (permalink) güncellenmemesinden kaynaklanır. Ayarlar > Kalıcı Bağlantılar sayfasına gidip "Değişiklikleri Kaydet" butonuna basarak .htaccess dosyasını yenileyin.

JSON yanıtını nasıl özelleştirebilirim?

Callback fonksiyonunuzda veriyi bir dizi (array) olarak oluşturun. WP_REST_Response sınıfı bu diziyi otomatik olarak JSON formatına dönüştürecektir.

API'yi nasıl test ederim?

Postman uygulamasını indirin, sitenizin URL'sini ve oluşturduğunuz rotayı girin. GET isteği atarak yanıtı inceleyin.

POST isteklerinde veri nasıl gönderilir?

İstek gövdesinde (body) JSON formatında veri gönderin. WordPress tarafında $request->get_json_params() ile bu verilere erişebilirsiniz.

Performans için ne yapmalıyım?

Çok sık çağrılan uç noktalarda wp_cache_set veya transient API kullanarak verileri önbelleğe almayı ihmal etmeyin.

Yasal Sorumluluk Reddi: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Üretim ortamında (production) kullanmadan önce mutlaka güvenlik testlerinden geçirin ve kodların sitenizin genel performansı üzerindeki etkisini izleyin.

API Yanıtlarını Hızlandırmak İçin Transient API Kullanımı

Özel uç noktalarınızda karmaşık veritabanı sorguları veya ağır hesaplamalar yapıyorsanız, her istekte bu süreci tekrarlamak sunucu kaynaklarını tüketir. WordPress'in Transient API'si, verileri belirli bir süre boyunca veritabanında saklayarak API yanıt süresini milisaniyelere indirebilir.

function get_cached_custom_data() {
    $transient_key = 'my_custom_api_data';
    $data = get_transient($transient_key);

    if (false === $data) {
        // Veriyi ağır bir sorgu ile çekiyoruz
        $data = get_posts(array('post_type' => 'product', 'posts_per_page' => 50));
        
        // Veriyi 1 saatliğine önbelleğe al
        set_transient($transient_key, $data, HOUR_IN_SECONDS);
    }

    return $data;
}

Gelişmiş Hata Ayıklama ve Loglama Teknikleri

API uç noktalarınızda beklenmedik hatalar oluştuğunda, kullanıcıya sadece "500 Internal Server Error" döndürmek yerine, geliştirici dostu hata mesajları sunmak hata ayıklama sürecini hızlandırır. WP_REST_Response nesnesini kullanarak hata durumlarını özelleştirebilirsiniz.

Hata Yönetimi İçin İpucu

API yanıtlarınızda WP_Error sınıfını kullanarak, istemci tarafına hatanın nedenini net bir şekilde bildirebilirsiniz. Aşağıdaki örnek, yetkisiz erişim veya eksik parametre durumunda nasıl bir yapı kurulması gerektiğini gösterir:

function my_custom_endpoint_handler($request) {
    $id = $request->get_param('id');

    if (empty($id)) {
        return new WP_Error(
            'missing_id', 
            'Lütfen geçerli bir ID parametresi gönderin.', 
            array('status' => 400)
        );
    }

    $post = get_post($id);

    if (!$post) {
        return new WP_Error(
            'post_not_found', 
            'Belirtilen ID ile eşleşen içerik bulunamadı.', 
            array('status' => 404)
        );
    }

    return rest_ensure_response($post);
}

API Sürümleme (Versioning) Stratejisi

API'niz zamanla geliştikçe, mevcut uç noktalarınızda yapacağınız değişiklikler mevcut entegrasyonları bozabilir. Profesyonel bir yaklaşım olarak, uç noktalarınızı sürüm numaralarıyla yönetmek en sağlıklı yöntemdir.

  • v1: İlk kararlı sürüm.
  • v2: Büyük değişiklikler içeren yeni sürüm.

Sürümleme yaparken register_rest_route fonksiyonundaki namespace parametresini kullanın:

// Sürüm 1 için kayıt
register_rest_route('my-plugin/v1', '/data', array(
    'methods' => 'GET',
    'callback' => 'my_v1_handler',
));

// Sürüm 2 için kayıt
register_rest_route('my-plugin/v2', '/data', array(
    'methods' => 'GET',
    'callback' => 'my_v2_handler',
));
Önemli Not: API'nizi yayına almadan önce (deployment), mutlaka WP_DEBUG modunu kapatın ve hata loglarının halka açık bir şekilde görüntülenmediğinden emin olun. Üretim ortamında error_log dosyasını takip ederek API hatalarını izlemek, canlı sistemlerdeki sorunları tespit etmenin en güvenli yoludur.

Sonuç

WordPress ile özel REST API uç noktası oluşturmak, sitenizin işlevselliğini genişletmek ve modern web teknolojileriyle entegre etmek için en etkili yoldur. Bu rehberde öğrendiğiniz register_rest_route kullanımı, yetkilendirme ve veri doğrulama teknikleri, profesyonel bir API geliştirme sürecinin temel taşlarıdır. Bir sonraki adım olarak, oluşturduğunuz bu uç noktaları bir React veya Vue.js uygulaması ile tüketerek dinamik bir arayüz tasarlamayı deneyebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Zeynep Arslan

Kullanıcı deneyimi odaklı içerik üretiminde uzmanlaşmış bir editörüm. Özellikle DIY projeleri ve teknik rehberler üzerine detaylı içerikler üretiyorum.

Yorumlar (17)

17
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Caner Yılmaz
Caner Yılmaz 31 Temmuz 2026

Zeynep hanım harika bir anlatım olmuş. Özellikle register_rest_route kısmını çoğu kaynak çok karmaşık anlatıyor, siz basitleştirmişsiniz. Emeğinize sağlık.

Zeynep Arslan
Zeynep Arslan 01 Ağustos 2026

Çok teşekkür ederim Caner Bey, faydalı olmasına sevindim.

Selin B.
Selin B. 01 Ağustos 2026

Ya ben kodları denedim ama 403 hatası alıyorum sürekli. .htaccess dosyasıyla mı ilgili acaba? Yardımcı olabilir misiniz?

Zeynep Arslan
Zeynep Arslan 02 Ağustos 2026

Selin merhaba, yetkilendirme (permissions_callback) kısmını kontrol ettin mi? Genelde oradaki 'return true' unutulduğunda bu hatayı veriyor.

Mertcan Şen
Mertcan Şen 01 Ağustos 2026

Gayet açıklayıcı bir yazı olmuş. Custom post type verilerini çekmek için kullanıcam. Teşekkürler.

Deniz Kılıç
Deniz Kılıç 03 Ağustos 2026

Bende geçen hafta denedim, gayet performanslı çalışıyor. Tavsiye ederim.

Burak Özdemir
Burak Özdemir 03 Ağustos 2026

Eline saglık hocam cok güzel anlatmıssın. Bide güvenlik için nonce kullanımı hakkında da bi yazı yazsan süper olur aslında.

Zeynep Arslan
Zeynep Arslan 04 Ağustos 2026

Harika fikir Burak, not aldım. Bir sonraki yazımda güvenlik konusuna değineceğim.

Zeynep Çelik
Zeynep Çelik 04 Ağustos 2026

Yazı güzel de keşke kod bloklarını kopyalayabilseydik, mobilde biraz kaymış gibi duruyor.

Hakan Vural
Hakan Vural 05 Ağustos 2026

Bende de mobilde biraz sıkıntılı göründü ama tarayıcıyı yatay çevirince düzeldi.

Aslıhan G.
Aslıhan G. 04 Ağustos 2026

Kodları denedim calısıyor, cok saolun. Ama permalink ayarlarını kaydetmeyi unutmayın arkadaslar, yoksa 404 hatası alırsınız.

Zeynep Arslan
Zeynep Arslan 06 Ağustos 2026

Çok doğru bir hatırlatma, teşekkürler Aslıhan!

Emre Demir
Emre Demir 05 Ağustos 2026

Wordpress REST API ile uğraşanlar için altın değerinde bir kaynak. İsteği GET yerine POST yapınca veritabanına kayıt işlemi için de bir örnek ekleyebilir misiniz?

Kaan Yıldırım
Kaan Yıldırım 05 Ağustos 2026

Bu yöntemle veritabanı yorulmaz mı? Çok fazla istek gelirse sunucu performansı ne olur onu da bi açıklasaydınız keşke.

Melis Akın
Melis Akın 05 Ağustos 2026

Zeynep hanım merhaba, yazı için tşkler. Peki bu uç noktayı sadece giriş yapan kullanıcıların görmesini nasıl sağlarız?

Zeynep Arslan
Zeynep Arslan 07 Ağustos 2026

Merhabalar Melis, 'permissions_callback' kısmında 'current_user_can('read')' fonksiyonunu kullanırsanız sadece giriş yapanlar erişebilir.

Tolga A.
Tolga A. 07 Ağustos 2026

Gayet net ve anlaşılır. Teşekkürler paylaşım için.

Yorum Yaz