Obsługa REST API w C#

Obsługa usług internetowych to praktycznie podstawa w przypadku aplikacji mobilnych. Pozwalają nam w znaczy sposób zwiększyć atrakcyjność aplikacji. Usługa internetowa to idealna forma komunikacji  z chmurą lub innym aplikacjami.

Warto wiedzieć jak korzystać z takiego API w kodzie. Chciałbym zaprezentować sposoby implementacji różnych zapytań HTTP zaczynając na GET i kończąc na PATCH. Pokaże jak manipulować zapytaniami http tak abyśmy mieli pełnie władzy nad usługą.

Metody HTTP

Opisz krótko 5 metod z których korzysta się najczęściej w usługach internetowych

  • GET – pobieranie danych z serwera
  • POST – wysłanie danych na serwer np. wstawienie nowego rekordu do bazy danych
  • DELETE – usuniecie danych z serwera
  • PUT – zaktualizowanie danych na serwerze. Przesłanie całej zmodyfikowanej struktury
  • PATCH – zaktualizowanie danych na serwerze. Różnica do PUT polega na tym, że w przypadku PATCH nie musimy przesyłać całej struktury danych a jedynie elementy które uległy modyfikacji

Oczywiście nie każdy WebService korzysta dla każdego rodzaju operacji z odpowiedniej metody HTTP. RESTFul jest standardem który definiuje właśnie wykorzystanie tych 5 metod zgodnie z ich przeznaczeniem. W sieci nie ma zbyt dużo RESTful’owych usług, większość z nich operuje głównie na metodzie GET przykładem może być serwis Bit.ly i nim zajmiemy się na początku.

Na początek skorzystamy z konwentera JSON to C# class: http://json2csharp.com/
W celu wygenerować struktury danych na którą będziemy mapowali JSON’a otrzymanego w wyniku zapytania HTTP. Wygląda to mniej więcej tak:

public class LinkSave
 {
 public string link { get; set; }
 public string aggregate_link { get; set; }
 public string long_url { get; set; }
 public int new_link { get; set; }
 }

public class Data
 {
 public LinkSave link_save { get; set; }
 }

public class RootObject
 {
 public int status_code { get; set; }
 public Data data { get; set; }
 public string status_txt { get; set; }
 }

Kolejnym etapem jest utworzenie nowej instancji obiektu HttpClient(); jeżeli nie jest dostępny można znaleźć go i doinstalować w NuGet.

Metoda z której będziemy korzystali to GetStringAsync() spowoduje, że zwróci nam wszystko to co wyśle do nas serwer w postaci tekstu. Jeżeli dobrze odpytamy serwer to w odpowiedzi dostaniemy stringa z JSONem. Korzystając z jsonConventer jesteśmy wstanie deserializować dane i z mapować na obiekty, które przed chwilą wygenerowaliśmy.

const string access_token = "your_app_token";
string title_url = "Sebcza.pl - Sebastian Czarnecki";
string long_url = "http://sebcza.pl";
string url = "https://api-ssl.bitly.com/v3/user/link_save?access_token="+access_token+"&title="+title_url+"&longUrl="+long_url;

var client = new HttpClient();
var result = await client.GetStringAsync(url);
var json = JsonConvert.DeserializeObject<data>(result);

var ResultShorLink = json.link_save.link;