RESTful client

Snabbstart

Nedanstående exempelkod skapar ett klientobjekt och ett requestobjekt, skickar requesten genom klienten för att få ett response, och deserialiserar response-objektets text till en instans av Pokemon-klassen.

using RestSharp;
using System.Text.Json;

RestClient client = new RestClient("https://pokeapi.co/api/v2/");
RestRequest request = new RestRequest("pokemon/ditto");
RestResponse response = client.GetAsync(request).Result;
Pokemon p = JsonSerializer.Deserialize<Pokemon>(response.Content);

RestSharp

RestSharp är ett bibliotek som förenklar skickandet av Rest-requests till en RESTful API-server.

Använd NuGet Gallery för att installera RestSharp. Lägg till detta using-statement högst upp:

using RestSharp;

RestClient

En klass som sköter kommunikationen med API-servern.

RestClient client = new RestClient("https://pokeapi.co/api/v2/");

Skapar ett klientobjekt som kommer att skicka requests till PokeAPI.

GetAsync, PostAsync, PutAsync, DelAsync

Dessa metoder används för att skicka en request till en RESTful API-server och leverera resultatet.

Välj rätt metod:

Metoderna tar alla emot en RestRequest-instans och returnerar en Task. Denna Task ger sedan ifrån sig, som Result, ett RestResponse.

RestResponse response = client.GetAsync(request).Result;

GetAsync är, som namnet antyder, en asynkron metod. Med andra ord går det att använda await istället för .Result om man är i en asynkron metod.

async string GetPokemon(string pokemonName)
{
  Task<RestResponse> task = client.GetAsync(request);
  
  // gör något annat medan klienten hämtar resultatet
  
  await task;
  return task.Result;
}

RestRequest

Instanser av RestRequest används för att skicka requests till servern, via till exempel GetAsync.

Request-objekt inkluderar vilken resurs som ska efterfrågas.

// Skapar ett request-objekt för resursen pokemon/ditto.
RestRequest request = new RestRequest("pokemon/ditto");

AddParameter

I vissa API:er kan man lägga till ytterligare parametrar till sin request för att t.ex. skicka med en API-nyckel eller begränsa hur många resultat man får.

// Lägger till parametern "apikey" med värdet "DEMO_KEY"
request.AddParameter("apikey", "DEMO_KEY");

AddJsonBody

I vissa fall – t.ex. när man ska göra en PUT eller en POST – vill man skicka med ett objekt. Om API:et då förväntar sig JSON-data så kan man enklast använda AddJsonBody för att få automatisk serialisering.

Fighter f = new Fighter();
request.AddJsonBody(f);

RestResponse

Som svar på den request man skickat till API-servern får man ett RestResponse-objekt.

RestResponse response = client.GetAsync(request).Result;

StatusCode

I response-objektet ingår en StatusCode. Dess datatyp är en Enum som heter HttpStatusCode och finns i biblioteket System.Net. Dess möjliga värden är alla existerande, definierade statuskoder från HTTP-standarden. Till exempel Ok och NotFound.

  if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
  {
    Console.WriteLine("Not found!");
  }

För att slippa skriva System.Net hela tiden kan du använda ett using-statement högst upp i filen:

using System.Net;

Content

Content är en string som innehåller textsvaret på den request som skickades till servern.

string jsonText = response.Content;
Console.WriteLine(jsonText);

Ofta är Content JSON eller XML-format, och då kan informationen deserialiseras till ett objekt antingen via JSON-deserialisering eller XML-deserialisering.

Kommunicera med en lokal server

Om du vill anropa en lokal server (localhost) men får ett felmeddelande om ett SSL-fel, så kan du kör denna kod i terminalen för att det ska fungera:

dotnet dev-certs https --trust

Öppna databas-API:er

Last updated