Eski projeye WordPress Rest API ekleme zorluğunun üstesinden gelmek

WordPress Rest API hayranı olduğum bir sır değil. Her zaman yeni bir projede kullanıyorum, ancak ana projeme – Caldera Forms – yapılması zor bir restoran desteği ekliyor. Modern WordPress’in geliştirilmesi, aynı dahili PHP API’sını kullanarak HTTP Yönetici/Geleneksel Ön Uç, REST için dinlenme API veya WP-CHLi isteklerine yanıt olarak aynı eylemin yapılmasını sağlayan PHP kodu yazmayı gerektirir. Geçmişte, bence bu felsefeyi takip etmek çok önemli değildir. Ayarlar yönetici sayfasında değiştirilir ve içerik ön uçta görüntülenir. Bu, birçok kişinin, gelen HTTP’nin isteği ile yakından ilişkili olan çok başarılı bir eklenti yazmasına neden olur ve talebin WordPress’teki bir şeyi tıklayan bir tarayıcıdan geldiğini varsayarak Global WP_Query nesnesi.
Tüm CRUD işlemleri için bir PHP API’sına sahip olmak, en azından yeni bir standart haline geldi. Bu daha iyi bir koda yol açar ve daha kolay yönetilir ve API, WP-CHLI ve bir sonraki MAYBE Graphql’in farklı arayüzler aracılığıyla aynı işlevi kolayca gerçekleştirmek için göründüğü her şeye izin verir. Örneğin, WooCommerce kısa süre önce çekirdek eklentisine bir CRUD sınıfı ekledi. Bu yangın boyunca her şeyi çalıştırmak, veritabanı yapılarını değiştirmelerine ve kodlarını daha test etmelerini sağlayacaktır. Ancak, ve bu çok büyük, orada birçok WooCommerce terlemesi var ve Crud sınıfını kullanmayan daha fazla özel site var. Bu, büyük bir geri çekilme uyumluluğunun zorluklarını sunacaktır, ancak bu platformlarının geleceği için orantılıdır.
Bir yangın dinlenme ekleyerek ele aldığım bazı zorlukları paylaşmak ve altta yatan PHP API’sını eklenti kaldera formlarımda standartlaştırmak istiyorum. Umarım bu, yeni bir eklenti üzerinde çalışırken ve aynı durumda iseniz size yardımcı olurken bunları düşünmenizi sağlar. Fire Rest Caldera Forms Rest API’ya girmeden önce 2016 sonunda eklentiyi eklenen bir şeydir, ancak uzun zamandır temeli koydum. Yaptığım ilk şey Form ayarları için PHP API’sını tanıtmaktır. Form yapılandırması seçenek tablosunda saklandığından, get_option () çağrısı teknik olarak bir form yapılandırması elde etmek için yeterlidir. Tabii ki, bu diğer geliştiriciler için açık değil. Get_form (), get_forms (), create_form (), save_form () gibi yöntemlerle caldera_forms_forms adlı bir php sınıfı eklemek onu daha görünür kılar. Bu yöntemde standart bir filtre ve her zaman kullanılması gereken bir yapılandırma önbelleği vardır. Bu ateşle, formun yüklenmesini standartlaştırabilirim ve form konfigürasyonu için API’nin bitiş noktasını dinlendirmeye hazır olabilirim. Ayrıca, bir sınıftan geçen formların yapılandırılması için tüm çağrılara sahip olmak, form depolamasının konumunu değiştirmeye veya sınıf nesne sınıfını tanıtmaya karar verirsek formun depolanma şeklini değiştirmeyi çok kolaylaştıracaktır.
Form yapılandırmasına ek olarak, form girişi ile etkileşim kurmak için Caldera Forms Rest API’sına da ihtiyaç vardır. Bu benzer bir süreç gerektirir. Özel bir tablo için gerektiği gibi veri girişini okumak ve yazmak için WPDB kullanmak yerine, daha sonra bir yangın dinlenmesine sarılabilen crud giriş soyutlamasını yazıyorum. Restoran API kodunuzu düzenleme Caldera Forms API dinlenmesini nasıl derlediğim hakkında çok fazla ayrıntı tartışmak istemiyorum. Yangın dinlenmesi için nesne yönelimli yaklaşımların kullanımı hakkında tork için yazdığım makalenin örnek kodunun, kaldera formlarının dinlenmesinin yapısına dayandığını veya tam tersi olup olmadığını hatırlamıyorum. Mümkün olduğunca, bu sadece son noktayı, eklenti için yaptığım ve ön uç giriş sanatçılarımız için farklı verilere ihtiyacım olduğunu fark ettiğimde çok kolay. Yaptığım bir diğer önemli şey de geri kalan ateşin bitiş noktasını yüklemek için bir sınıf yapmak. Tüm son sınıflarımız caldera_forms_api_route arayüzünü uygular. Bu arayüzün bir yöntemi vardır, add_routes (), bir argüman $ ad alanı alan. Yöntem tam olarak söylediği gibi yaptı – sınıf tarafından belirlenen rotayı ekleyin. Bu aynı zamanda API ad alanının bir kez tanımlandığı ve her rotaya iletildiği anlamına gelir.
Son noktayı içeren sınıf, yöntemin enjeksiyonunu kullanır-bu durumda bağımlılığı devam ettirmek-bu durumda rota sınıfını halka açık yöntemle sınıfa, kullanıldığında nesneye bağımlılıkların enjeksiyonu yerine, . Bu, eklenti eklentisinden rotayı eklemeyi kolaylaştırır. Bu nedenle, yangın yükleyen, ekleme kullanımı için eylemler üzerindeki nesneleri ortaya çıkaran ve daha sonra gerçekten yollar ekleyen bir sınıf örneği oluşturabilirim. Kodu burada görebilirsiniz. Aslında Caldera Forms sürüm 1.4.4’te yangını dinlendirmek için altyapı gönderiyoruz, ancak 1.5 sürümüne herhangi bir bitiş noktası eklemiyoruz. Bu, eklentinin daha hızlı bir bitiş noktası eklemesine izin verir, bu da çok yararlıdır ve sistemi test etmeme yardımcı olur. Eklentiniz için yangın dinlenmesi, eklenti olan veya sahip olabilecek herhangi bir eklenti için çok önemli olması gerektiğinden genişletilebilir. Eklenti veya sadece diğer geliştiriciler tarafından kullanımı kolay olmak isteyin. Temiz Temiz Çağrı Basit Sanırım WordPress için PHP kodlamasındaki başarıyı ölçmenin bir yolu, standart bir eklenti sistemi kullanan temiz ve basit bir dinlenme API çağrısıdır. Örneğin, bir giriş almak için Caldera Forms Rest API’sının bitiş noktası için bir geri çağrı: <? Php
// bu caldera_forms_api_entries sınıfından alıntılanmıştır

