Kickstart je API kennis met behulp van Memes!
Wist je dat API's je werk een stuk makkelijker en interessanter kunnen maken? In dit artikel lees je hier meer over en gaan we een Meme maken met behulp van een API.
APIs everywhere
Je hebt de afkorting vast al eens langs zien komen op de digitale snelweg. API's? Dat is toch iets met software ontwikkelen en programmeren enzo? Toch?
API is een afkorting voor Application Programming Interface. Een API zou je kunnen omschrijven als een speciale manier om te communiceren met een applicatie.
In de praktijk doe je dit vaak met behulp van een script of programmeer taal.
Het is een essentieel ingrediënt voor het maken van tools en combineert data of functionaliteit van verschillende bronnen.
Tegenwoordig heeft vrijwel elk IT software product of dienst een vorm van API ondersteuning.
Dit is geen toeval! Het geeft ons meer mogelijkheden voor creatieve oplossingen aan te bieden en onze productiviteit te verhogen.
Een paar voorbeelden van concrete API toepassingen in mijn dagelijks leven als IT Engineer:
- Klanten helpen besparen op maandelijkse kosten door het combineren van on-premise Active Directory last logon data met Office 365 licentie gebruik.
- Repeterende taken automatiseren zoals het aanmaken van nieuwe mailboxen in Exchange Online
- Automatiseren van standaard acties bij ticket registratie en afhandeling in TOPdesk.
API Bootcamp
API's onderscheiden zich met name op basis van het protocol waarmee ze werken. Dit bepaald namelijk allerlei eigenschappen zoals de data en commando's die geaccepteerd worden.
De scope van dit artikel zijn de zogenaamde REST API's. Dit protocol is namelijk het meest gangbaar en populair op dit moment. REST (een afkorting van REpresentational State Transfer) is een web API en werkt met populaire industrie standaarden zoals HTTP en JSON.
Om snel up to speed te komen heb ik kort de meest relevante termen beschreven waar je mee te maken hebt in REST API land:
- Endpoint is de naam van de URL waarmee je communiceert. Bijvoorbeeld https://api.twitter.com
- Path is het relatieve pad voor de resource die je wilt benaderen. Meer hierover later in dit artikel.
- JSON (JavaScript Object Notation) is de meest populaire standaard voor versturen en ontvangen van data via een REST API.
- Method geeft het type verzoek aan.
- GET: Dit verzoek is voor het ophalen van server data.
- POST: Creeert een nieuwe resource (data) op de server.
- PUT: Update een resource op de server.
- DELETE: Verwijdert een resource op een server.
- Headers worden gebruikt om informatie over een bepaald verzoek te geven. Een header wordt bijvoorbeeld vaak gebruikt om authenticatie data in op te slaan.
- Body is de data die je wil versturen of ontvangen. In de body kun je het daadwerkelijke verzoek aangeven wat verstuurd moet worden.
Authenticatie zonder tranen
Normaal gesproken moet je eerst authenticeren voordat je gebruik kan maken van een API. Eigenlijk precies hetzelfde principe als inloggen op Twitter voordat je een Tweet kunt plaatsen.
We kunnen op 2 manieren authenticeren:
- Met een gebruikersnaam en wachtwoord (ook wel bekend als basic authenticatie)
- Met een geheim token
Het inloggen met een token maakt het mogelijk om je bijvoorbeeld te authenticeren met social media accounts zoals van Twitter of Facebook. De meest bekende implementatie hiervan is oAuth.
Om het voorbeeld simpel te houden zal ik alleen gebruik maken van basic authenticatie. Hierbij wordt via de header een key-value pair verstuurd met daarin de credentials om verbinding te maken met de API.
De stappen hiervoor zijn:
- Neem de string "username:password" en codeer deze in Base64. De dubbele punt tussen gebruikersnaam en wachtwoord moet hierin opgenomen worden.
- Zet hier de string Basic (gevolgd door een spatie) voor.
- Maak een header door de nieuwe key-value aan te maken. De key wordt Authorization en de value Basic met daarachter de gecodeerde credential string. Voorbeeld:
Authorization: Basic abcdefgh123456789z
Wees voorzichtig met deze header. Het keypair is alleen gecodeerd met Base64. Dit is geen encryptie en is om te zetten naar plain text. Zorg daarom altijd dat de communicatie met de API over een HTTPS verbinding plaatsvindt!
Omdat de stappen voor het aanmaken van een basic authenticatie header vaak hetzelfde zijn kun je hiervoor een PowerShell functie maken.
In onderstaand voorbeeld zie je hoe zo'n functie eruit kan zien. Tevens kun je zien hoe je met behulp van deze authenticatie header verbinding kunt maken met de API van GitHub en een lijst van repositories kunt opvragen.
Waar blijven de memes!?
We hebben gezien hoe we informatie (repositories in dit geval), kunnen opvragen via een API. Maar echt leuk wordt het als we data kunnen schrijven. Ik zal gebruik maken van de API van imgflip om dit te laten zien.
Zoals ik eerder al aangegeven had heeft een REST API voor ieder type verzoek een ander pad (Path). De imgflip API maakt gebruik van 3 verschillende paden:
- https://api.imgflip.com (Root endpoint)
- https://api.imgflip.com/get_memes (Informatie over beschikbare memes opvragen)
- https://api.imgflip.com/get_memes/caption_image (Nieuwe informatie in de vorm van een grappige tekst toevoegen aan een meme en deze publiceren)
In het volgende voorbeeld kun je zien hoe we via het verbinden met het /caption_image path onze eigen teksten kunnen toevoegen.
Het is onderverdeeld in 4 delen, hieronder een korte beschrijving van ieder onderdeel.
1. Het aanmaken van de variabelen voor het API pad wat we willen aanspreken met het type verzoek.
2. Het aanmaken van een PowerShell object met alle parameters die nodig zijn om de meme van een tekst te voorzien.
template_id: Dit template ID wordt teruggekoppeld door een verzoek op het /get_memes pad. Deze zijn ook terug te vinden in de top 100.
username: Gebruikersnaam van een geldig imgflip account. Je kunt zelf hier een gratis account aanmaken.
password: Wachtwoord voor het imgflip account.
text0: Tekst die bovenaan de meme moet komen te staan.
text1: Tekst die onderaan de meme moet komen te staan.
Zoals je misschien wel is opgevallen verwacht de imgflip API het gebruikersnaam en wachtwoord in de body van het verzoek. In de praktijk zul je zien dat de vereisten om correct te authenticeren kunnen afwijken. Normaal gesproken zul je dit echter kunnen terugvinden in de documentatie van de API.
3. We hebben in stap 2 een PowerShell object gemaakt. Deze zetten we om naar JSON formaat zodat de API het verzoek begrijpt.
4. Het daadwerkelijk uitvoeren van het API verzoek.
Don't give it a REST
Ik hoop dat dit artikel je inzicht heeft gegeven in wat een API is en hoe deze werkt.
We hebben gezien dat API's het mogelijk maken om op een andere manier te werken met lezen en schrijven van data naar software en dit de deur kan openen voor allerlei creatieve oplossingen.
Dus don't give it a REST en start vandaag nog met het maken van je eerste API meme :-)