Podstawy API

Jakub Krawczyk
Jakub Krawczyk Skomentuj

Jeśli jeszcze nie wiesz czym jest API to mogę Cię zapewnić, że nie raz się już z nim spotkałeś. Bardzo możliwe, że korzystasz z tej technologii codziennie, nawet nie zdając sobie z tego sprawy. W tym artykule zgłębimy podstawy API, czyli Application Programming Interface. Sprawdźmy czym się one charakteryzują i dlaczego warto z nich korzystać w nowoczesnych sieciach komputerowych.

Po co nam API?

Gdy mówimy o interfejsie użytkownika mamy na myśli sposób w jaki człowiek wchodzi w interakcję z urządzeniami elektronicznymi.

W przypadku typowych pecetów czy smartfonów będzie to najczęściej interfejs graficzny, czyli GUI (ang. Graphical User Interface). Gdy zarządzamy serwerami czy urządzenia sieciowymi częściej wykorzystujemy wiersz poleceń, czyli CLI (ang. Command-line Interface). Interfejsy te zostały stworzone na potrzeby człowieka. Są one dla nas łatwe w obsłudze i dzięki nim nawet osoba nierozumiejąca jak działa dane urządzenie może bez problemu z niego korzystać. To co jest zrozumiałe dla ludzi niekoniecznie musi się sprawdzić w komunikacji maszyn.

Z pomocą przychodzi tu właśnie API, czyli w wolnym tłumaczeniu interfejs programistyczny aplikacji. Ich zadaniem jest umożliwienie bezpośredniej łączności i wymiany danych między aplikacjami i systemami. API umożliwiają programistom dostęp do funkcjonalności lub danych udostępnianych przez inne aplikacje, bez konieczności posiadania szczegółowej wiedzy na temat sposobu, w jaki te aplikacje są zbudowane. Wykorzystują do tego ściśle określony zestaw reguł, które definiują sposób komunikacji i udostępniania danych.

Przekładając działanie API na nasze codzienne życie można je porównać do kelnera. Będąc w restauracji całą Twoją obsługą zajmuje się kelner. Ty tylko wybierasz pozycję z menu i cierpliwie czekasz na swoje danie. W tym czasie kelner składa zamówienie w kuchni, a po przygotowaniu dostarcza bezpośrednio do stolika.  Tak samo API jest odpowiedzialne za obsługę żądań klienta, przetwarzanie danych, generowanie odpowiedzi i przekazywanie ich do klienta.

Podstawy API - API jako...kelner
Podstawy API – API jako…kelner – źródło

Przykłady wykorzystania API

Przykładów wykorzystania interfejsów programistycznych jest mnóstwo. API stosujemy szeroko w sklepach internetowych, portalach społecznościowych, porównywarkach cenowych. Umożliwiają integrację systemów bankowych czy logistycznych. Wreszcie pozwalają na wymianę danych między urządzeniami i aplikacjami służącymi do ich zarządzania. Naprawdę ciężko wymienić wszystkie zastosowania. Żeby łatwiej zrozumieć ich istotę podam tylko kilka przykładów:

  1. Kupiłeś buty w sklepie internetowym i chcesz wiedzieć, gdzie jest Twoja paczka – dzięki API widzisz jej status w aplikacji sklepu;
  2. Szukasz taniego lotu do Londynu w porównywarce cenowej -dzięki API widzisz ofertę wszystkich przewoźników w jednym miejscu;
  3. Twoje urządzenia sieciowe znajdują się w różnych lokalizacjach w kraju – możesz zobaczyć ich dokładną lokalizację na mapach dzięki integracji z API Google Maps;
  4. Używasz asystenta głosowego w telefonie, by włączyć smart żarówki w sypialni – Twoje urządzenia połączyły się dzięki API.

Znasz już zastosowania API, zobaczmy teraz jak działają.

REST API – podstawy

Istnieją różne sposoby na budowanie API. Najbardziej rozpowszechnionym typem API jest obecnie REST, dlatego skupię się na jego działaniu. Pamiętaj jednak, że istnieją jeszcze inne typy API jak SOAP (Simple Object Access Protocol), czy RPC (Remote Procedure Call), które również będą mieć zastosowanie w różnych technologiach.

