WordPress REST API Hacking

WordPress REST API Hacking

6 jaar later

Presentatie

Wil je de presentatie van WordCamp Nederland nog even nalezen of de code voorbeelden zelf uitproberen?

In 2016 gaf Jeroen van Dijk op WordCamp Nederland 2016 een presentatie over de WordPress REST API. Toendertijd nog een plugin, en geen core-functionaliteit, is er inmiddels een hoop veranderd. In mijn talk kijk ik naar hoe het gebruik en de mogelijkheden van de REST API zich ontwikkeld hebben en wat er in de toekomst aan zit te komen.

Je kunt API’s gebruiken om het beheer van je website los te koppelen van externe platformen (bijvoorbeeld een CRM, of Product inventory systeem) of van het kanaal waarop je de website publiceert. Zo kun je bijvoorbeeld dezelfde content op telefoons, tablets en pc’s tonen, maar ook in apps, op smartwatches, handscanners of digitale reclameborden. Super flexibel dus.

Authenticatie, Filters en embeds

Tijdens de presentatie gaf ik een aantal voorbeelden van manieren waarop de WordPress REST API de afgelopen jaren door is ontwikkeld. Daar zitten veel opties waarmee je data efficiënter op kunt halen en veiliger kan authenticeren.

Application passwords en oAuth2.0

De REST API is niet alleen om gegevens uit te lezen, maar het kan van WordPress ook een platform maken om andere apparaten aan te sturen. Zagen bijvoorbeeld. Maar dan moet je de boel wel goed beveiligen.

Met WordPress 5.6 kwamen Application passwords. Hiermee kun je externe applicaties toegang geven tot WordPress via jou account, zonder je eigen wachtwoord te hoeven delen.

Zelf gebruiken we liever oAuth om mee te authenticeren. Dat is hetzelfde systeem als veel sites gebruiken om via je Google account of Facebook in te laten loggen. Het is gestandaardiseerd en biedt net wat meer veiligheid en controle.

Keuzeschema van gebruikssituaties oAuth en application passwords.
Keuzeschema van gebruikssituaties oAuth en application passwords.

Verder kon ik nog een klein geheim delen als het aankomt op het gebruik van een nonce om met de WordPress API te authenticeren. Er is namelijk een vrij onbekende manier om via JavaScript een deze code op te kunnen halen, in plaats van deze in de pagina te zetten. Hierdoor blijft de pagina die de gebruiker bezoekt cachebaar en is deze een stuk sneller.

Voorbeel van een admin-ajax nonce request.

Minder data

Bij een standaard request stuurt WordPress alles wat bekend is over een bericht op je site terug in het antwoord. Maar vaak is dat een stuk meer dan je nodig hebt op de pagina die je probeert te tonen.

Door _fields en _embed op te nemen in je verzoek aan de server kun je zorgen dat de hoeveelheid data die je ontvangt beter afgestemd is op wat je daadwerkelijk gaat gebruiken.

Voorbeeld van _fields en &embed in een REST API request.

Wil je nog een stapje verder gaan? Dan kun je van het context sleutelwoord in je schema echt helemaal zelf aangeven wat er in het server antwoord zit.

Ook kun je met GraphQL werken. Dit is interessant wanneer je bijvoorbeeld met React of Vue een frontend maakt, of een app bouwt. Je hebt dan wel een plugin nodig die dit mogelijk maakt op je website.

Tools

In de afgelopen zes jaar is het ecosysteem van de WordPress REST API flink uitgebreid. Zo hebben plugins als Advanced Custom Fields, Yoast SEO en Gravity Forms ondersteuning voor de API ingebouwd en zijn er nieuwe plugins ontstaan die helpen bij het inrichten en debuggen van koppelingen met je site.

REST API Log

De REST API Log geeft inzicht in alle requests die op je site worden gedaan, ook vanuit externe platformen. Hierbij kun je snel zien waar de langzame processen in je site zitten, of waarom de koppeling van een extern platform niet werkt zoals je zou verwachten.

Query Monitor

Sinds versie 3.7.0 ondersteund Query Monitor, een populaire debug tool voor WordPress, ook de WordPress REST API. Hierdoor kun je van alle aanvragen op de site zien welke database queries er hebben plaatsgevonden, welke het langst duren en of er dubbelingen in zitten. Het optimaliseren van je website wordt hiermee een stuk eenvoudiger.

WP REST API Controller

Met behulp van WP REST API Controller stel je via de WordPress admin interface in welke endpoints toegankelijk moeten zijn en welke niet. Ook kun je eenvoudig metadata toevoegen en verwijderen. Handig binnen een low-code platform zoals WordPress.

Presentatie

Wil je de presentatie van WordCamp Nederland nog even nalezen of de code voorbeelden zelf uitproberen?