Construirea unui Wrapper API WordPress-Friendly Fundații

Atunci când construiți un site web sau o aplicație web, este o cerință destul de comună că este posibil să trebuiască să trageți datele din site sau aplicații terță parte. Dacă acest site sau o aplicație are un API, acesta este un mod excelent de a obține datele necesare. Deci, hai să aruncăm o privire la modul de a face acest lucru cu WordPress.


Ce este un API?

Înainte să intrăm în zăpadă, să ne asigurăm că ne grăbim cu câteva lucruri, pornind de la ceea ce este un API.

Pentru scopurile acestui tutorial, atunci când spunem "API" (interfață de programare a aplicațiilor), înțelegem în mod specific ceea ce Wikipedia clasifică ca un "API Web":

Un API web pentru server este o interfață programatică cu un sistem de mesaje definit de cerere-răspuns, exprimat în mod obișnuit în JSON sau XML, care este expus prin intermediul rețelei web - cel mai frecvent prin intermediul unui server Web bazat pe HTTP.

Pentru a pune mai simplu: un API este o modalitate pentru ca o aplicație să ceară unei alte aplicații pentru informații predefinite în format JSON sau XML (cel mai adesea), printr-o adresă web standard.

Am înțeles? Ok, următoarea ...


Ce este un "Wrapper"?

Efectuarea unei solicitări către un API poate implica un număr de pași și este posibil să doriți să adăugați pași suplimentari, cum ar fi verificarea erorilor, cache-ul, validarea etc..

Wikipedia definește o funcție Wrapper după cum urmează:

Funcția de împachetare este o funcție într-un program de calculator al cărui scop principal este de a apela oa doua funcție cu puțină sau fără calcul suplimentar. Aceasta este, de asemenea, cunoscută sub numele de delegare de metode. Funcțiile wrapper pot fi utilizate în mai multe scopuri.

Această definiție poate face să sună puțin ca ambalajele sunt doar cod redundant, dar sunt de fapt departe de ea.


Considerații importante

Crearea unui pachet pentru un API ne permite să fim prietenii tuturor. Lasă-mă să explic:

  • API au adesea o "limită a ratei", adică numărul de ori și frecvența la care le puteți contacta. Contactarea unui API mai mult decât limita de rată specificată vă poate bloca și pentru informații care nu se schimbă în mod regulat, aceasta creează o încărcare inutilă a API-ului. Prin crearea unui pachet, putem implementa propriul caching, astfel încât să contactăm API mai rar.
  • În plus, dacă solicităm unui API cu informații incorect formatate sau incomplete, este o cerere risipită. Ar trebui să ne asigurăm că cererea pe care o trimitem este completă și formatată corect, cât mai bine putem înainte să o trimitem.
  • Uneori, un API poate trimite informații care nu sunt destul de formatate în modul cel mai simplu pentru a le utiliza. Având un strat între dezvoltator și API permite șansa de a masura datele după cum este necesar, înainte ca dezvoltatorul să o primească.
  • De asemenea, dezvoltatorii nu ar trebui să repete mai mult decât este necesar. Dacă îmbinăm toți pașii implicați în realizarea unui apel API într-un pachet, acest lucru simplifică dezvoltarea folosind API-ul în cauză.

Împacheturile fac ca API să se ocupe de dezvoltatori și să fie prietenoase cu API-urile.

Deci, lucrurile particulare pe care le vom face cu API-ul nostru sunt:

  • Efectuarea unui apel către API atunci când dezvoltatorul cere informații
  • Verificarea pentru a vă asigura că datele valide sunt trimise către API
  • Verificați dacă API-ul a returnat o eroare, mai degrabă decât date utile, și a procedat în consecință
  • Caching răspunsurile de la API, astfel încât, în cazul în care aceeași cerere este făcută într-un interval scurt de timp, nu avem de a contacta API-ul
  • Ajustarea datelor returnate pentru utilizare simplificată

De asemenea, vom face aceste lucruri într-un mod prietenos cu WordPress, cum ar fi utilizarea tranzitorilor pentru cache, și wp_remote_request pentru trimiterea cererilor API.


Construirea Fundației

API-ul pe care îl vom folosi pentru acest tutorial este API-ul Envato Marketplace. Acest API oferă informații despre elementele și utilizatorii de pe piețele Envato, cum ar fi ThemeForest, CodeCanyon și altele.

Vom sta la baza dezvoltării în jurul seturilor publice, văzute în documentația API Envato Marketplace. De asemenea, rețineți coloana TTL (timpul de trăit), care este în esență "limita de rată" pentru acest API. Pe măsură ce datele se modifică numai cu această frecvență, nu este necesar să se solicite un set dat mai des decât TTL specificat.

Deci, să începem să construim clasa de bază pentru comunicarea cu acest API.

1. Structura fișierului

Deoarece acest lucru va fi în cele din urmă într-un exemplu de plugin, la care vom ajunge mai târziu, să creăm acea structură de fișiere și să construim învelișul API înăuntru.

Pluginul nostru va afișa rezultatele setului API "random-new-files", așa că îl vom numi "Wptuts + Random New". Deci, în interiorul tău wp-content / plugins / director, mergeți mai departe și creați un director numit wptuts-aleatoare-nou.

Acum, în interiorul acelui director, faceți un nou director numit Envato-api-înveliș, și un fișier în interiorul acelei numite clasa-Envato-api-wrapper.php. Întregul director va putea apoi fi copiat în alte proiecte care trebuie să folosească acest API și în viitor.

2. Clasa și elementele de bază

Deschide * Clasa de-Envato-api-wrapper.php fișier și să începem.

