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.
Î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 ...
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.
Crearea unui pachet pentru un API ne permite să fim prietenii tuturor. Lasă-mă să explic:
Î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:
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.
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.
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.
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
șia 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ămv3
î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.