API Tanımı : WordPress HTTP API
WordPress içine 2.7 ile birlikte gelen HTTP API çok marifetli ve işlevsel bir API. WordPress’in yazılarındaki anlatımına göre, eklenti yapımcılarının ihtiyaçları ve aslında WordPress çekirdeki takımının ihtiyacı üzerinde doğdu HTTP API. Böyle bir giriş yaptıktan sonra bu tanımın ve devamının biraz da eklenti yazan kişilere hitap ettiğini hatırlatmamda fayda var sanırım.
Ne ola ki bu HTTP API?
PHP içerisinde sitelerin, kodlar aracılığıyla birbiriyle etkileşimde bulunmasına olanak tanıyan birçok yol var. Ancak bazı barındırma hizmeti veren firmalar günvelik sebeplerinden dolayı bu yolları tamamiyle kapatabiliyorlar. Ya da sadece belli başlı etkileşim olanağı sağlıyorlar.
Bu durumda biz yazılımcıların ekstra Class, API, fonksiyon yazmamız gerekiyor. Tabii bu yazmakla da kalmıyor, bunu kullanıcının isteklerinie göre geliştirmemiz de gerekebiliyor. WordPress 2.7 sürümünden önce de durum tam olarak böyle olmuş. Eklenti geliştiricileri kendi kodlarını yazmak durumundalarmış ve bu çoğu zaman sıkıntıya sebep oluyormuş. Tabii yukarıda dediğim gibi çekirdek takım için de bu kötü geri dönüşler demek oluyormuş.
WordPress ekibi bu istekten yola çıkarak öncelikle bir standart koymak adına WordPress 2.7 içerisine HTTP API kodunu yerleştirmişler ve kullanıma sunmuşlar. Takip eden dönem içerisinde ise geir bildirimleri alıp WordPress 2.8 içerisinde HTTP API kodlarını genişletilebilir kılmışlar. Bu da çoğu eklenti kulanıcısının bu kodları rahatlıkla ihtiyacına göre düzenlemesi, geriye dönük destek kapasistesinin artmasını sağlamış.
Yani genel anlamda WordPress HTTP API bugün çoğu önbellek eklentisinin temel ve vazgeçilmez bir fonksiyonu haline geldi. Özellikle dosyaların header dediğimiz baş tanımlayıcılarını (last-modified
gibi) öğrenmemize ve duruma göre olasılıklar oluşturmamızı sağlar.
HTTP API Yardımcı Fonksiyonları
HTTP API işini kolaylaştırmak ve kullanımı açısından geliştirici kitlesine anlaşılabilir olması için geliştirimiş olan fonksiyonlardır. Aşağıda ilk olarak size tanıtacağım dört adet fonksiyon sizlere herhangi bir URL hakkında bilgi getirir. Yanlarına açıklamalarını yazıyorum. Üstlerine tıklarsanız codex sayfalarına gitmiş olacaksınız.
wp_remote_get()
: Verilen URL adresiniGET
HTTP metodu ile getirir.wp_remote_post()
: Verilen URL adresiniPOST
HTTP metodu ile getirir.wp_remote_head()
: Verilen URL adresiniHEAD
HTTP metodu ile getirir.wp_remote_request()
: Verilen URL adresiniGET
yada özel başka bir HTTP metodu ile getirir.
Yukarıdaki kodlar herhangi bir hata ile karşılaşıldığında WP_Error
classını kullanarak hata mesajı verirler. Bu fonksiyonları kullanırken hata sorgusu için bu classı kullanmanız faydalı olacaktır.
Diğer HTTP API yardımco fonksiyonları ise şunlar;
wp_remote_retrieve_body()
: Gelen cevabın içeriğini (body) getirirwp_remote_retrieve_header()
: Gelen cevabın içinden istediğiniz bir head döngüsünü getirirwp_remote_retrieve_headers()
: Gelen cevaptaki tüm head döngüsünü verir. Array çıktısı olarakwp_remote_retrieve_response_code()
: HTTP cevabının kodunu verir. Normal şartlarda 200 olmalıdır. 4xx veya 3xx hata temsil ederwp_remote_retrieve_response_message()
: Gelen cevap koduna bağlı olarak cevap numarasını yazar
HTTP API aşağıdaki örnekte de görüleceği gibi yönlendirmeleri de destekler kapasitededir.
$theBody = wp_remote_retrieve_body( wp_remote_get('http://www.wordpress.org') );
Argümanlar
Bu fonksiyonları ya da genel anlamda HTTP API kodlarını kullanırken özelleştirmeniz gereken alanlar olabilir. Aşağıda tanımını ve nasıl kullanılmalıdır onları aktarıyorum.
- method : POST, GET, HEAD, PUT ve diğer metodlar olmak üzere kullanılabilir. En güvenlilieri POST,GET,HEAD dır.
- timeout : Sorgu yapılırken beklenecek cevap süresi (saniye bazında). Genelde 5 olarak kullanılır.
- redirection : Sorgu bırakılmadan önce izlencek yönlendirme sayısı. Genelde 5 olarak kullanılır.
- user-agent : Sorguyu yapan kullanıcı tanımı. Varsayılan değeri “WordPress/4.3; http://www.siteadresiniz.com” olarak belirlenmiştir. Buradaki 4.3 kullandığınız WordPress sürümüne göre değişkenlik gösterir.
- blocking : Varsayılan değeri true olan bu ayar bloklanmayan istekleri tetiklemek için uygulanabilir, bu ayarı false yapmak PHP içinde devam eden detayları göstermez. Bu POST gönderimi yaparken iyidir.
- compress : İstenen ve gelen datayı sıkıştırarak getirir.
- decompress : Gelen herhangi sıkıştırılmış datayı çözümleyerek gösterir
- sslverify : İstek alanında SSL sertifikasının aktifliğini kontrol eder.
Argümanlar Örnek Kullanım
$args = array(
'method' => 'GET' //HEAD,POST,PUT olabilir
'timeout' => 5,
'redirection' => 5,
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ),
'blocking' => true,
'compress' => false,
'decompress' => true,
'sslverify' => true,
);
Genel anlamda WordPress HTTP API kodlarını nasıl kullanabildiğinizi ve ne işe yaradıklarını anlatabildiğimi düşünüyorım :)
Sizce bu apiyi curl kütüphanesinin alternatifi olarak kullanmak (özellikle performans açısından) mantıklı olur mu?
Selim,
Öncelike geç cevap verebildiğim için kusura bakma. Yoğunluğum had safhada. WordPress HTTP API cURL kütüphanesine kıyasla aslında şunu yapar. O an için isteği karşılamak adına en uygun ve en hızlı PHP olayını seçer. Yani GET ve POST için sunucu tarafından karışılanabilecek metodu seçer.
Hem bazı durumlarda daha güvenli (dosya açma, getirme, döküm), hem de daha hızlı olabilir.
cURL’e karşı HTTP API mantıklı görünmekte.
Teşekkür ederim, ne kadar yoğun olduğunu tahmin edebiliyorum. #wwwkonusuyoruz serisinden az çok tanıdık sizleri :)