REST to skrót od REpresentational State Transfer API. Jest to rodzaj architektury, który określa w jaki sposób powinniśmy budować API. REST definiuje zasady, jakie muszą być spełnione przez interfejs programistyczny. API, które są budowane zgodnie z tymi zasadami nazywa się RESTful API.

Wśród najważniejszych założeń można wyróżnić:

  1. Działanie w oparciu o architekturę klient-serwer – wyraźny podział między aplikacjami znajdującymi się po stronie klienta i serwera. Klient wysyła żądania o dane (ang. request), a serwer zwraca dane (ang. response) w określonym formacie i strukturze;
  2. Bezstanowość (ang. stateless) – aplikacja musi być bezstanowa, to znaczy, że w każdym żądaniu muszą być zawarte wszystkie dane, które są niezbędne do realizacji przez serwer danego zapytania;
  3. API zbudowane z warstw (ang. layered system) – poszczególne elementy API komunikują się tylko z bezpośrednio przyległą warstwą. Oznacza to, że klient łączący się z komponentem pośrednim, takim jak serwer proxy, nie ma wiedzy o tym, co znajduje się za nim.

CRUD oraz URI

Popularność REST API w dużej mierze wynika z faktu, że bazuje on na protokole HTTP, dzięki czemu jest łatwy we wdrożeniu. Zapytania REST API korzystają ze standardowych metod HTTP: GET, POST, PUT/PATCH, DELETE. Metody te umożliwiają działanie stron internetowych, natomiast w przypadku API są wykorzystywane do wykonywania podstawowych operacji na zasobach. Operacje te to CREATE, READ, UPDATE, DELETE, w skrócie CRUD.

Poszczególne zapytania umożliwiają wykonanie następujących akcji:

Metody HTTP vs akcje API
Metody HTTP vs akcje API

Każdy zasób posiada swój unikalny adres, tzw. URI, czyli Uniform Resource Identifier, który umożliwia zlokalizowanie zasobu. Z racji wykorzystania protokołu HTTP jest on bardzo zbliżony do standardowego adresu strony internetowej.

Zobacz, jak zbudowane jest URI darmowego API od open-meteo.com, służącego do pobierania danych pogodowych:

Poszczególne elementy Uniform Resource Identifier
Poszczególne elementy Uniform Resource Identifier

Przykład komunikacji REST API

Sprawdźmy w praktyce jak wygląda komunikacja klienta z serwerem. Możemy użyć do tego aplikacji, które umożliwiają wykonywanie zapytań HTTP. Poniżej widzisz screeny z programu POSTMAN. Jeśli chcesz na szybko sprawdzić działanie API z poziomu wiersza poleceń to możesz również skorzystać z narzędzia cURL.

Zapytanie GET w POSTMAN
Zapytanie GET w POSTMAN

Widzimy tutaj request GET, gdzie chcemy uzyskać dostęp do zasobu open-meteo.com, a konkretnie dowiedzieć się jaka jest pogoda w Warszawie. Zostały określone trzy elementy – długość geograficzna, szerokość geograficzna i parametr aktualna pogoda.

Po otrzymaniu żądania serwer udziela odpowiedzi o zrealizowanie zapytania HTTP. W pierwszej kolejności klient otrzymuje kod statusu HTTP. Wskazuje on czy żądanie zostało pomyślnie wykonane lub czy też wystąpiły jakieś błędy. Kody statusu HTTP składają się z trzech cyfr, a każda z nich ma swoje określone znaczenie.

Przykładowe statusy HTTP
Przykładowe statusy HTTP

Otrzymaliśmy już odpowiedź z serwera. Teraz czas na dane o które prosiliśmy. RESTful API do reprezentacji wyników zapytania używa tzw. formatu danych. Jest to sposób w jaki dane są przechowywane, przesyłane i prezentowane. Format danych określa szczegółowo strukturę i składnię danych. Najpopularniejszym formatem jest obecnie JSON (JavaScript Object Notation), ale możesz również spotkać się z formatowaniem XML (Extensible Markup Language) i YAML (YAML Ain’t Markup Language).

Odpowiedź serwera w POSTMAN
Odpowiedź serwera w POSTMAN

Widzimy, że żądanie jest prawidłowe, posiada status 200 – OK. Serwer przesłał w odpowiedzi dane sformatowane w JSON.

