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.
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 ...
Å 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.
Å lage en wrapper for en API gir oss mulighet til å være vennlig for alle. La meg forklare:
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:
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.
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.
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.
Å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.jsonI denne nettadressen er det to hovedvariabler med informasjon:
edgde
ogsett
.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 detv3
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.