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:

MetodHTTP-metodAktivitet

PostAsync

POST

Skapa en ny resurs

GetAsync

GET

Hämta data om en resurs

PutAsync

PUT

Ändra en resurs

DelAsync

DELETE

Ta bort en resurs

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