WordPress için Async HTTP İsteği Kılavuzu
Basit bir PHP ile çalışmayı sağlayan bir şey seridir – her kod satırı sırayla yürütülür. HTTP istekleri zaman alması ve oluşturma sayfalarını engelleyebileceğinden, çok fazla yangın veya diğer hizmetlerle etkileşime giren bir program oluşturmamız gerektiğinde bu da bir sınırdır. Bu konuyu, PHP kullanarak dinlenme yangınının çeşitli uç noktalarından elde edilen verileri birleştirme hakkındaki makalemde tartıştım. Bu problemden kaçınmak için en iyi tavsiyem, bunun yerine önbellek veya javascript kullanmaktır. JavaScript ile ilgili harika bir şey, HTTP Asenkron talep etmenin kolay bir yangın jQuery Ajax gibi birçok basit yolu olmasıdır.
PHP seri olsa da, PHP uygulamasında HTTP asenkron talep etmenin birkaç yolu vardır. Daha önce WordPress’te eşzamansız görevler hakkında yazdım. Bu, görevi yerine getirmek için mevcut oturumdan sonra beklemenin uygun olduğu kullanım için iyidir. Lezzetli beyinler, WordPress’teki Async PHP yöntemi için diğer yaklaşımlar hakkında çok iyi bir makaleye sahiptir. Ancak, mevcut oturumu tamamlamadan önce birkaç HTTP isteğinin sonuçlarına ihtiyacınız varsa, strateji başarılı olmayacaktır. Tersine, bir kerede bazı HTTP istekleri yapmak ve daha sonra devam etmek daha iyi bir yaklaşımdır. Bu makalede, WordPress ile nasıl yapılacağını göreceğim ve PHP Asenkron ile daha da ileri gitmek için bazı kaynaklar sağlayacağım.
WordPress 4.5 veya daha yeni bir istek, PHP için istek kitaplığı HTTP istekleri için kullanılır. Bu oldukça şeffaftır, ancak wp_remote_get () veya wp_remote_post () gibi işlevleri kullandığınızda, varsayılan olarak istekler yapmak için istekler kullanılır. Sonuç olarak, WordPress’te kendi isteklerimizi güvenli bir şekilde kullanabiliriz. Bu, Ryan McCue tarafından yönetilen yararlı ve basit bir kütüphanedir. Ana istek sınıfında her HTTP yöntemi için statik bir yöntem vardır. Bu nedenle, Get ve Requests :: Post () için istekler için istekleri :: get () ‘i kullanabiliriz. İşte iki hızlı örnek. WordPress Rest API üzerinden uzun bir mesafe sitesinden bir gönderi sayfası alan ilk. İkincisi, uzun bir mesafe sitesinde WordPress Rest API aracılığıyla yayın yapmak için bir yazı isteği yaptı: yeni istekler_auth_basic ([‘admin’, ‘şifre’]))
],
[
‘Başlık’ => ‘Merhaba Roy’,
‘İçerik’ => ‘Merhaba …’
]
); Bu harika, ama wp_remote _*() () işleviyle yapamayacağımız hiçbir şey yok. Aslında, belki de en iyisi bu standartlara bağlı kalmaktır. Ancak, bu makalenin özü asenkron talebi tartışmaktır.
Eşzamansız olmak, sık sık kullanıldığını görmedim, ancak WordPress, 4.5 sürümünden beri ek bağımlılık olmadan PHP asenkron talep etme yeteneğine sahiptir. İstek sınıfında bir request_multiple () yöntemi vardır. Örneğin, başladığım örnekleri kullanmak için – birkaç dinlenme yangın sitesinden yayınları birleştirerek, şu gibi iki GET isteğini birleştirebiliriz: ‘https://calderaforms.com/wp-json/wp/v2/posts’,
‘Type’ => ‘al’
];
$ request_2 = [
‘Url’ => ‘https://joshpress.net/wp-json/wp/v2/posts’,
‘Type’ => ‘al’
];
$ yanıt = istek :: request_multiple ([$ request_1, $ request_2]);
/** @var istekleri_respon $ yanıt*/
foreach ($ yanıt olarak $ yanıt) {
$ data = [];
if (IS_A ($ yanıt, ‘requests_response’))) {
$ data [] = json_decode ($ rep Respons-> gövde);
}
} Gördüğünüz gibi, her biri için bir dizi istek parametresi, URL ve yöntem geçtik. Her iki istek de eşzamanlı olarak yapılır ve ikisi bittikten sonra $ yanıtla çalışabiliriz. “Bitirirse” demek istediğim başarılı veya başarısız olduğunu unutmayın. Bu yüzden döngüde döndürülen değerin requests_response nesnesi olup olmadığını kontrol ediyorum. İstek başarısız olursa Requests_exception nesnesi olacaksa.
Oldukça basit değil mi? Talepte gizlenmiş birçok karmaşıklık var. İyi. Karmaşıklığı soyutlamak iyi bir şeydir. Post istekleri de yapabiliriz. Bu, veritabanlarına, CRM, posta listesi sağlayıcılarına vb. Formlardan veri eklemeniz gerekiyorsa yararlı olabilir. Aynı kişinin iki farklı MailChimp listesine abone olduğu bir örnek: <? Php $ tajuk = [
'Kabul: Uygulama/VND.API+JSON',
‘İçerik Türü: Uygulama/VND.API+JSON’,
// Gerçek ateş anahtarı ile değiştirin
‘Yetkilendirme: Apikey 123456789’
];
$ müşteri = [
‘E -posta_address’ => ‘[E -posta Korumalı]’,
‘Durum’ => ‘Abonelik’
];
$ request_1 = [
‘Url’ => ‘https://us10.api.mailchimp.com/3.0/lists/42/members’,
‘type’ => ‘yazı’,
‘Başlık’ => $ başlık,
‘Veri’ => $ Müşteri
];
$ request_2 = [
‘Url’ => ‘https://us10.api.mailchimp.com/3.0/lists/4000000/members’,
‘type’ => ‘yazı’,
‘Başlık’ => $ başlık,
‘Veri’ => $ Müşteri
];
$ yanıt = istek :: request_multiple ([$ request_1, $ request_2]);
/** @var istekleri_respon $ yanıt*/
foreach ($ yanıt olarak $ yanıt) {
$ data = [];
if (IS_A ($ yanıt, ‘requests_response’))) {
$ data [] = json_decode ($ rep Respons-> gövde);
}
} Diğer seçenekler? İstekler PHP 5.2 ile uyumludur ve WordPress ile entegre edilir. Yani bu, çatışmaya neden olmak için en uyumlu ve en imkansız seçenektir. GUKULE ayrıca HTTP Asynchron’un isteğini de destekler. Daha karmaşık ihtiyaçlarınız varsa, Guzle doğru seçimdir. Bu makale aslında birçok HTTP seri talebini beklemenin neden olduğu son sorundan ilham aldı. Sorunu Async Guzle’ın isteği ile çözdüm, ancak daha sonra “WordPress yöntemleri” arıyorum. PHP Asenkron’u gerçekten keşfetmek istiyorsanız, ReactTPHP kütüphanesi (ReactJ’lerle bağlantı yok) HTTP Asenkronizmi ve daha fazlasını işleyebilir. Facebook’un PHP-Fork Hack, PHP Asenkron düşünerek yapılır. Uygulamanızın karmaşıklığı arttıkça ve API’yı – kendi üçüncü tarafınızı – uygulamanıza ne kadar çok entegre ederseniz, HTTP isteklerini engellemede daha fazla sorun olur. Umarım WordPress ile HTTP Asynchron’a giriş yardımcı olacaktır.