Exempel - Hämta data med GET

… Så bonden 👨‍🌾 sa till sen get🐐, hämta en hink…

Nej så fjantigt ska det inte vara. GET är kommandot man använder för att hämta data, faktum är att när du surfar på nätet så använder du mestadels get, såvida inte du kryssar i att du godkänner exempelvis att de ska bevaka allt du gör… för då är det ofta POST som används. Men om du ändrar dig sen och skickar en uppdatering så används nog PUT eller PATCH.

🧠 Syfte

Detta kodexempel visar det absolut vanligaste användningsområdet för ett API: att ställa en fråga och få ett svar. Vi kommer att använda HttpClient för att hämta information om en användare från ett öppet test-API och sedan omvandla JSON-svaret till ett C-Sharp-objekt som vi kan arbeta med.

Detta är grunden till allt från att visa väderprognoser till att ladda in produktlistor i en webbshop.

💻 Koden


using System;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

// En "mall" eller DTO (Data Transfer Object) för att matcha JSON-datan.
// Vi behöver inte ta med alla fält, bara de vi är intresserade av.
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
}

public class Program
{
    public static async Task Main(string[] args)
    {
        // 1. Skapa en HttpClient. "using" ser till att den städas upp korrekt.
        using var client = new HttpClient();

        // 2. Definiera vilken adress (endpoint) vi vill anropa.
        string url = "[https://jsonplaceholder.typicode.com/users/1](https://jsonplaceholder.typicode.com/users/1)";

        try
        {
            // 3. Skicka en GET-förfrågan och vänta (await) på svaret.
            // GetStringAsync är en genväg som direkt ger oss svarets innehåll som en sträng.
            string jsonResponse = await client.GetStringAsync(url);
            Console.WriteLine("--- Rå JSON från API:et ---");
            Console.WriteLine(jsonResponse);

            // 4. Deserialisera! Omvandla JSON-texten till ett C-Sharp-objekt av typen User.
            User? user = JsonSerializer.Deserialize<User>(jsonResponse);

            // 5. Använd objektet! Kontrollera att det inte är null.
            if (user is not null)
            {
                Console.WriteLine("\n--- Omvandlat till C-Sharp-objekt ---");
                Console.WriteLine($"ID: {user.Id}");
                Console.WriteLine($"Namn: {user.Name}");
                Console.WriteLine($"Användarnamn: {user.Username}");
                Console.WriteLine($"Email: {user.Email}");
            }
        }
        catch (HttpRequestException e)
        {
            // Fånga eventuella nätverksfel, t.ex. om du inte har internet.
            Console.WriteLine($"\nNågot gick fel med nätverksanropet: {e.Message}");
        }
    }
}

📋 Förklaring

  1. User-klassen: Detta är vår mall. JsonSerializer kommer att titta på namnen på egenskaperna (Id, Name, etc.) och försöka matcha dem mot nycklarna i JSON-svaret.
  2. using var client = new HttpClient(): Vi skapar vår “telefon” för att ringa API:et. using-nyckelordet är superviktigt här, det ser till att anslutningen stängs och resurser frigörs när vi är klara, även om ett fel uppstår.
  3. await client.GetStringAsync(url): Här sker själva anropet. await pausar programmet på just den här raden utan att frysa hela applikationen, och väntar tålmodigt på att servern ska svara. När svaret kommer, fortsätter koden.
  4. JsonSerializer.Deserialize<User>(...): Detta är hjärtat i operationen. Den tar emot textsträngen (jsonResponse) och använder vår User-mall för att bygga ett C#-objekt.
  5. try-catch: Eftersom vi pratar över nätverket kan vad som helst hända. Datorn kan tappa anslutningen, servern kan vara nere, etc. En try-catch-block är ett robust sätt att hantera sådana fel utan att hela programmet kraschar.

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.