Laboration 1. Eget API

Deadline

Redovisas Vecka 47

Mål

  • Praktiskt använda ett testramverk för PHP
  • Praktiskt läsa dokumentation och använda ett färdigt API
  • Skriva ett eget API som skall användas av andra programmerare
  • Dokumentera det egna API´et


Bild. Koden vi skriver i den här laborationen(grönt i bilden) ligger som en mellanhand (tjänst) mellan en datakälla och en okänd applikation.

Uppgift 1. Ladda ner och installera och testa ett testramverk för PHP

Sök reda på vilka testramverk som finns för automatiska enhetstester i PHP. Installera och få ramverket att fungera. Notera eventuell problematik att förstå eller få det att fungera.

Frågor

  • Vilket ramverk har du valt?
  • Hur upplevde du kvaliteten på dokumentationen?
  • Behövde du söka information på andra platser än ramverkets egen hemsida?
  • Om du hade hittat en bugg i ramverket kan du framföra den till författaren? Isåfall hur?
  • Om en ny version av ramverket släpps, hur får du reda på det?

Uppgift 2. Specificera Användningsområde

Du väljer fritt vad din skrapa gör kravet är dock att den måste hämta information från andra källor som du inte själv har kontroll över.

Uppgift 3. Skriv en beskrivning av API´et

Viktigt!

Du skall inte inte skriva koden i denna uppgift utan bara skriva ett interface (En beskrivning hur man använder din kod). Innan du skriver någon kod ska du skriva tester för ditt API och det gör vi i nästa uppgift!

Nu ska du skriva ett programmerings-interface till din skrapa. Via interfacet skall man kunna styra vilken information som skall hämtas.
Det är helt ok att behandla informationen eller sammanställa från flera källor. Mellanlagring av informationen kan också vara nödvändig.

Innan du skriver någon kod så svara först på följande frågor. Se exempel nedan.

  • Vilken funktionalitet skall finnas? Vilka metoder?
  • Hur vill man som utvecklare av en applikation använda ditt api? Vad skall man kunna styra? Vilka argument skickar man med?
  • Vad får man som svar?
  • Hur får man tillgång till api´et? Hur installerar man det?
  • Hur sker felhantering?

Exempel:

Datakällan är http://www.smhi.se/vadret/vadret-i-sverige/observationer#.
API´et som jag använder är cURL.

Hur får man tillgång till api´et? Man laddar ner en katalog med PHP filer och placerar i sin rot. I katalogens rot finns en klass SMHIWrapper som har alla metoder som API´et erbjuder.
Eftersom datakällan ger uppdateringar varje timme så måste ett cron-job konfigureras att exekvera varje timme. SMHIWrapper behöver också databasaccess men skapar tabeller själv om de inte finns.

try {
   $smhiWrapper = new SMHIWrapper('localhost', 'root', 'password', 'database');
   $smhiWrapper->doCron(); //här hämtas data från SMHI
} catch (SMHIException $e) {
   ...
}    

Det skall finnas fem olika metoder för att hämta Lufttemp, Nederbörd, Vind, Lufttryck och Luftfuktighet.
Man ska kunna välja plats exempelvis “Kalmar” och datum på formatet “2012-11-18″.
Man får medelvärde från vald plats och datum. Exempelvis 96% luftfuktighet

Felhantering sker med hjälp utav Exceptions.

try {
   $smhiWrapper = new SMHIWrapper('localhost', 'root', 'password', 'database');
   //här hämtas data från egen server
   $temperature = $smhiWrapper->getTemperature(SMHIWrapper::KALMAR, '2011-11-18'); 

   $temperature // Är nu en float mellan -100.0 och 100.0

} catch (SMHIException $e) {
   ...
}

Uppgift 4. Skriv tester först!

Ok nu är det dags att använda testramverket för att skriva automatiska enhetstester som testar ditt API! Varje metod i api´et skall testas automatiskt.

Example. Testa att ett exception kastas när vi inte skickar rätt parametrar

try {
   $smhiWrapper = new SMHIWrapper('non existing host', 'root', 'password', 'testDatabase');
   $this->fail('SMHIWrapper constructor did not throw exception when providied wrong database host'); 
} catch (SMHIException $e) {
  //this is ok
}

Example. Testa att metoden returnerar rätt data

För att testa medelvärdet på temperaturen behövs testdata som inte direkt kommer ifrån SMHI eftersom vi måste ha kontroll över vad resultatet skall bli. Därför skapar vi en testdatabas med fejkdata och kör testet mot den.

$smhiWrapper = new SMHIWrapper('localhost', 'root', 'password', 'testDatabase');
//this data is testdata from preconfigured testDatabase
$temperature = $smhiWrapper->getTemperature(SMHIWrapper::KALMAR, '2011-11-18'); 
$this->AssertIsEqual($temperature, 10.0);

Uppgift 5. Skriv implementationen

Detta är helt upp till dig…

Uppgift 6. Dokumentera och släpp API´et publikt

Det är viktigt att du dokumenterar ditt API eftersom en annan student skall använda ditt API i laboration 3.
Du måste också göra en release av ditt API publikt tillgängligt.

Exempelvis skulle du kunna skapa dokumentation som en WordPress-blogg och tillhandahålla koden med länkar till github. Tänk på att en annan student ska försöka använda din kodskrapa med hjälp utav det du skriver här.

När du publicerat ditt API publikt fyller du i nedanstående formulär:

Svara på enkäten



För att kunna svara på denna uppgift måste du vara inloggad.

Välkommen till CoursePress

en utav Linnéuniversitets lärplattformar. Som inloggad student kan du kommunicera, hålla koll på dina kurser och mycket mer. Du som är gäst kan nå de flesta kurser och dess innehåll utan att logga in.

Läs mer lärplattformar vid Linnéuniversitetet

Studentkonto

För att logga in behöver du ett studentkonto vid Linnéuniversitet.

Läs mer om att hämta ut studentkonto

Inloggning LNU