7. Serverless & Edge
7. Serverless & Edge
Je vindt voor elke oefening aparte startbestanden. Oefening 1 is gebaseerd op de oefening van les 2 en oefening 2 is gebaseerd op het lesvoorbeeld van les 5, maar zonder de cors middleware. Vergeet niet de Prisma migrations uit te voeren en Docker container op te zetten.
Startbestanden
Oefening 1: API omzetten naar een serverless API
Je hebt 2 routes in de API, maak voor beide routes serverless functions.
Je kan het voorbeeld niet letterlijk volgen, je zal 2 mappen moeten aanmaken voor de functies en 2 bestanden met telkens dezelfde naam als de map (books en series). Je verplaatst de inhoud van de source map naar een 3de submap 'api' (zoals in het voorbeeld). In je functions/books/books.ts en functions/series/series.ts verwijs je dan naar bijvoorbeeld api/routes/.../books.ts. De index.ts heb je niet meer nodig.
Als je test merk je dat je nu http://localhost:8888/.netlify/functions/books/books moet gebruiken. Dit kan je oplossen door voor beiden het pad in routes/books/books.ts en routes/serieses/serieses.ts aan te passen naar '/'.
Oefening 2: Edge of Serverless functie die een request proxied naar API zonder CORS
Maak een edge functie die een request proxied naar de api in de startbestanden. De werking van de api zelf daar kan je voor terugkijken in les 5, de startbestanden voor deze oefening zijn namelijk het uitgewerkt lesvoorbeeld van les 5. Zorg ervoor dat enkel GET requests toegestaan zijn. Je doet de nodige installs in de sessionApi (inclusief Docker compose en Prisma migrations), start deze op, en verwijst in de proxyApi naar de url van de sessionApi. TIP: werk in 2 instanties van je IDE om je niet te vergissen van folder. Als je naar het voorbeeld kijkt wordt op het einde een response teruggestuurd, hierin moet je specifieren dat je enkel GET functies toelaat, je voegt dezelfde headers toe als in de CORS middleware (controleer ook of je request een OPTIONS request is!).
T.o.v. het voorbeeld moet je nog een kleine aanpassing doen. Bij het wachten op de result checkt de methode of het geen DELETE is, dit mag ook niet voor een OPTIONS request:
if (req.method !== 'DELETE' && req.method !== 'OPTIONS') {
result = await proxyResult.json()
}Weerbericht ophalen op basis van geodata
Schrijf een nieuwe edge functie waarmee het weer opgehaald kan worden via Open Weather. Je hebt een API key nodig voordat je deze API kan aanspreken (of gebruik de key die je gebruikt heb in frontend les 4 of in interactieve websites). Op https://openweathermap.org/api/one-call-api kan je informatie vinden over hoe de API gestructureerd is.
Om de API key uit te lezen uit de environment variables kan je onderstaande code gebruiken.
Deno.env.get('NAAM_VAN_DE_ENV_VARIABLE')Het weerbericht moet gepersonaliseerd worden op basis van de locatie van de gebruiker. Doe dit aan de hand van de geo property uit de context parameter.
Voeg tenslotte de optie toe om de lengte en breedtegraad uit de geodata te overschrijven via query parameters. Onderstaande video toont de werking van de functie.