API jest serwisem-interfejsem dostarczającym funkcjonalności na potrzeby działania innego serwisu. Przykładem może być aplikacja z prognozą pogody na urządzenia mobilne, ale również dostępna jako strona internetowa. Niezależnie od miejsca uruchomienia prognozy, źródło danych najczęściej będzie to samo: API.
Nie ma określonego jednego sposobu na pobieranie danych z API, dlatego chcąc zintegrować się z jakimś API, trzeba mieć dostęp do jego dokumentacji, czyli swego rodzaju opisu: jak działa, co daje i w jaki sposób należy z nim rozmawiać. Najpopularniejszym sposobem na wymianę danych z API jest dzisiaj komunikacja po protokole HTTP/S. Zapewnia on dobrą wydajność i łatwość integracji.
Serwis API można i powinno objąć się monitoringiem, a ponieważ większość API działa na protokole HTTP/S, możemy do tego celu użyć usługi do monitorowania stron internetowych. Na przykładzie wymyślonego serwisu z prognozą pogody pokażę Ci sposób, jak taki monitoring mógłby zostać skonfigurowany w Ping.pl.
Co z autoryzacją?
Większość API wymaga autoryzacji. Dostępnych metod jest wiele, począwszy od prostego dołączania do każdego żądania klucza autoryzacyjnego, przez użycie metody Basic Auth wraz z nazwą użytkownika i hasłem, a skończywszy na autoryzacji poprzez token o określonej trwałości.
Ping.pl ma możliwość wysłania żądania GET i POST z niemal dowolnymi danymi. Dodatkowo, żądania mogą zostać zautoryzowane poprzez dołączenie nazwy użytkownika i hasła (Basic Auth).
Jeżeli API, które chcesz monitorować bazuje na tokenach o określonej trwałości, konieczne będzie zastosowanie skryptu pośredniego. Dowiesz się o nim więcej w ostatnim rozdziale.
Sprawdzenie odpowiedzi
Testowanie API to oczywiście nie tylko wysłanie odpowiedniego zapytania do niego, ale również sprawdzenie treści odpowiedzi, czy jest ona zgodna z założeniem. Przy domyślnych ustawieniach Ping.pl sprawdza status odpowiedzi, ale w ustawieniach monitora można wprowadzić listę fraz, które powinny zostać sprawdzone w treści odpowiedzi.
Pierwsza grupa to frazy, które wszystkie powinny znaleźć się w treści odpowiedzi żądania wykonanego podczas testu. Druga grupa fraz zabronionych - żadna z nich nie powinna zostać znaleziona w odpowiedzi. W przypadku przykładowego testu serwisu API do pobierania danych pogodowych, konfiguracja fraz dla metody pobrania prognozy dla Gdańska mogłaby wyglądać następująco:
Jak widzisz na powyższy screenie, podczas definiowania poszczególnych fraz możesz po zaznaczeniu specjalnej opcji skorzystać z wyrażeń regularnych, co znacząco rozszerza możliwości tej funkcji.
Metody GET, POST i pozostałe
Standardowy test dostępności w Ping.pl to żądanie typu GET wysłane na wskazany adres. Z łatwością jednak może zostać ono zamienione na żądanie POST wraz z podaniem danych jakie powinno ono zawierać. Mogą być to dane formularza, JSON lub surowe dane tekstowe:
Obecnie w Ping.pl nie jest możliwe przeprowadzenie testu metodami innymi niż GET i POST. Jeżeli potrzebujesz wykonać zapytanie do API również innymi metodami, rozważ użycie skryptu pośredniego o którym przeczytasz poniżej.
Skrypt pośredni
Skrypt pośredni to kod umieszczony na niezależnym serwerze, którego zadaniem jest przeprowadzenie testów API, których niemożliwe byłoby uruchomienie bezpośrednio w usłudze monitoringu, np. z powodu autoryzacji ze zmiennymi tokenami lub koniecznością wysłania żądań innych niż GET i POST. Usługa monitoringu wówczas co określony czas uruchamia wskazany skrypt i sprawdza jego wynik. Jeżeli będzie on inny niż oczekiwany lub czas jego wykonania będzie zbyt długi, wówczas wysłane zostaną powiadomienia o problemie.
Taki skrypt może zostać przygotowany w dowolnej technologii i hostowany u dowolnego operatora. Może to być np. plik PHP umieszczony na Twoim serwerze lub funkcja Node.js w chmurze Microsoft Azure lub Google Cloud.
Przykład skryptu pośredniego
Poniższy skrypt PHP wykona żądanie DELETE i zwróci - w zależności od wyniku - treść SUCCEED lub FAILED:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com/photos/123456');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode === 200 ? 'SUCCEED' : 'FAILED';
W ustawieniach monitora wystarczy wprowadzić SUCCEED jako frazę wymaganą w treści monitorowanej strony, a frazę FAILED jako frazę, która w treści strony nie powinna wystąpić.