Softwarearkitektur - Opgaver Modul 3

Opgave 1 - Kig på offentlige API’er

Løs denne opgave sammen med din studigruppe.

Herunder er tre offentlige API’er hvor I skal dykke ned i dokumentationen. Læs spørgsmålene, besvar dem sammen med din gruppe, og skriv svarene ned.

En ordbog

URI: https://dictionaryapi.dev/

Spørgsmål:

  1. Hvad kan man med denne API og hvad er det primære formål?
  2. Kan API’en (mis)bruges til andre ting?
  3. Hvor godt opfylder API’en følgende kriterier? Operational, expressive, simple og predictable.
  4. Afprøv API’en hvis du ikke allerede har gjort det (browser, postman eller curl).

En filmdatabase

URI: https://ghibliapi.herokuapp.com/

Spørgsmål:

  1. Hvad kan man med denne API og hvad er det primære formål?
  2. Hvilke steps skal man udføre for at svare på følgende spørgsmål?
    • Hvilke film har “cat” som en “species” der indgår i filmen?
    • Hvilke “species” findes der i filmen “Totoro”?
  3. Prøv dine steps af fra punkt 2.
  4. Hvor godt opfylder API’en følgende kriterier? Operational, expressive, simple og predictable.

Reddit

URI: https://www.reddit.com/dev/api/

Reddit API’en kræver en key, så den er ikke så nem at komme i gang med, som de andre. Men kig i dokumentationen for at svare på spørgsmålene.

Spørgsmål:

  1. Hvordan sletter man et comment eller et link?
  2. Hvordan henter man alle kommentarer fra en bestemt tråd?
  3. Hvordan opdaterer man stylesheet på et subreddit?
  4. Hvordan ændrer man et “multi” subreddit’s markdown-beskrivelse?
  5. Hvor godt opfylder API’en følgende kriterier? Operational, expressive, simple og predictable.

Opgave 2 - Test en “huskeliste” API

Du skal nu undersøge en offentlige API som findes her:

https://todo-api-krdo.azurewebsites.net/

Du kan bruge værktøjet Postman som anvendes til at specificere og sende HTTP requests.

API’en understøtter følgende metoder:

Til POST og PUT skal der være JSON i body på denne form:

{
  "text": "string",
  "done": true
}

Din opgave er at prøve alle metoderne, og i hvert tilfælde skal du notere ned indhold og status code på det response, du får tilbage.

Når du tester med Postman, hvor du skal sende JSON til API’en, skal det tilføjes til requestet således:

Sådan poster man JSON med Postman

Opgave 3 - En “hello” API

Du skal nu lave en simpel web api med “ASP.Net Core Web Api - Minimal APIs”.

Projektet startes sådan her (navnet efter -o kan ændres, hvis du har lyst):

$ dotnet new web -o min-første-api

Åben Program.cs og læs koden.

Lav ændringer til “MapGet” så du i stedet for at returnerer "Hello World!" returnerer new { Message = "Hello world!" }

Du skal også ændre routen fra / til /api/hello/.

Test din nye API. Læg især mærke til status code og den output du får i response - hvilket format er outputtet i?

Opgave 4 - Mere “hello” API

Du skal nu tilføje lidt nyt til hello-api’en.

Tilføj følgende endpoint til din kode og test den:

app.MapGet("/api/hello/{name}", (string name) => new { Message = $"Hello {name}!"));

Når du har fået den til at virke, skal du også tilføje kode, der svarer til dette endpoint:

Opgave 5 - En frugt API

Lav en ny API som indeholder et array af frugtnavne:

String[] frugter = new String[]
{
    "æble", "banan", "pære", "ananas"
};

Tilføj følgende endpoints:

Opgave 6 - Mere frugt API

Du skal nu tilføje en POST som kan sende nye frugter til frugt-API’en.

Nye frugter sendes til POST-endpointet som JSON. JSON skal have følgende format (eksempel):

{
    "name": "citron"
}

Når du koder POST-routen, er du nødt til at lave en type, der svarer til inputtet i routen. Typen kunne være følgende record, som placeres i bunden af Program.cs:

record Fruit(string name);

Din route kan herefter kodes således:

app.MapPost("/api/fruit", (Fruit fruit) =>
{
    // TODO: Tilføj den nye frugt til dit array!

    Console.WriteLine($"Tilføjet frugt: {fruit.name}");

    // TODO: Returnér herefter arrayet med alle frugter
});

Opgave 7 - 400 Bad Request

Der mangler muligvis lidt fejlhåndtering i din frugt-api.

Hvis man sender et POST /api/fruits/ uden JSON, eller hvor fruit.name er tom, ville det være oplagt at returner 400 Bad Request.

Hvordan gør man det? Find svaret i dokumentationen og skriv koden.

Dokumentationen kan findes her: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis

Opgave 8 - Lav en “huskeliste” API

Du skal nu implementere Todo Task API’en fra opgave 2. Din udgave skal fungere på samme på som den offentlige API.

Start med de nemme routes, dvs. dem der hedder noget med GET. Test dem, og lav herefter resten færdigt.

Brug teknikker og inspiration fra de tidligere opgaver.