Nu je al wat meer logische structuren kent kunnen we steeds complexere programma’s maken. In dit hoofdstuk gaan we een API gebruiken om informatie op te vragen. Een API is een manier om informatie op te vragen van een andere server. In dit geval gaan we de Fact API gebruiken. Deze API geeft ons een random feitje terug. We gaan dit feitje dan tonen in onze applicatie.

Omdat het niet mogelijk is om met automatische tests te werken voor deze opdracht kan je geen code uploaden.

Stap 1: Registratie bij Api-ninjas

We gaan gebruik maken van een van de API’s die wordt aangeboden door Api-ninjas1.

Om deze API te kunnen gebruiken moeten we ons registreren. Dit doen we door naar deze pagina2 te gaan en ons te registreren.

Waarom registreren?

Vaak moet je je registreren om een API te kunnen gebruiken. Dit is om te voorkomen dat iemand de API misbruikt. Sommige API’s zijn ook betalend. Je moet dan betalen om de API te kunnen gebruiken.

Een voorbeeld van een betalende API is de API van Google Maps. Deze API kan je gebruiken om kaarten te tonen in je applicatie. Je kan deze API gratis gebruiken tot een bepaald aantal aanvragen. Daarna moet je betalen om de API te kunnen blijven gebruiken.

Stap 2: API sleutel aanvragen

Eens je bent ingelogd op de website van Api-ninjas kan je een API sleutel aanvragen. Deze sleutel heb je nodig om de API te kunnen gebruiken.

Je vindt deze op jouw profielpagina3. Klik op de knop show API key om de sleutel te tonen. Kopieer deze sleutel naar het klembord.

Show APi Key

Show APi Key

Stap 3: Een nieuw project maken

Maak in Visual Studio een nieuw project aan met de naam FactApi.

Voor we kunnen starten moeten we nog wel enkele zaken aanpassen.

3.1: Wijzigen van de Main methode

Omdat we een asynchrone methode gaan gebruiken moeten we de Main methode aanpassen.

## oude Main methode
static void Main(string[] args)
{
    // code
}

## Nieuwe Main methode
static async Task Main(string[] args)
{
    // code
}

Een asynchrone methode is een methode die niet onmiddellijk wordt uitgevoerd. De methode wordt uitgevoerd op een ander moment. Dit is nodig omdat we een API gaan gebruiken. Het ophalen van de informatie van de API kan even duren. We moeten dus wachten tot de informatie is opgehaald.

3.2: Toevoegen van NuGet packages

De API zal de informatie teruggeven in het JSON formaat. JSON is gewone tekst waarin informatie op een gestructureerde manier wordt opgeslagen.

We moeten deze tekst omzetten voor we deze kunnen gebruiken. Hiervoor gaan we een NuGet package gebruiken.

NuGet is een manier om code te delen. Je kan code delen met andere ontwikkelaars. Je kan ook code van andere ontwikkelaars gebruiken in je eigen projecten.

We gaan de NuGet package Newtonsoft.Json gebruiken. Deze package zorgt ervoor dat we JSON kunnen omzetten naar een object.

Om deze package te kunnen gebruiken moeten we deze eerst toevoegen aan ons project. Dit doen we door in de Solution Explorer met de rechtermuisknop te klikken op Dependencies en dan te kiezen voor Manage NuGet Packages.

Manage NuGet Packages

Klik op de knop Browse en zoek naar Newtonsoft.Json. Klik op de package en klik dan op de knop Install.

Installeer Newtonsoft.Json

Stap 4: De code

Nu we alle voorbereidingen hebben gedaan kunnen we starten met het schrijven van de code.

We hebben een aantal variabelen nodig om de informatie van de API op te slaan. We hebben ook een variabele nodig om de API sleutel op te slaan.

4.1: De variabelen


//variabelen declaren
 HttpClient client = new HttpClient();
 string apiKey = "#####3#"; // vervang door jouw API sleutel
 var apiUrl = "######"; // vervang door de URL van de API

4.2: De code om de API aan te spreken

4.2.1: De API bevragen

We gaan nu de API aanspreken. Dit doen we door de URL van de API aan te spreken. We gebruiken hiervoor de GetStringAsync methode van de HttpClient. Deze methode verwacht een string als parameter. In deze string geven we de URL van de API mee.

We moeten echter ook op een of andere manier onze API sleutel meegeven. Dit doen we door de API sleutel mee te sturen in de zogenaamde headers. Headers zijn een manier om extra informatie mee te sturen met een aanvraag.

In de documentatie van de facts API5 kan je lezen dat we de API sleutel moeten meegeven in de header X-Api-Key. We moeten dus een header toevoegen met de naam X-Api-Key en de waarde van de header moet onze API sleutel zijn.

Een header toeveogen doe je door de DefaultRequestHeaders property van de HttpClient aan te spreken. Deze property is van het type HttpRequestHeaders. Dit is een verzameling van alle headers die worden meegegeven met de aanvraag. We kunnen een header toevoegen door de Add methode aan te spreken. Deze methode verwacht twee parameters. De eerste parameter is de naam van de header. De tweede parameter is de waarde van de header.

// Header met API sleutel toevoegen
client.DefaultRequestHeaders.Add("X-Api-Key", apiKey);

Nu we de header hebben toegevoegd kunnen we de API aanspreken. We gebruiken hiervoor de GetStringAsync methode van de HttpClient. Deze methode verwacht een string als parameter. In deze string geven we de URL van de API mee.

// API aanspreken
var response = await client.GetStringAsync(apiUrl);

4.2.2: De informatie omzetten naar een dictionary

De informatie die we terugkrijgen van de API is een JSON string. Om deze informatie te kunnen gebruiken moeten we deze omzetten naar een object. We gaan deze informatie omzetten naar een Dictionary. Een dictionary is een collectie van key en value paren. Een dictionary lijkt erg op een Array. Het verschil is dat je bij een Array de elementen aanspreekt via een index. Bij een dictionary spreek je de elementen aan via een key.

We gaan de JSON string omzetten naar een dictionary door de DeserializeObject methode van de JsonConvert klasse aan te spreken. Deze methode verwacht twee parameters. De eerste parameter is de JSON string die we willen omzetten. De tweede parameter is het type van de dictionary die we willen maken. In ons geval is dit een dictionary met als key een string en als value een object.

// JSON omzetten naar een dictionary
var factsList = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(response);

4.2.3: Het feitje tonen

We hebben nu een dictionary die gevuld is met een feitje. Om dit te tonen moeten we nu met een lus door de dictionary gaan en de informatie tonen. We gebruiken hiervoor een foreach lus. Deze lus gaat door alle elementen van een collectie. We gebruiken de foreach lus om door de dictionary te gaan. We gebruiken de WriteLine methode om de informatie te tonen.

De key van de dictionary is fact. Dit komt omdat de JSON string die we hebben omgezet een element bevat met de naam fact. De waarde van dit element is het feitje dat we willen tonen. Zie de documentatie6 voor meer informatie.

  Console.WriteLine("Feiten:");
  foreach (var fact in factsList)
  {
      Console.WriteLine(fact["fact"]);
  } 

Als je nu de applicatie uitvoert zal je een feitje zien verschijnen in de console.