En webbtjänst för att visa väderprognos och historiskt väder
Du skall bygga en webbtjänst som hämtar väderprognosen för ett specifikt område. Du skall även hämta historisk väderdata och presentera det.
Du bygger din kod dels för att presentera resultatet i en traditionell webbsida och dels via ett REST API som ger svaren i JSON.
#Förkunskaper
Du har löst uppgiften “En webbtjänst för att geotagga ip-adresser”.
#Introduktion och förberedelse
Följande steg hjälper dig att komma igång med uppgiften.
#Väder API
Vi använder OpenWeather Weather API för att hämta väderdata.
Du behöver skaffa dig ett konto på OpenWeather.
#MVC
Koda enligt MVC.
Tänk tunna kontrollers.
Tänk dumma vyer,
Tänk återanvändbara modell-klasser, i rimlig nivå till uppgiftens omfattning.
#DI
Du skall lägga in någon del/klass som en tjänst i ramverkets $di. Välj själv vilken/vilka koddelar du lägger i $di. Man kan lägga en klass i $di och den klassen kan i sin tur använda sig av andra klasser.
När du gör detta, fundera på vad som är skillnaden mellan tjänster som ligger i $di och de klasser som instansieras på vanligt sätt.
#Enhetstesta
Se till att alla dina klasser omfattas av enhetstester. Försök nå komplett kodtäckning men välj ambitionsnivå kontra tiden du har att tillgå.
#Extern tjänst för geotagga ip-adresser
Du har sedan tidigare använt en extern tjänst för att översätta en ip-adress till en geografisk position. Du skall fortsätta att använda den i uppgiften.
#Extern tjänst för kartor
Du skall använda en karttjänst för att visa upp kartor som visar det området som är aktuellt.
#Krav
Skapa en sida där du kan mata in en platsangivelse och få tillbaka en rapport för kommande väder eller om föregående väder (föregående 30 dagar).
Platsangivelsen kan vara en ip-adress eller en geografisk position. Den geografiska positionen anges på det/de format som du bestämmer. Optionellt löser du så man även kan mata in ett ortsnamn.
När du anropar vädertjänsten så skall du kunna skicka flera requester samtidigt (parallellt, inte seriellt).
Alla dina API-nycklar sparar du i en konfigurationsfil under katalogen
config/
.Minst en del av din kod, en klass eller kombination av klasser, skall sparas som en tjänst i $di och användas via $di.
Visa tydliga felmeddelanden om det som matas in inte kan översättas till en giltig position, eller om väder inte kan ges för positionen.
Om allt går bra så visar du vädret, tillsammans med information om platsen/positionen samt en karta över platsen.
Ovan sida lägger du till i navbaren.
Skapa ett REST API som erbjuder samma funktionalitet. Svaret blir en JSON-struktur med samma/liknande innehåll och resultat som ovan.
Bygg en dokumentationssida för ditt REST API där du visar och förklarar hur det fungerar.
Lägg till enhetstester för din kod. Försök nå 100% kodtäckning, men det är inte ett absolut krav.
Kör
make test
för att kolla att du inte har några valideringsfel och att testfallen går igenom.Gör en
dbwebb publish redovisa
och kontrollera att det fungerar på studentservern.Committa alla filer och lägg till en tagg (3.0.*).
Pusha upp repot till GitHub, inklusive taggarna.
#Extrauppgifter
Om du har tid och lust så gör du följande extrauppgifter.
- Kan du lösa ortsnamn så att de kan användas för att slå upp vädret?
- Har du behov av att cacha information? Kanske borde du jobba med en lokal cache?
- Du gör en massa requester som kan vara svåra att felsöka på, borde du börja använda en fil-logg där du kan logga information i test och felsökningssyfte?
#Tips från coachen
Lycka till och hojta till i forumet om du behöver hjälp!
#Revision history
- 2020-11-16: (B, mos) Bytte till OpenWeather Weather API.
- 2018-11-14: (A, mos) Första utgåvan.