APIer

💡 Vad är ett API?

Har du någonsin undrat hur din mobilapp kan visa vädret, eller hur en hemsida kan visa en karta från Google Maps? Svaret är oftast ett API.

Tänk dig att du är på en fin restaurang. Du går inte ut i köket och lagar din egen mat, eller hur? Nej, du har en kypare. Du ger din beställning till kyparen, kyparen går till köket, och kommer sedan tillbaka med din mat.

Ett API (Application Programming Interface) är precis den där kyparen. Det är en mellanhand som låter två olika program prata med varandra på ett standardiserat sätt.

sequenceDiagram participant D as Du (din app) participant A as API (Kyparen) participant S as Server (Köket) D->>A: Jag vill ha alla användare! (GET /users) A->>S: Kocken, ge mig listan på användare! S->>A: Här är listan. A->>D: Varsågod, här är din data!

Kort sagt, ett API är ett kontrakt som säger: “Om du skickar mig den här typen av förfrågan, så lovar jag att ge dig den här typen av svar.”

🎯 När vi är klara här kommer du att kunna

  • Förklara vad ett API är med den berömda kypare-metaforen.
  • Skicka förfrågningar till webben för att hämta hem data.
  • Omvandla det där textsvaret (oftast JSON) till användbara C#-objekt.
  • Koppla in externa tjänster i dina egna program.

🔧 Grundprinciper

Tänk på API-anrop som att ge kyparen olika sorters instruktioner. De vanligaste är:

  • GET: “Kan jag få se menyn?” – Du vill bara titta och hämta information.
  • POST: “Jag vill göra en specialbeställning som inte finns på menyn.” – Du vill skapa något helt nytt.
  • PUT: “Jag vill ha min biff, men kan ni byta ut pommes mot en sallad?” – Du vill uppdatera en hel, befintlig beställning.
  • DELETE: “Stryk min beställning.” – Du vill ta bort något.
  • PATCH: “Jag vill ändra min beställning, men bara lite.” – Du vill uppdatera en del av en befintlig beställning.

Informationen du skickar och får tillbaka är nästan alltid paketerad i ett format som heter JSON. Det är bara text, men strukturerad på ett sätt som både människor och maskiner lätt kan läsa. Varje specifik “beställning” du kan göra har en egen adress, en så kallad endpoint. api.example.com/users är en endpoint, api.example.com/products är en annan.

💭 Tänk så här (Pseudokod)

När du ska prata med ett API är processen nästan alltid densamma.


1. Välj rätt adress (endpoint). Ska jag till `/users` eller `/products`?
2. Välj rätt metod. Ska jag hämta (GET) eller skapa (POST)?
3. Skicka iväg din förfrågan.
4. Vänta tåligt på svaret.
5. Packa upp svaret (omvandla från JSON) och använd det!

🚀 Nu kodar vi! Från “Hej” till “Varsågod”

Låt oss se hur detta funkar i praktiken. Vi kommer använda en inbyggd verktygslåda i C# som heter HttpClient. Se den som din personliga telefon för att ringa till restaurangen (API:et).

🟢 Grundläggande användning: Hämta data

Här ber vi helt enkelt ett test-API om information om en specifik användare.


// Vi skapar en "telefon" för att kunna ringa API:et
using var client = new HttpClient();

// Adressen vi ska ringa till
string url = "[https://jsonplaceholder.typicode.com/users/1](https://jsonplaceholder.typicode.com/users/1)";

// Vi ringer och väntar på svaret (som är en lång textsträng)
string jsonSvar = await client.GetStringAsync(url);

// Skriv ut texten vi fick tillbaka
Console.WriteLine(jsonSvar);

Det där är ju bara en enda röra av text, eller hur? Inte så användbart. Låt oss göra om det till ett riktigt C#-objekt!

🟡 Avancerad användning: Omvandla JSON

För att C# ska förstå JSON-svaret behöver vi en “mall” – en klass som matchar datan vi förväntar oss.


// En mall för hur en användare ser ut
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

// ... samma HttpClient-kod som ovan för att hämta json ...
string json = await client.GetStringAsync(url);

// Nu kommer magin: Vi omvandlar texten till ett User-objekt!
User? user = JsonSerializer.Deserialize<User>(json);

if (user is not null)
{
    Console.WriteLine($"Namn: {user.Name}, Email: {user.Email}");
}

Ser du? Nu kan du enkelt komma åt user.Name och andra egenskaper. Mycket smidigare!

🔴 Proffstips: Skicka data

Ibland vill vi inte bara hämta data, vi vill skicka in ny data. Tänk att vi vill lägga till en ny användare.


// Skapa ett nytt objekt vi vill skicka
var newUser = new { Name = "Marcus Medina", Job = "Lärare" };
// Gör om det till en JSON-textsträng
string jsonData = JsonSerializer.Serialize(newUser);

using var client = new HttpClient();
// Paketera vår text för transport
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");

// Skicka iväg paketet med POST-metoden
HttpResponseMessage response = await client.PostAsync(
    "[https://jsonplaceholder.typicode.com/users](https://jsonplaceholder.typicode.com/users)",
    content
);

// Kolla om kyparen sa "OK!"
if (response.IsSuccessStatusCode)
{
    string result = await response.Content.ReadAsStringAsync();
    Console.WriteLine($"Användare skapad! Svar från servern: {result}");
}

⚠️ Vanliga misstag

  • Glömma await: HTTP-anrop tar tid. Om du glömmer await kommer ditt program att försöka fortsätta utan att ha fått svar, och krascha eller bete sig konstigt. [Marcus, infoga en kort historia här om när du glömde await och undrade varför inget hände.]
  • Inte kolla svaret: Bara för att du skickat en förfrågan betyder det inte att allt gick bra. Servern kan vara nere, eller så skickade du fel data. Kolla alltid response.IsSuccessStatusCode innan du försöker använda svaret. Tänk att du frågar kyparen “Gick beställningen fram?” innan du lutar dig tillbaka och väntar på maten.
  • Hårdkoda hemligheter: Många API:er kräver en “API-nyckel” för att du ska få prata med dem. Lägg ALDRIG denna nyckel direkt i koden. Använd konfigurationsfiler. Att lägga upp en API-nyckel på GitHub är som att tejpa fast din hemnyckel på ytterdörren.

📚 Sammanfattning

Puh, det var en hel del! Men summan av kardemumman är inte så krånglig.

  • 💡 Ett API är en kypare som hjälper program att prata med varandra.
  • 💡 Vi använder HttpClient i C# för att göra anropen.
  • 💡 Dataformatet är nästan alltid JSON, som vi kan omvandla till C#-objekt med JsonSerializer.
  • 💡 Kom ihåg async/await! Allt som har med nätverk att göra är asynkront.

Du har nu grundverktygen för att koppla upp dina C#-program mot hela världens data. Snyggt jobbat!

Nästa steg

🔍 Kodexempel i fullversion

👉 Exempel: Hämta data med GET 👉 Exempel: Skicka data med POST

🧪 Övningar

  1. 🟢 Enkel GET-förfrågan
  2. 🟡 Skapa data med POST

😄 Obligatoriskt pappaskämt

Varför gjorde API:et slut med databasen? För att den hade för många *relationsproblem


Undersidor


    Upp

    Upp


    Licens: Apache 2.0 | © 2023 Marcus Medina, Campus Mölndal. Alla rättigheter förbehållna.
    Du får använda och modifiera detta verk enligt villkoren i Apache License, Version 2.0. Du får inte använda detta verk för kommersiella ändamål utan tillstånd från upphovsmannen.