Pamiętaj, że każde API jest tworzone na potrzeby danej aplikacji czy systemu. Swego rodzaju instrukcją obsługi danego API jest jego dokumentacja, która może zawierać opis obsługiwanych metod, dostępnych zasobów, czy opcjonalnych parametrów.

Podstawy API w sieciach

Tradycyjna konfiguracja urządzeń sieciowych poprzez CLI sprawdzała się przez lata. Ma jednak ona istotne ograniczenia. Słabo się skaluje i ma ograniczone możliwości automatyzacji. To co sprawdza się w małych sieciach ciężko jest zastosować, gdy mamy sieć składającą się z setek czy nawet tysięcy urządzeń. Jeśli dojdą do tego zasoby w chmurze, to zarządzanie taką siecią staje się udręką. Dlatego też interfejs programistyczny ma obecnie szerokie zastosowanie w rozwiązaniach sieciowych.

API są bardzo istotnym elementem nowoczesnych sieci komputerowych, czyli sieci definiowanych programowo (SDN, ang. Software Defined Network)­. W sieciach SDN komunikacja i zarządzanie urządzeniami sieciowymi wygląda nieco inaczej niż ma to miejsce w przypadku tradycyjnego CLI lub GUI. Centralnym punktem SDN jest kontroler. Jest on pośrednikiem między administratorem, a sprzętem. Komunikacja z kontrolerem odbywa się poprzez interfejs północny (Northbound Interface) lub interfejs południowy (Southbound Interface).

Po stronie północnej znajduje się użytkownik, który nie łączy się bezpośrednio ze switchem czy routerem, ale z kontrolerem. Komunikacja ta jest realizowana właśnie poprzez REST API.

Zarządzanie może odbywać się przez udostępniony przez producenta GUI, ale istnieje możliwość tworzenie własnych skryptów, dostosowanych do potrzeb danego użytkownika, na bazie takich narzędzi jak Ansible, Chef czy Puppet.

Kontroler natomiast łączy się z urządzeniami sieciowymi poprzez interfejs południowy. Mogą być tu wykorzystywane tradycyjne metody jak SSH czy SNMP, ale również nowsze protokoły jak NETCONF czy RESTCONF.

Cisco obecnie posiada szereg platform umożliwiających wdrażanie sieci opartych o paradygmat SDN. Do najważniejszych rozwiązań należą:

  • Cisco DNA (Digital Network Architecture) Center;
  • Cisco Meraki;
  • Cisco Application Centric Infrastructure (ACI) – dla rozwiązań Data Center;
  • Cisco SD-WAN – dla rozwiązań w sieciach rozległych WAN.

Zalety stosowania API

Zastosowanie API i sieci SDN nie tylko może ułatwić pracę administratora, ale również istotnie ją przyspieszyć. Do zdecydowanych plusów trzeba zaliczyć takie możliwości jak:

  • Automatyzacja – automatyczne konfigurowanie i zarządzanie sieciami pozwala na zmniejszenie ryzyka błędów i zwiększenie efektywności zarządzania siecią;
  • Monitorowanie – dzięki API możliwe jest zbieranie danych w czasie rzeczywistym, analizowanie i wizualizowanie danych o sieci. Analiza tych danych pozwala na szybkie wykrywanie i rozwiązywanie problemów w sieci;
  • Integracja z zewnętrznymi systemami – zarówno z rozwiązaniami chmurowymi jak i z oprogramowaniem innych producentów jak VMware, Microsoft czy OpenStack.

Jak ochronić API przez zagrożeniami?

Znasz już podstawy API i wiesz, że daje ono wiele możliwości. Mimo to korzystanie z niego może stanowić duże zagrożenie. Dlatego bardzo ważne jest by chronić API przed nieuprawnionym dostępem i innymi złośliwymi atakami. Przeczytasz o tym w naszym darmowym NSSletterze – mailingu dla sieciowców głodnych wiedzy.

Dołączając uzyskasz dostęp również do archiwum – tematykę tego artykułu rozszerzyliśmy w NSSletterze 23. Rozwiń swoją wiedzę już teraz i zapisz się używając formularza poniżej.

Zostaw komentarz
Otrzymuj powiadomienia z tej dyskusji
Powiadom mnie o
guest

0 - Ilość komentarzy
Inline Feedbacks
View all comments