Man behøves ikke have kendskab til C# eller have et stort IT-miljø for at bygge et API. I dag ser vi nærmere på hvordan man kan lave et HTTP API med Azure og PowerShell.
Vores API vil returnere en tilfældig Chuck Norris joke vha. af en HTTP-forespørgsel. Før vi dykker ned i selve koden og implementeringen, skal vi se lidt på de forskellige elementer som vi skal bruge.
Application Programming Interface (API), er en softwaregrænseflade, der tillader et stykke software at interagere med andet software. Et API kan betegnes som en måde at tilbyde tjenester, herunder data, fra et system til det andet system.
Et eksempel – tænk på en mobilapp som Instagram der bruger kameraet i din mobiltelefon. Udviklerne af Instagram behøves ikke at programmere hvordan telefonen præsentere eller tager billeder med kameraet, de udnytter blot et API (framework) som Apple (iOS) eller Google (Android) udstiller i styresystemet.
Serverless computing er det seneste buzzword i IT-verdenen, og Azure Functions er Microsofts svar på en moderne serverløs arkitektur, der leverer hændelsesdrevet computing i skyen. Serveruafhængige arkitekturer er særdeles skalerbare og hændelsesdrevne som kun bruger ressourcer, når en specifik funktion eller hændelse sker.
Med Azure Functions kan man udvikle og køre kode i skyen, uden besværet med at administrere servere eller containere, derfor kalder man det serverless computing. Det lader udviklere fokusere på at bygge appfunktionalitet uden at bruge tid på løbende administration af servere og infrastruktur.
Function-as-a-Service (FaaS) er et udtryk for en serverløs arkitektur. Softwareudviklere kan udnytte dette til at implementere og køre en individuel “funktion”, handling eller forretningslogik uden kompleksiteten af servere og netværk. Selvom man siger ”serverløs”, er der stadig en eller flere servere bagved, det er dog cloududbyderen som står for installation, planlægning af kapacitet og serveradministration.
Azure Functions understøtter flere programmeringssprog, og udviklerne bestemmer selv hvilket sprog de vil benytte i deres funktioner.
Med Microsoft Azure er det nemt at drage fordel af Function-as-a-Service (FaaS). Her er nogle af de funktioner der findes i Azure Functions:
For at udvikle og lave funktioner i Azure Functions, skal man have et aktiv Azure abonnement samt en Azure Storage konto. Når man udarbejder en funktion, bliver der oprettet 3 logiske enheder for hhv. deployment, administrering og delte ressourcer. Hver enhed fungerer som en mikroservice.
Her er et par simple eksempler på hvad en funktion kan:
Funktioner kan blive aktiveret på forskellige måder, såsom:
Overstående udløsere definerer om en funktion skal aktiveres. Man bør som udgangspunkt holde sig til en udløser pr. funktion.
Function Bindings gør det muligt for funktioner at modtage input parametre og returnerer et svar tilbage eller sende det videre i processen. Dette gør at man kan opbygge sine funktioner modulært.
Azure Functions gør udviklingsprocessen mere produktiv og lader dig starte serverløse applikationer i Azure. Funktionerne hjælper med at processere data, kordinere Internet-of-Things (IoT) trafik eller bygge små API’er og microservices. Azure Functions passer perfekt til opgaver såsom behandling af billeder, behandle forskellige ordre, systemvedligeholdelse eller køre planlagte opgaver.
Lad os tage et kig på to eksempler.
Før vi går i gang med at lave vores API, har vi brug for en Azure subscription.
Microsoft tilbyder en prøveperiode på 90 dage, eller op til 1300 kr, læs mere om det her.
Lad os starte med at oprette en ressource i Azure kaldet “Function App“. Denne ressource vil indeholde PowerShell koden og de udløsere som aktivere funktionen.
Efter at vi har oprettet skallen (Function App) til det nye API, skal vi nu tilføje en funktion og udløseren. I dette eksempel bruger vi en HTTP-udløser, og samtidigt gør det muligt for alle at kontakte API’et uden at man skal angive bruger eller kodeord.
Koden vi bruger retunerer en tilfældig Chuck Norris joke og er skrevet i PowerShell. Kopier koden, så vi kan bruge den i næste afsnit.
#1. Import .NET assembly.
using namespace System.Net
#2. Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
#3. Set jokes in an array.
$ChuckNorrisJokes = @(
"Chuck Norris does not wear a condom because there is no protection from Chuck Norris.",
"Chuck Norris can play the violin with a piano",
"Chuck Norris don't get cancer, cancer get Chuck Norris.",
"Chuck Norris can pull a hat out of a rabbit.",
"Chuck Norris can finish Mario Bros without using the jump button."
)
#4. Get random number between 0 and 4. Then return value from the jokes array.
$Body = $ChuckNorrisJokes[(Get-Random -Minimum 0 -Maximum 4)]
#5. Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $Body
})
Det eneste der mangler, er at uploade koden til den nye funktion. Lad os se nærmere på hvordan vi gør dette.
Web-adressen til vores API bliver konstrueret på baggrund af API- og funktionsnavnet, i dette eksempel vil det se således ud “https://zwablechucknorrisapi.azurewebsites.net/api/Jokes“.
Vi starter med at teste vores API igennem en browser. Tilgå URL’en i browseren.
Lad os prøve at teste vores API vha. PowerShell. Åben en PowerShell terminal og kør følgende kode.
Invoke-RestMethod -Method Get -Uri "https://zwablechucknorrisapi.azurewebsites.net/api/Jokes"
Det burde give dette resultat.
Med Azure Functions er det nemt at udvikle microservices. Traditionel applikationsudvikling kræver ofte en kompleks IT-infrastruktur, der er dyr og tidskrævende at vedligeholde, det løser Microsoft på en elegant måde. Hos Zwable udnytter vi selv tjenester som Azure Functions til at automatisere store dele af vores infrastruktur så vi kan levere “infrastructure as code” til vores kunder. Er du interesseret i at høre mere, så står vi selvfølgelig klar til en uforpligtende samtale.