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</li>
  • POST - wysłanie danych na serwer np. wstawienie nowego rekordu do bazy danych</li>
  • DELETE - usuniecie danych z serwera</li>
  • PUT - zaktualizowanie danych na serwerze. Przesłanie całej zmodyfikowanej struktury</li>
  • 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</li>
    </ul>
    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:

    [csharp]
    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; }
    }
    [/csharp]

    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.

    [csharp]
    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(result);

    var ResultShorLink = json.link_save.link;
    [/csharp]