În primul rând, să definim clasa noastră:

  

De asemenea, vom avea nevoie de o modalitate simplă de a testa acest pachet pe măsură ce îl construim, fără a fi necesar să încărcați tot WordPress. Deci, ce am făcut, este doar să creezi un index.php fișier în Envato-api-înveliș , cu următorul conținut:

  

Acum ar trebui să puteți căuta http: // localhost / wp-content / plugins / wptuts-aleatoare-noi / Envato-api-înveliș / (înlocuiți "localhost" cu propriul mediu de dezvoltare). Încă nu ar trebui să vedeți nimic, deoarece ambalajul nu face încă nimic. Dacă vedeți o eroare, verificați din nou codul.

Notă: nu uitați să eliminați acest fișier sau să îl ștergeți, înainte de a vă deplasa la producție!

3. Unde să trimiteți cereri

Primul lucru de care aveți nevoie înainte de a trimite o solicitare la un API este URL-ul de bază de utilizat. Această adresă URL va avea la dispoziție mai multe informații înainte de a trimite solicitarea.

În cazul API-ului Envato Marketplace, vom folosi următoarea adresă URL:

 http://marketplace.envato.com/api/edge/set.json

În această adresă URL există doi biți variabili principali de informații: edgde și a stabilit.

Poziția edgde reprezintă versiunea API pe care dorim să o folosim și, în mod specific, cea mai recentă versiune. Va fi la fel în toate cererile, cu toate acestea dacă se schimbă ceva și am vrut să folosim o versiune mai veche, am putea să o schimbăm v3 în loc de exemplu.

Poziția a stabilit reprezintă setul de date actual pe care îl solicităm. Cuvântul "set" este un substituent și îl vom înlocui cu detaliile relevante atunci când facem o solicitare specifică.

Să adăugăm o proprietate a $ api_url la clasa noastră cu această valoare:

  

Rețineți că am indicat că această proprietate este "protejat“. Am făcut acest lucru pentru că nu vrem ca adresa URL să fie modificată direct de alt cod în afara ambalajului nostru.

4. Efectuarea unei cereri

Înainte de a încerca să facem o cerere specifică, vom adăuga o metodă generică clasei noastre care se va ocupa de efectuarea oricărei solicitări. O să-l sunăm remote_request, și tot ce va avea nevoie este o adresă URL pentru a trimite solicitarea.

 funcția protejată remote_request ($ url) // În primul rând, dacă adresa URL este goală, nu trimiteți o solicitare dacă (gol ($ url)) return false;  // Realizați solicitarea $ request = wp_remote_request ($ url); // Verificați că WordPress a putut să trimită cererea, altfel eroare dacă (is_wp_error ($ request)) echo $ request-> get_error_message (); return false;  // Decodați răspunsul astfel încât să îl putem folosi $ data = json_decode ($ request ['body']); dacă ($ request ['answer'] ['code'] == 200) returnați $ date;  altfel return false; 

Rețineți că din nou am indicat că această metodă este "protejat", pentru a preveni ca acesta să fie chemat direct din afara clasei noastre.

Acum, pentru a putea testa că cererea funcționează, vom adăuga prima noastră metodă API. În acest caz, vom merge cu aleatoare-noi-fișiere set, care este cel pe care îl vom folosi mai târziu în pluginul nostru de exemplu.

Adăugați următoarea metodă la clasa noastră:

 funcția publică random_new_files ($ marketplace) // Creați o adresă URL pentru această solicitare prin înlocuirea substituentului "set" cu setul și parametrii necesari. În acest caz, bancul unei piețe Envato $ url = preg_replace ('/ set / i', 'random-new-files:'. $ Marketplace, $ this-> api_url); // Trimiteți o solicitare API $ results = $ this-> remote_request ($ url); returneaza rezultatele $; 

Pentru a testa această nouă metodă și, prin extensie, metoda de solicitare API, adăugați următoarea linie la depanarea noastră index.php fişier:

 echo "
". print_r ($ envato_api-> random_new_files ('themeforest'), adevărat). '
„;

Acum ar trebui să obțineți ieșire în browser-ul dvs. similar cu aceasta:

 Obiectul stdClass ([random-new-files] => Array ([0] => Obiect stdClass ([id] => 4860464 [item] => Empire - Template [url] => https: // themeforest.net/item/empire-business-portfolio-html-5-template/4860464 [user] => designthemes [thumbnail] => http://1.s3.envato.com/files/57931279/thumb-html. png [vânzări] => 0 [evaluare] => 0.0 [cost] => 15.00) ... [9] => Object StdClass ([id] => 4852371 [item] => eplie | ] => https://themeforest.net/item/eplie-mobile-htmlcss-portfolio-template/4852371 [utilizator] => cosmincotor [thumbnail] => http://1.s3.envato.com/files/57831617 /thumbnail.png [vânzări] => 3 [evaluare] => 0.0 [cost] => 8.00)))

Presupunând că ați văzut ceva de genul celor de mai sus, înseamnă că funcționează și că ați obținut date din API. Succes!


Înainte: Caching, eroare de manipulare și un widget

Acum am ajuns la baza ambalajului, lucrurile sunt în plină desfășurare. În următoarea parte, vom termina ambalajul și vom construi un widget care o folosește.

De asemenea, rețineți că, în timp ce acest pachet este construit pentru API-ul Envato Marketplace, același concept (și o mulțime de același cod până acum) poate fi folosit pentru a crea un pachet pentru orice API RESTful.

Spuneți-ne în comentarii ce idei aveți pentru a lucra cu API și WordPress.

Cod