Bygg en WordPress-vennlig API Wrapper Foundations

Når du bygger et webområde eller et webapplikasjon, er det et ganske vanlig krav om at du kanskje må trekke inn data fra tredjeparts nettsted eller applikasjon. Hvis det nettstedet eller programmet har en API, er dette en utmerket måte å skaffe dataene på. Så, la oss ta en titt på hvordan du gjør dette med WordPress.


Hva er en API?

Før vi kommer inn i det nitty gritty, la oss sørge for at vi er helt opptatt med et par ting, begynner med hva en API er.

I denne veiledningen, når vi sier "API" (applikasjonsprogrammeringsgrensesnitt), mener vi spesifikt hva Wikipedia-klasser som en "Web API":

En server-side web-API er et programmatisk grensesnitt til et definert forespørsel-responsmeldingssystem, vanligvis uttrykt i JSON eller XML, som eksponeres via nettet - oftest ved hjelp av en HTTP-basert webserver.

For å si det enklere: En API er en måte for ett program å spørre et annet program for forhåndsdefinert informasjon i (oftest) JSON eller XML-format, over en standard webadresse.

Har det? Ok, neste gang ...


Hva er en "wrapper"?

Å gjøre en forespørsel til en API kan innebære en rekke trinn, og du vil kanskje legge til ekstra trinn som feilkontroll, caching, validering osv..

Wikipedia definerer en Wrapper-funksjon som følger:

En wrapper-funksjon er en funksjon i et dataprogram hvis hovedformål er å ringe en andre funksjon med liten eller ingen ytterligere beregning. Dette er også kjent som metode delegasjon. Wrapper-funksjoner kan brukes til en rekke formål.

Den definisjonen kan få det til å lyde litt som wrappers er bare overflødig kode, men de er faktisk langt fra det.


Viktige hensyn

Å lage en wrapper for en API gir oss mulighet til å være vennlig for alle. La meg forklare:

  • APIer har ofte en "rate limit", som er antall ganger og frekvensen som du kan kontakte dem med. Hvis du kontakter en API mer enn grenseverdien spesifiserer, kan du blokkere deg, og for informasjon som ikke endres som regelmessig, skaper det unødvendig belastning på APIen. Ved å lage en wrapper, kan vi implementere vår egen caching, slik at vi kontakter API-en sjeldnere.
  • I tillegg til dette, hvis vi gjør en forespørsel til en API med informasjon som er feilformatert eller ufullstendig, er det en bortkastet forespørsel. Vi bør sørge for at forespørselen vi sender er fullført og formatert riktig, så godt vi kan før vi sender det.
  • Noen ganger kan en API sende informasjon tilbake som ikke er helt formatert på den enkleste måten vi kan bruke. Å ha et lag mellom utvikler og API gir mulighet til å massere dataene etter behov før utvikleren får det.
  • Utviklere bør heller ikke måtte gjenta seg mer enn nødvendig. Hvis vi bunter alle trinnene som er involvert i å lage en API-oppringning i en wrapper, forenkler dette utviklingen ved hjelp av API-en.

Wrappers gjør håndtere APIer utvikler-vennlig, og API-vennlig.

Så de spesielle tingene vi skal få vår API til å håndtere er:

  • Ringe til API når utvikleren ber om informasjon
  • Kontroller for å sikre gyldige data sendes til API
  • Kontrollerer om API-en returnerte en feil i stedet for nyttige data, og håndterer det tilsvarende
  • Caching-svar fra API-en, slik at hvis den samme forespørselen er gjort på kort tid, trenger vi ikke å kontakte API
  • Justere de returnerte dataene for forenklet bruk

Vi gjør også disse tingene på en WordPress-vennlig måte, som for eksempel bruk av transienter for caching, og wp_remote_request for å sende API-forespørsler.


Bygge stiftelsen

APIen vi skal bruke for denne opplæringen, er Envato Marketplace API. Denne API gir informasjon om elementene og brukerne på Envato-markedsplassene, for eksempel ThemeForest, CodeCanyon og andre.

Vi baserer vår utvikling rundt offentlige sett, sett i Envato Marketplace API-dokumentasjonen. Legg også merke til kolonnen TTL (tid for å leve), som i hovedsak er "grenseverdien" for denne APIen. Da dataene bare endres med denne frekvensen, er det ikke noe poeng som ber om et gitt sett oftere enn den angitte TTL.

Så la oss begynne å bygge grunnklassen for å kommunisere med denne APIen.

1. Filstruktur

Fordi dette til slutt kommer til å ligge inne i et eksempel-plugin, som vi kommer til senere, la oss lage den filstrukturen og bygge API-wrappen inni.

Vår plugin vil vise resultatene av API-settet "Random-New-Files", så vi kaller det "Wptuts + Random New". Så inne i din wp-innhold / plugg / katalog, gå videre og opprett en katalog som heter wptuts-random-nytt.

Nå inne i den katalogen, lag en ny katalog som heter Envato-api-wrapper, og en fil i det som heter klasse-Envato-api-wrapper.php. Denne hele katalogen vil da kunne kopieres til andre prosjekter som må bruke denne API-en også i fremtiden.

2. Klasse og grunnleggende

