Bij het bouwen van een website of webtoepassing is het een vrij algemene vereiste dat u gegevens van de site of applicatie van derden moet invoeren. Als die site of applicatie een API heeft, is dit een uitstekende manier om de benodigde gegevens te verkrijgen. Laten we daarom eens kijken hoe dit met WordPress kan worden gedaan.
Voordat we ingaan op de kern van de zaak, laten we ervoor zorgen dat we allemaal op de hoogte zijn van een aantal dingen, te beginnen met wat een API is.
Voor de doeleinden van deze zelfstudie, wanneer we "API" (application programming interface) zeggen, bedoelen we specifiek wat Wikipedia als een "Web API" classificeert:
Een web-API aan de serverzijde is een programmatische interface voor een gedefinieerd berichtsysteem met een verzoekrespons, meestal uitgedrukt in JSON of XML, dat via het web wordt weergegeven - meestal via een HTTP-gebaseerde webserver.
Eenvoudiger gezegd: een API is een manier voor de ene applicatie om een andere applicatie om vooraf gedefinieerde informatie te vragen in (meestal) JSON- of XML-formaat, via een standaard web-URL.
Begrepen? Oké, volgende ...
Het aanvragen van een API kan een aantal stappen omvatten en u wilt misschien extra stappen toevoegen zoals foutcontrole, caching, validatie, enz..
Wikipedia definieert een Wrapper-functie als volgt:
Een wrapper-functie is een functie in een computerprogramma waarvan het hoofddoel is om een tweede functie aan te roepen met weinig of geen extra berekening. Dit staat ook bekend als methode delegatie. Wrapper-functies kunnen voor een aantal doeleinden worden gebruikt.
Die definitie kan ervoor zorgen dat het een beetje lijkt alsof wrappers slechts overbodige code zijn, maar ze zijn er eigenlijk helemaal niet van.
Door een wrapper voor een API te maken, kunnen we vriendelijk zijn voor iedereen. Laat het me uitleggen:
Wrappers maken het omgaan met API's ontwikkelaarvriendelijk en API-vriendelijk.
Dus de specifieke dingen die onze API te verwerken krijgt, zijn:
We zullen deze dingen ook op een WordPress-vriendelijke manier doen, zoals het gebruik van transiënten voor caching, en wp_remote_request
voor het verzenden van de API-aanvragen.
De API die we voor deze zelfstudie gaan gebruiken, is de Envato Marketplace API. Deze API biedt informatie over de items en gebruikers op de Envato-marktplaatsen, zoals ThemeForest, CodeCanyon en anderen.
We baseren onze ontwikkeling op Public Sets, te zien in de Envato Marketplace API-documentatie. Let ook op de TTL-kolom (time to live), die in wezen de "snelheidslimiet" voor deze API is. Omdat de gegevens alleen met deze frequentie veranderen, heeft het geen zin om een bepaalde set vaker te vragen dan de opgegeven TTL.
Laten we beginnen met het bouwen van de basisklasse voor communicatie met deze API.
Omdat dit uiteindelijk in een voorbeeldplug-in zal zijn, wat we later zullen zien, laten we die bestandsstructuur maken en de API-wrapper binnenin bouwen.
Onze plug-in toont de resultaten van de API-set "random-new-files", dus we noemen het "Wptuts + Random New". Dus binnenin je wp-content / plugins / map, ga je gang en maak een map aan met de naam wptuts-random-new.
Maak nu in die map een nieuwe map genaamd Envato-api-wrapper, en een bestand binnen dat gebeld class-Envato-api-wrapper.php. Deze hele map kan dan worden gekopieerd naar andere projecten die deze API in de toekomst ook moeten gebruiken.
Open de * Class-Envato-api-wrapper.php bestand en laten we beginnen.
Laten we eerst onze klas definiëren:
We zullen ook een eenvoudige manier nodig hebben om deze verpakking te testen terwijl we deze bouwen, zonder alle WordPress te hoeven laden. Dus wat ik heb gedaan, is gewoon een maken
index.php
bestand in de Envato-api-wrapper directory, met de volgende inhoud:Nu zou je moeten kunnen bladeren naar
http: // localhost / wp-content / plugins / wptuts-random-new / Envato-api-wrapper /
(vervang "localhost" door uw eigen ontwikkelomgeving). Je zou echter nog niets moeten zien, want wrapper doet nog niets. Als u echter een foutmelding ziet, controleert u de code nogmaals.Notitie: vergeet niet om dit bestand te verwijderen of uit te sluiten voordat u het in productie gaat nemen!
3. Waar te verzenden verzoeken
Het eerste dat u nodig heeft voordat u een aanvraag voor een API indient, is de basis-URL die moet worden gebruikt. Aan deze URL wordt vervolgens verschillende informatie toegevoegd voordat het verzoek wordt verzonden.
In het geval van de Envato Marketplace API gebruiken we de volgende URL:
http://marketplace.envato.com/api/edge/set.jsonIn deze URL zijn er twee belangrijke variabele stukjes informatie:
edgde
enreeks
.De positie van
edgde
staat voor de versie van de API die we willen gebruiken, en in dit specifiek de meest recente versie. In alle aanvragen is dit hetzelfde, maar als er iets verandert en we een oudere versie willen gebruiken, kunnen we het omruilenv3
in plaats daarvan bijvoorbeeld.De positie van
reeks
staat voor de feitelijke dataset die we vragen. Het woord 'set' is een tijdelijke aanduiding en we zullen het vervangen door de relevante details bij een specifiek verzoek.Laten we een eigenschap toevoegen van
$ api_url
naar onze klas met deze waarde:Houd er rekening mee dat we hebben aangegeven dat deze eigenschap '
beschermde
'. We hebben dit gedaan omdat we niet willen dat de URL rechtstreeks wordt gewijzigd door andere code buiten onze verpakking.4. Een verzoek indienen
Voordat we een specifiek verzoek proberen in te dienen, voegen we een generieke methode toe aan onze klas die het verzoek kan verwerken. We zullen het noemen
remote_request
, en alles wat nodig is, is een URL om het verzoek naartoe te sturen.beschermde functie remote_request ($ url) // Ten eerste, als de URL leeg is, stuur dan geen verzoek als (empty ($ url)) return false; // Maak de request $ request = wp_remote_request ($ url); // Controleer of WordPress het verzoek kon verzenden, anders error if (is_wp_error ($ request)) echo $ request-> get_error_message (); return false; // Decodeer het antwoord zodat we het kunnen gebruiken $ data = json_decode ($ request ['body']); if ($ request ['response'] ['code'] == 200) return $ data; else return false;Merk op dat we opnieuw hebben aangegeven dat deze methode is '
beschermde
', om te voorkomen dat deze direct van buiten onze klas wordt gebeld.Om te kunnen testen of het verzoek werkt, voegen we onze eerste API-methode toe. In dit geval gaan we met de
random-new-bestanden
set, die we later zullen gebruiken in onze voorbeeldplug-in.Voeg de volgende methode toe aan onze klas:
openbare functie random_new_files ($ marketplace) // Maak een URL voor dit verzoek door de tijdelijke aanduiding 'set' te vervangen door de set en eventuele vereiste parameters. In dit geval is de naaktslak van een Envato-marktplaats $ url = preg_replace ('/ set / i', 'random-new-files:'. $ Marketplace, $ this-> api_url); // Stuur een verzoek naar de API $ results = $ this-> remote_request ($ url); return $ resultaten;Om deze nieuwe methode te testen, en bij uitbreiding de API-aanvraagmethode, voegt u de volgende regel toe aan onze foutopsporing index.php het dossier:
echo ''. print_r ($ envato_api-> random_new_files ('themeforest'), true). '';Nu zou je gelijkaardige uitvoer in je browser moeten krijgen:
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] => ontwerpthema's [thumbnail] => http://1.s3.envato.com/files/57931279/thumb-html. png [sales] => 0 [rating] => 0.0 [cost] => 15.00) ... [9] => stdClass-object ([id] => 4852371 [item] => eplie | Mobiele HTML / CSS-sjablonen [url ] => https://themeforest.net/item/eplie-mobile-htmlcss-portfolio-template/4852371 [user] => cosmincotor [thumbnail] => http://1.s3.envato.com/files/57831617 /thumbnail.png [verkoop] => 3 [rating] => 0,0 [kosten] => 8,00)))Ervan uitgaande dat u zoiets als het bovenstaande zag, betekent dit dat het werkt en dat u gegevens terug krijgt van de API. Succes!
Volgende: Caching, Foutafhandeling en een widget
Nu hebben we de basis van de wrapper gekregen, de zaken zijn aan de gang. In het volgende deel maken we de wrapper af en bouwen we een widget die deze gebruikt.
Houd er ook rekening mee dat, terwijl deze wrapper wordt gebouwd voor de Envato Marketplace API, hetzelfde concept (en veel dezelfde code tot nu toe) kan worden gebruikt om een wrapper voor elke RESTful API te maken..
Laat ons in de reacties weten welke ideeën u heeft voor het werken met API's en WordPress.