Czym jest API? Najprościej mówiąc jest to interface umożliwiający komunikację / wymianę informacji pomiędzy aplikacjami. Nie zawsze, lecz często w przypadku aplikacji dostępnych w sieci, komunikacja ta odbywa się po protokole HTTP. Zupełnie jak w przypadku kiedy nasza przeglądarka pobiera stronę www lub wysyła na serwer dane z formularza.

Aby standaryzować komunikację, a tym samym ułatwić wymianę informacji pomiędzy aplikacjami, powstał standard REST. API, które wykonane jest zgodnie z tym standardem nazywamy REST API lub też RESTful API.

W poniższym artykule omówimy podstawy REST API oraz pokażemy prosty przykład jak z takiego API skorzystać w języku Python. Zaczynajmy!

****

W dzisiejszych czasach wiele z serwisów posiada API. Np. Instagram, Twitter, NASA, ale również wiele stron i agencji polskich. Patrz przykładowo http://dane.gov.pl. Cześć z tych serwisów wymaga rejestracji oraz uzyskania klucza, aby skorzystać z API, część natomiast jest całkowicie otwarta.

Tak więc skorzystajmy z takiego otwartego API, aby zobaczyć jego działanie na żywym organizmie. Niech to będzie jedno z API stworzone w celach edukacyjnych, będące wycinkiem danych NASA. http://open-notify.org/

Za pomocą tego API możemy uzyskać takie informację, jak lokalizację międzynarodowej stacji kosmicznej, datę kiedy będzie znajdować się nad podaną przez nas lokalizacją oraz ilość ludzi znajdujących się na jej pokładzie.

1. JSON. Bardzo wiele API obsługuje format JSON. Jest to lekki format wymiany danych JavaScript Object Notation, który jest zarówno łatwo zrozumiały dla człowieka jak i komputera. Przykład wygląda tak:

{

„age”:100,

„name”:”emilkaminski.com”,

„messages”:[„msg 1″,”msg 2″,”msg 3”]

}

innymi słowy w momencie kiedy odpytamy stronę http://open-notify.org/ o ilość ludzi w kosmosie, odpowiedź powinniśmy spodziewać się we właśnie w takim formacie. Co zresztą za chwilę zobaczymy.

2. GET, PUT. Jak już wspomnieliśmy w większości przypadków komunikację z REST API wykonujemy za pomocą protokołu HTTP. Pozwala on nam na wykonanie pewnych operacji, w szczególności dwóch, najpopularniejszych. GET i PUT.

GET jest to żądanie pobrania danych. Nasza przeglądarka wysyła GET w celu pobrania zawartości odwiedzanej przez nas strony. PUT natomiast jest to sytuacja kiedy MY chcemy przesłać dane do API, tak jak to się dzieje za każdym razem gdy uzupełniamy na stronach formularze danych.

Przykład: Open notify przechowuje informację o ilości ludzi na stacji kosmicznej w pliku JSON, pod adresem:

http://api.open-notify.org/astros.json

jeżeli wpiszemy ten adres w przeglądarce, wyśle ona żądanie GET, po czym ujrzymy zawartość pliku:

Pytanie teraz brzmi: Jak wykonać tę samą operację z poziomu Pythona ?

3. Requests & JSON – są to biblioteki Python, które ułatwią nam komunikację z REST API.

Za pomocą Request między innymi możemy wykonać polecenia GET oraz PUT. Biblioteka JSON sprawi że praca z plikami w tym formacie będzie zjadliwa.

Na początku zaimportujmy biblioteki:

teraz wyślijmy zapytanie GET w celu pobrania informacji o osobach znajdujących się na stacji kosmicznej:

po czym pobrane informacje wyświetlimy.

Jak widać, pozyskaliśmy informacje w formacie JSON. Z punktu widzenia naszego Pythona jest tym danych Dictionary, tak więc dość prosto powinniśmy móc pobrać z niego interesujące nas dane.

4. Dicitonary. Obróbka danych

JSON jest bardzo wygodnym formatem danych dla nas, z tego względu że z punktu widzenia Pythona, jest to słownik. I tak samo jak do słownika możemy się do niego odnosić:

w wielu przypadkach, jak i w tym w słowniku, będą znajdować się listy danych. Jak są przechowywane tutaj imiona i nazwiska kosmonautów. Jeżeli chcemy uzyskać imię pierwszego:

Podsumowanie.

Czego nauczył nas ten trywialnie banalny przykład z wykorzystaniem absolutnie prostego API? Kilku rzeczy:

1. JSON – jest tp najpopularniejszy format wymiany danych danych w REST API

2. GET i PUT, oraz biblioteka requests służą do przeprowadzania podstawowej komunikacji

3. Bardzo często komunikacja z REST API sprowadza się do wysyłania oraz odbierania łańcucha danych za pomocą HTTP