Åpne * Klasse Envato-api-wrapper.php fil, og la oss begynne.

La oss først definere vår klasse:

  

Vi skal også ha en enkel måte å teste denne wrapper når vi bygger den, uten å måtte laste alle WordPress. Så det jeg har gjort, er bare å opprette en index.php fil i Envato-api-wrapper katalog med følgende innhold:

  

Nå bør du kunne bla gjennom til http: // localhost / wp-content / plugins / wptuts-random-nytt / Envato-api-wrapper / (erstatt "localhost" med eget utviklingsmiljø). Du bør ikke se noe ennå, fordi wrapper ikke gjør noe enda. Hvis du ser en feil skjønt, dobbeltkryss koden.

Merk: Ikke glem å fjerne denne filen, eller tøm den ut, før du distribuerer til produksjonen!

3. Hvor å sende forespørsler

Det første du må trenge før du gjør en forespørsel til en API, er basisadressen som skal brukes. Denne nettadressen vil da ha ulike opplysninger lagt til den før du sender forespørselen.

I tilfelle av Envato Marketplace API bruker vi følgende nettadresse:

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

I denne nettadressen er det to hovedvariabler med informasjon: edgde og sett.

Stillingen av edgde representerer versjonen av API-en vi vil bruke, og i denne spesielt den nyeste versjonen. Det vil være det samme i alle forespørsler, men hvis noe endres og vi ønsket å bruke en eldre versjon, kan vi bytte ut det v3 i stedet for for eksempel.

Stillingen av sett representerer det faktiske datasettet vi ber om. Ordet "sett" er en plassholder, og vi erstatter den med de relevante detaljene når du foretar en bestemt forespørsel.

La oss legge til en eiendom av $ api_url til vår klasse med denne verdien:

  

Merk at vi har angitt at denne egenskapen er 'beskyttet'. Vi har gjort dette fordi vi ikke vil at nettadressen skal endres direkte med annen kode utenfor vår wrapper.

4. Lag en forespørsel

Før vi prøver å lage en spesifikk forespørsel, legger vi til en generisk metode i klassen vår som håndterer eventuelle forespørsler. Vi ringer det remote_request, og alt det trenger er en URL for å sende forespørselen til.

 beskyttet funksjon remote_request ($ url) // For det første, hvis nettadressen er tom, ikke send en forespørsel hvis (tom ($ url)) return false;  // Gjør forespørselen $ request = wp_remote_request ($ url); // Sjekk at WordPress var i stand til å sende forespørselen, ellers feil hvis (is_wp_error ($ request)) echo $ request-> get_error_message (); returner falsk;  // Dekode svaret slik at vi kan bruke det $ data = json_decode ($ request ['body']); hvis ($ request ['response'] ['code'] == 200) return $ data;  ellers return false; 

Legg merke til at vi igjen har angitt at denne metoden er 'beskyttet', for å hindre at det blir kalt direkte utenfor vår klasse.

Nå for å kunne teste at forespørselen virker, legger vi til vår første API-metode. I dette tilfellet går vi med random-nye-filer sett, som er den vi vil bruke senere i vårt eksempel plugin.

Legg til følgende metode i vår klasse:

 offentlig funksjon random_new_files ($ markedsplass) // Opprett en URL for denne forespørselen ved å bytte ut "set" plassholderen med settet og eventuelle nødvendige parametere. I dette tilfellet er sluggen på en Envato-markedsplass $ url = preg_replace ('/ set / i', 'random-new-files:'. $ Markedsplass, $ this-> api_url); // Send en forespørsel til API $ resultater = $ this-> remote_request ($ url); returnerer $ resultater; 

For å teste denne nye metoden, og i tillegg API-forespørselsmetoden, legger du til følgende linje i feilsøkingen index.php fil:

 ekko '
'. print_r ($ envato_api-> random_new_files ('themeforest'), true). '
';

Nå bør du få utdata i nettleseren din som ligner på dette:

 stdClass Object ([random-new-files] => Array ([0] => stdClass Object ([id] => 4860464 [item] => Empire - Business, Portfolio HTML 5 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 [salg] => 0 [rating] => 0,0 [kostnad] => 15,00) ... [9] => stdClass Object ([id] => 4852371 [item] => eplie | Mobil HTML / Css Porteføljesjablone ] => https://themeforest.net/item/eplie-mobile-htmlcss-portfolio-template/4852371 [user] => cosmincotor [thumbnail] => http://1.s3.envato.com/files/57831617 /thumbnail.png [salg] => 3 [vurdering] => 0,0 [kostnad] => 8,00)))

Forutsatt at du så noe som ovenfor, betyr det at det fungerer, og du har fått data tilbake fra API. Suksess!


Neste: Caching, Feilhåndtering og en Widget

Nå har vi fått grunnlaget for omslaget gjort, ting er i gang. I neste del skal vi fullføre wrappen og bygge en widget som bruker den.

Vær også oppmerksom på at mens dette pakkesettet bygges for Envato Marketplace API, kan det samme konseptet (og mye av den samme koden hittil) brukes til å lage en wrapper for enhver RESTful API.

Gi oss beskjed i kommentarene hvilke ideer du har for å jobbe med APIer og WordPress.