Webbserverprogrammering 1 · område 8 · v.15–17
Driftsättning, API och externa data
Applikationen lämnar din dator. Den får en riktig adress med HTTPS, där andra kan nå den, och den lär sig prata med andra servrar: den hämtar data från ett externt API, och har ett eget som svarar med JSON. Området är kort och intensivt – och ligger före slutprojektet med avsikt, så att ingen driftsätter för första gången kvällen före sista inlämningen.
- 20 april Driftsatt – alla, under passet Etapp 1, driftklar på din egen dator, ska vara klar före passet.
- 28 april Redovisning: applikationerna live Tre minuter var, på din adress.
- 2 maj Projekt 3 – Driftsatt applikation med API-funktion, kl 23:59 Adressen och repots adress lämnas i itslearning. Inget prov – applikationen och redovisningen är examinationen.
Tjugoett steg, uppdelade efter lektionerna. Följ den här om du missat ett pass.
Projekt 3 Driftsatt applikation med API-funktionFyra etapper med datum, en kontroll per etapp, och kraven för E, C och A med kryssrutor där de hör hemma.
1. Fem lektioner
Tre genomgångar, ett arbetspass och en redovisning. Kolumnen längst till höger säger vad du gör om du var borta.
| # | Datum | Längd | Vad vi gör | Missade du passet? |
|---|---|---|---|---|
| 57 | ons 14 apr | 45 min | Från utvecklingsmiljö till drift. Development mot Production, inställningarna som miljövariabler, och migrationerna på servern. Projekt 3 delas ut, och du skaffar ett Azure-konto. | Guiden steg 1–6 och etapp 1 – klar före tisdag |
| 58 | tis 20 apr | 85 min | Driftsättning. Webbappen i Azure, inställningarna, zippen – och loggen när det går fel. Alla driftsätter, och länken delas i klassen. | Guiden steg 7–12 och etapp 2 |
| 59 | ons 21 apr | 45 min | JSON, API:er och samspelet klient–server. Ett eget API, en klient mot Wikipedia, och vad sidan gör när API:et inte svarar. | Guiden steg 13–19 |
| 60 | tis 27 apr | 85 min | Arbetspass. API-funktionen, driftdokumentationen, och kontrollen av att inga hemligheter ligger i repot. | Etapp 3, och guiden steg 20–21 |
| 61 | ons 28 apr | 45 min | Redovisning: applikationerna live. Tre minuter var, på din adress. | Etapp 4, med redovisningens fem punkter – säg till, så får du redovisa senare |
2. Det här ska sitta
- Du kan säga vad som skiljer Development från Production i ditt projekt, och varför user-secrets inte finns på servern.
- Du kan skriva en inställning som miljövariabel, med dubbla understreck.
- Du kan förklara varför driften provas med det publicerade programmet, och inte
med
dotnet run. - Du kan driftsätta din applikation så att någon annan kan göra om det efter din beskrivning.
- Du kan läsa ett REST-anrop: resurs, metod, statuskod och innehåll.
- Du kan förklara varför ett API lämnar ut ett eget svarsobjekt och inte entiteten, och varför ett fel från ett API ska vara JSON.
- Du kan säga vad som händer med din sida när ett externt API inte svarar, och vad tidsgränsen gör.
- Du kan visa att inga lösenord ligger i ditt repo – nu eller i historiken.
3. Det som inte följer med
Mycket av det som fungerar på din dator gör det för att din dator har något servern saknar. Det här är skillnaderna som ställer till det:
| På din dator | På servern | Guiden |
|---|---|---|
launchSettings.json säger Development | Filen finns inte. Miljön är Production | Steg 1 |
| Lösenorden ligger i user-secrets | user-secrets läses inte. Lösenorden måste komma som inställningar | Steg 2 |
Du kör dotnet ef database update | Det finns inget dotnet ef. Applikationen får köra migrationerna själv | Steg 3 |
| Felen syns i terminalen och i webbläsaren | Felsidan visar inget. Felet finns i loggen – om du slagit på den | Steg 11 |
| Databasen ligger i projektmappen | Den måste ligga i D:\home, annars är den borta efter nästa publicering | Steg 9 |
Guidens steg 6 kör det publicerade programmet på din egen dator, i Production, med inställningarna som miljövariabler. Fungerar det där har du uteslutit hälften av det som kan gå fel på servern. Fungerar det inte där fungerar det inte på servern heller – och felet tar fem minuter att hitta hemma i stället för ett helt pass.
4. Kom igång
Du börjar inte om. Området bygger vidare på ditt projekt från område 7.
| Steg | Det du gör |
|---|---|
| 1 | Starta ditt projekt. Logga in som din admin, logga ut, och försök nå en sida som ändrar data – du ska hamna på inloggningen. |
| 2 | Committa och pusha allt. Det du driftsätter ska vara det som ligger i repot. |
| 3 | Skaffa ett konto i Azure for Students, med din skolmejl. Gör det första dagen – verifieringen kan ta tid. |
| 4 | Läs uppgiften, och fyll i guidens översättningstabell. |
| 5 | Gör etapp 1 före tisdag 20 april. |
Publicera och packa, från projektmappen:
dotnet publish -c Release -o ..\publicera
tar -a -c -f ..\projekt.zip -C ..\publicera *
Så ser det ut bredvid din projektmapp efteråt. Varken publicera eller
zippen hör hemma i repot:
DittProjekt/ repot – här ändras ingenting
publicera/ det som ska köras på servern
projekt.zip publicera/ packad, med innehållet i roten
5. Felsökning
Sök på felmeddelandet du fick, eller på ett ord ur det. Kolumnen var säger om felet syns på din dator, i Azure, eller i ditt API. Den fullständiga tabellen står i guiden.
15 rader
| Symptom | Var | Trolig orsak | Åtgärd |
|---|---|---|---|
Hosting environment: Development fast du satt Production | din dator | launchSettings.json sätter tillbaka Development | dotnet run --no-launch-profile. Steg 2. |
Sidan utan CSS, .styles.css svarar 500 | din dator | dotnet run i Production | Prova med det publicerade programmet. Steg 6. |
Det gick inte att hitta en del av sökvägen från Compress-Archive | din dator | Sökvägen är längre än 260 tecken | tar. Steg 5. |
SQLite Error 14: 'unable to open database file' | båda | Databasens mapp finns inte, och migrationerna är avstängda | Databas__MigreraVidStart = true. Steg 3. |
skapades inte: lösenordet saknas i konfigurationen | båda | Inställningens namn stämmer inte | Dubbla understreck. Jämför med nyckeln i user-secrets. |
skapades inte: Passwords must have at least one digit | båda | Lösenordet bryter mot reglerna | Minst åtta tecken, en siffra, en versal. |
Nästa dotnet run är också i Production | din dator | Miljövariabeln lever kvar i terminalfönstret | $env:ASPNETCORE_ENVIRONMENT = $null, eller ett nytt fönster. |
| Azures väntsida i stället för din applikation | Azure | Zippen kom inte upp, eller innehållet ligger i en undermapp | Öppna zippen: web.config ska ligga i roten. Steg 10. |
| HTTP Error 500.30 – ASP.NET Core app failed to start | Azure | Applikationen kastade ett undantag när den startade | Log stream. Steg 12. |
| Datan är borta efter en ny publicering | Azure | Databasen ligger utanför D:\home | Anslutningssträngen. Steg 9. |
| Första sidan tar lång tid | Azure | Gratisnivån stänger av appen efter en stund utan trafik | Normalt. Den vaknar vid nästa förfrågan. |
| Ett id som inte finns ger en HTML-sida | ditt API | Results.NotFound() – en tom 404 görs om till din inte-hittad-sida | Results.Problem. Steg 15. |
| Rutan med datan från det externa API:et syns aldrig | ditt API | Fel adress, eller svaret har andra fältnamn | Öppna API-adressen i webbläsaren. Stämmer fälten med ditt objekt? |
| Sidan tar länge att visa när API:et inte svarar | ditt API | Ingen tidsgräns – förvalet är 100 sekunder | klient.Timeout. Steg 16. |
git grep hittar ett lösenord | repot | Det står i koden eller i appsettings.json | Flytta det till user-secrets, och byt lösenordet i drift. Steg 20. |
6. Orden
Orden nedan används från och med nu utan förklaring, och kommer tillbaka i slutprovet.
Ordträning
| Ord | Betyder |
|---|---|
| miljö | Development på din dator, Production på servern. Styrs av ASPNETCORE_ENVIRONMENT. |
| miljövariabel | En inställning som operativsystemet ger programmet när det startar. Ligger utanför koden och utanför repot. |
| dotnet publish | Bygger det som ska köras på servern – utan källkod, utan testprojekt. |
| driftsättning | Att få en applikation att köra på en server, åtkomlig för andra. |
| App Service | Azures tjänst för webbapplikationer. Du lämnar programmet, Azure kör det. |
| logg | Det applikationen skriver om vad den gör. I drift det enda stället där ett fel syns. |
| API | Application Programming Interface – ett gränssnitt som program anropar, inte människor. |
| REST | Ett sätt att bygga API:er: adresserna är resurser, och HTTP-metoden säger vad som ska göras. |
| JSON | Textformatet API:er oftast svarar med. {"titel":"Gökboet","ar":1975}. |
| statuskod | Siffran i svaret som säger hur det gick. 200 gick bra, 404 finns inte, 500 servern föll. |
| problem details | Standardformen för ett fel i ett JSON-API: typ, rubrik, statuskod och förklaring. |
| HttpClient | Klassen som skickar förfrågningar från din server till en annan. |
| typad klient | En egen klass som får en färdig HttpClient injicerad, registrerad med AddHttpClient. |
| tidsgräns | Hur länge HttpClient väntar på ett svar innan den ger upp. Förvalet är 100 sekunder. |
| svarsobjekt | Det ett API lämnar ut, i stället för entiteten. Bestämmer vilka fält som blir offentliga. |