//https://github.com/calderawp/caldera-forms/blob/master/classes/api/entries.php
/**
* Bir giriş alın
*
* Get/cf-api/v2/girişler/form-id/giriş-id
*
* @sejak 1.5.0
*
* @param wp_rest_request $ istek
*
* @return caldera_forms_api_error | caldera_forms_api_response
*/
Genel işlev get_item (wp_rest_request $ istek) {
$ form_id = $ request [‘form_id’]; $ form = caldera_forms_forms :: get_form ($ form_id);
if (! Is_array ($ form)) {
Return caldera_forms_api_response_factory :: error_form_not_found ();
}
$ giriş = new caldera_forms_entry ($ form, $ istek [‘entry_id’]);
if (null == $ giriş-> get_entry ()) {
Return caldera_forms_api_response_factory :: error_entry_not_found ();
}
$ data = $ this-> add_entry_to_response ($ giriş, array ());
$ data = $ data [$ request [‘entry_id’]];
Return caldera_forms_api_response_factory :: entry_data ($ data, 1, 1);
}
Bu işlev, form için standart bir PHP API kullanan bir giriş formu içerir. Form bulunmazsa, yanıtlar için fabrika hataları geri yüklemek için kullanılır. Form gerçekten oradaysa, form yapılandırması, form girişi için standart nesneye, istekten giriş kimliği ile birlikte iletilir. Giriş bulunmazsa, yanıt fabrikası hataları geri yüklemek için kullanılır. Giriş bulunursa, tekrar başka bir arka aramada kullanılan başka bir sınıf yöntemi, yanıt için bir giriş hazırlamak için kullanılır. Daha sonra yanıt fabrikası, wp_rest_response genişleten bir sınıf kullanarak standart bir yanıt nesnesi sağlamak için kullanılır.
Veritabanı ile tüm dahili mantık etkileşimleri diğer sınıflarda gerçekleşir. Bu API REST kontrol sınıfı, yalnızca doğru veriler veya uygun hatalarla yangın taleplerine yanıt vermektir, göreve ulaşılır. REST API, yeni bir WordPress eklentisi veya uygulaması başlatırken API’nın geri kalanından daha fazlasıdır, API REST tarafından her şeyin nasıl kullanılacağını düşünmek çok önemlidir. Ve bu sadece eklentilerinizin ve uygulamalarınızın yangın dinlenmesi gerektiği için değil. Bunun nedeni, benim ve birçok insanın temiz bir koda yol açmayı önerdiği ve sürdürülebileceği yaklaşımdır. Kod tabanı iki arayüz tarafından iyi kullanılabilirse, örneğin WordPress Yöneticisi ve REST API ile reklamlı WP-CHLI desteği veya henüz mevcut olmayan diğer veri alışverişi teknolojisi, kolay olmalıdır. Kalıtım projesi için bu olabilir. Bir meydan okuma ol, ama bu zevk aldığım bir zorluk. Daha da önemlisi, bu, eklentinizin veya uygulamanızın alakalı kalmasına ve kodunuzu artırmanıza yardımcı olacaktır.

admin

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir