Sammanfattning - "Stå-upp"-vlogg (2024), del 1
Inspelningen inleder 1DV026:s sista kursblock, kursvecka 16-19.
Från webbapplikationer till webbtjänster
Section titled “Från webbapplikationer till webbtjänster”Kursens sista block handlar om webbtjänster i stället för webbapplikationer, en skillnad som introducerades i kursvecka 6. Blocket omfattar egentligen fem veckor, eftersom den sista veckan är examination av B3. Fokusera ändå först på att göra klart realtidsapplikationen B2, och gå vidare hit när den är inlämnad.
Webbtjänsterna utformas RESTful: URL:erna utformas på ett särskilt sätt, och HTTP-metoderna
används för det de är till för, till exempel DELETE för att ta bort, PUT för att ersätta och
PATCH för att modifiera en resurs. Hittills har kursen bara använt GET och POST, eftersom
HTML-formulär bara stöder dem. Utan vyer kan hela HTTP användas, vilket gör koden mer logisk. Det
här är en introduktion; detaljerna kommer i årskurs två.
Att skriva en webbtjänst är på sätt och vis enklare än en webbapplikation. Det finns inget användargränssnitt att ta hänsyn till, utan HTTP-protokollet och statuskoderna är gränssnittet, och i den här kursen skickas bara JSON tillbaka. I B3 skriver du ingen klient alls, utan testar tjänsterna med till exempel Postman.
Autentisering med JWT
Section titled “Autentisering med JWT”Det som blir svårare är autentisering och auktorisering, eftersom det inte längre finns något inloggningsformulär. Grundidén är densamma: användaren talar om vem den är och visar vid varje anrop att den har rätt att göra det den försöker göra, som ett passerkort. I stället för sessionscookies används JSON Web Tokens (JWT).
B3 - Picture It
Section titled “B3 - Picture It”B3 består av två tjänster du skriver själv, och en tredje som redan finns:
- Auth service hanterar användare och inloggning och har en egen databas.
- Resource service hanterar bilderna och har en egen databas.
- Image service lagrar själva bilderna och är redan driftsatt.
nginx fungerar som reverse proxy och skickar anrop till rätt tjänst beroende på sökvägen, precis som tidigare. Båda tjänsterna körs i PM2 på samma server, men skulle lika gärna kunna ligga på olika maskiner, skrivas i olika språk och använda olika databaser. Här skrivs båda i Express med MongoDB för enkelhetens skull.
Om resource-tjänsten skulle fråga auth-tjänsten vid varje anrop om användaren är inloggad skulle auth-tjänsten belastas hårt. I stället signerar auth-tjänsten en JWT med en asymmetrisk nyckel, och resource-tjänsten kan själv verifiera signaturen. Det är kanske den mest avancerade delen av uppgiften, men inte svår när man väl förstår koncepten. Exemplen “RESTful Tasks” och “RESTful Tasks with JWT” finns att utgå från.
Tips från handledningen
Section titled “Tips från handledningen”- Låt inte PM2 krascha i en loop. Kraschar applikationen, till exempel för att anslutningssträngen till databasen saknas, startar PM2 om den gång på gång och loggar varje fel. Till slut kan loggfilerna fylla disken, och då beter sig servern märkligt. Stoppa processen tills du har hittat felet.
- Se upp med typografiska citattecken. Klipper du ut och klistrar in en miljövariabel kan raka
citattecken (
") ha ersatts av böjda (”), och då fungerar den inte. Sådana fel är mycket svåra att hitta. - B2 får hårdkoda ett projekt. Realtidsapplikationen ska inte ha inloggning via GitLab (OAuth) eller låta användaren välja projekt, utan kan utgå från ett enda projekt som skickar webhooks. Det är inte realistiskt, men uppgiften handlar om att lära sig webhooks.