Co to jest API? Wyjaśnienie interfejsów programowania aplikacji

API oznacza interfejs programowania aplikacji, koncepcję, która ma zastosowanie wszędzie, od narzędzi wiersza poleceń, przez korporacyjny kod Java, po aplikacje internetowe Ruby on Rails. API to sposób na programową interakcję z oddzielnym komponentem oprogramowania lub zasobem.

Jeśli nie napiszesz każdego wiersza kodu od zera, będziesz wchodzić w interakcje z zewnętrznymi komponentami oprogramowania, każdy z własnym interfejsem API. Nawet jeśli napiszesz coś całkowicie od zera, dobrze zaprojektowana aplikacja będzie miała wewnętrzne interfejsy API, które pomagają organizować kod i zwiększać możliwość ponownego wykorzystania komponentów. Istnieje wiele publicznych interfejsów API, które umożliwiają korzystanie z funkcji opracowanych w innych miejscach w sieci.

Co to jest API?

API definiuje się jako specyfikację możliwych interakcji z komponentem oprogramowania. Co to dokładnie oznacza? Cóż, wyobraź sobie, że samochód był komponentem oprogramowania. Jego API zawierałoby informacje o tym , co może zrobić - przyspieszać, hamować, włączać radio itp. Zawierałoby również informacje o tym , jak można by to zrobić. Na przykład, aby przyspieszyć, naciskasz pedał gazu i naciskasz.

API nie musi wyjaśniać, co dzieje się wewnątrz silnika, gdy naciskasz pedał gazu. Dlatego jeśli nauczyłeś się jeździć samochodem z silnikiem spalinowym, możesz usiąść za kierownicą samochodu elektrycznego bez konieczności uczenia się zupełnie nowego zestawu umiejętności. Informacje o tym, co i jak łączą się w definicji API , która jest abstrakcyjna i niezależna od samego samochodu.

Należy pamiętać, że nazwy niektórych interfejsów API są często używane w odniesieniu zarówno do specyfikacji interakcji, jak i do rzeczywistego komponentu oprogramowania, z którym masz do czynienia. Na przykład wyrażenie „Twitter API” nie tylko odnosi się do zestawu reguł dotyczących programowej interakcji z Twitterem, ale jest ogólnie rozumiane jako oznaczające rzecz, z którą wchodzisz w interakcję, na przykład „Przeprowadzamy analizę tweetów, które otrzymaliśmy API Twittera ”.

API jako warstwa abstrakcji

Jeśli chodzi o oprogramowanie, interfejsy API są dosłownie wszędzie. API idą w parze z jedną z najbardziej fundamentalnych koncepcji informatyki: abstrakcją. Abstrakcja to tylko sposób na uporządkowanie złożoności systemu, aby w prosty sposób obsługiwać skomplikowane czynności. Pomyśl o tej abstrakcji jak o Amazon Dash Buttons, płytkach drukowanych z przyciskami na baterie, których możesz użyć do zamówienia zszywek w Amazon. Oto jak wyglądają:

Zamawiasz przycisk Dash od Amazon i korzystasz z aplikacji na smartfonie, aby powiązać go z siecią Wi-Fi, kontem Amazon i produktem, powiedzmy, ulubioną marką ręczników papierowych. Następnie, gdy chcesz zamówić więcej ręczników papierowych, po prostu naciśnij przycisk. Przycisk Dash łączy się z Internetem i wysyła wiadomość w celu złożenia zamówienia na Twoim koncie. Kilka dni później ręczniki papierowe docierają na wyciągnięcie ręki.

Podobnie jak API, Dash Button jest cudownie prostym interfejsem, który ukrywa za kulisami wszelkiego rodzaju złożoność. Identyfikator zamówionego produktu należy pobrać z jakiejś bazy danych. Twój adres dostawy musi zostać pobrany z konta. Należy ustalić najbliższe centrum logistyczne, w którym znajdują się Twoje ręczniki papierowe, a następnie powiadomić o konieczności usunięcia artykułu z dostępnego magazynu i zapakowania go. Wreszcie, paczka musi być kierowana przez pewną kombinację samolotów, ciężarówek i furgonetek wraz z innymi paczkami w sposób zapewniający, że wszystkie paczki dotrą do celu skutecznie.

Teraz wyobraź sobie, że jako klient musisz koordynować wszystkie te rzeczy. Nigdy nie zamawiałbyś ręczników papierowych, ponieważ jest to zbyt skomplikowane i czasochłonne i masz lepsze rzeczy do zrobienia. Na szczęście cała gehenna jest od ciebie oderwana. Istnieje długi, połączony łańcuch systemów komputerowych i ludzkich procesów, które sprawiają, że te ręczniki papierowe pojawiają się na wyciągnięcie ręki, ale wszystko, o czym musisz pomyśleć, to naciśnięcie przycisku.

Takie są API dla programistów. Wymagają przytłaczającej złożoności i definiują stosunkowo prosty zestaw interakcji, z których możesz korzystać zamiast robić to wszystko samodzielnie. W każdym projekcie oprogramowania prawdopodobnie używasz bezpośrednio dziesiątek, jeśli nie setek interfejsów API, a każdy z tych interfejsów API opiera się na innych interfejsach API i tak dalej.

Publiczne API i integracja API

Interfejsy API są od dawna koncepcją w programowaniu komputerowym i od lat są częścią zestawów narzędzi programistów. Tradycyjnie interfejsy API były używane do łączenia komponentów kodu działających na tej samej maszynie. Wraz z rozwojem wszechobecnej sieci, coraz więcej publicznych interfejsów API, czasami nazywanych otwartymi API, stało się dostępnych. Publiczne interfejsy API są skierowane na zewnątrz i dostępne przez Internet, umożliwiając pisanie kodu, który współdziała z kodem innych dostawców w trybie online; proces ten nazywany jest integracją API.

Tego rodzaju kombinacje kodu umożliwiają użytkownikom łączenie i dopasowywanie funkcji różnych dostawców w ich własnych systemach. Na przykład, jeśli korzystasz z oprogramowania Marketo do automatyzacji marketingu, możesz zsynchronizować tam swoje dane z funkcjonalnością Salesforce CRM.

„Otwarte” lub „publiczne” nie powinny być interpretowane jako „bezpłatne” w tym kontekście. Aby to zadziałało, nadal musisz być klientem Marketo i Salesforce. Ale dostępność tych interfejsów API sprawia, że ​​integracja jest znacznie prostszym procesem niż byłaby w innym przypadku. ( ma świetną listę publicznych interfejsów API, o których powinieneś wiedzieć).

Usługi internetowe i interfejsy API

Możesz przypomnieć sobie termin usługi internetowe z początku XXI wieku i pomyśleć, że idea otwartego API brzmi podobnie. W rzeczywistości usługa sieciowa to specyficzny rodzaj otwartego interfejsu API, który spełnia dość sztywny zestaw specyfikacji, w tym specyfikację w języku WSDL (Web Services Description Language), wariancie XML.

Usługi sieci Web miały być używane jako część architektury zorientowanej na usługi (SOA). Jak wyjaśnia blog Nordic APIs, spowodowało to złą opinię na temat usług internetowych, ponieważ architektury SOA nigdy do końca nie wykorzystały swojego potencjału. Postępy w technikach używanych do komunikacji między usługami - zwłaszcza lżejszy i bardziej elastyczny REST - również spowodowały, że usługi sieciowe zostały nieco w tyle w świecie publicznych interfejsów API.

REST API

Usługi sieci Web zostały pierwotnie zaprojektowane do komunikacji przy użyciu protokołu SOAP (Simple Object Access Protocol), protokołu przesyłania wiadomości, który wysyła dokumenty XML przez HTTP. Jednak obecnie większość interfejsów API opartych na sieci Web używa REST - Representational State Transfer - jako stylu architektonicznego.

REST został formalnie wprowadzony przez Roya Fieldinga w jego rozprawie doktorskiej w 2000 roku. Jest to zestaw elementów architektonicznych, zasad projektowania i interakcji wykorzystywanych do budowy systemów rozproszonych wykorzystujących wszelkiego rodzaju media (tekst, wideo itp.). W swej istocie REST to styl budowania systemów, który pozwala na elastyczną komunikację i wyświetlanie informacji w sieci, zapewniając jednocześnie strukturę niezbędną do łatwego budowania komponentów ogólnego przeznaczenia.

W REST API zasobem może być prawie wszystko, ale przykłady obejmują użytkownika, listę tweetów i bieżące wyniki wyszukiwania tweetów. Do każdego z tych zasobów można przypisać identyfikator zasobu , którym w przypadku internetowych interfejsów REST API jest zwykle adres URL, na przykład //api.twitter.com/1.1/users/show?screen_name=twitterdev. Gdy aplikacja żąda zasobu przy użyciu identyfikatora, interfejs API dostarcza bieżącą reprezentację tego zasobu do aplikacji w formacie, który aplikacja może używać, takim jak obraz JPEG, strona HTML lub JSON.

Jednym z głównych wyróżników REST jest to, że polega on na wysyłaniu danych do żądającej aplikacji. Chociaż zapewnia to dużą elastyczność, umożliwiając aplikacji robienie z danymi wszystkiego, czego chce, odbywa się to kosztem wydajności. Wysyłanie danych przez Internet do przetwarzania jest dość powolne w porównaniu z przetwarzaniem, w którym znajdują się dane, a następnie wysyłaniem wyników.

Oczywiście problem z „wydajnym” podejściem polega na tym, że systemy przechowujące dane musiałyby z wyprzedzeniem wiedzieć, jakie aplikacje chcą z nimi zrobić. W związku z tym, aby zbudować interfejs API, który ma użyteczność i elastyczność ogólnego przeznaczenia, REST jest drogą do zrobienia.

Przykłady API

Istnieje wiele publicznych interfejsów API, z którymi możesz wchodzić w interakcje, z których wiele pochodzi od gigantów branży. Możliwość programowego dostępu do kodu niektórych firm platformy za pośrednictwem interfejsu API jest w istocie tym, co czyni je platformą. Oto kilka ważnych przykładów API:

  • Interfejsy API Google , które umożliwiają połączenie kodu z całą gamą usług Google, od Map po Tłumacz. Interfejsy API są tak ważne dla Google, że nabyli Apigee, wiodącą platformę zarządzania API.
  • Interfejsy API Facebooka , które umożliwiają programowy dostęp do wykresu społecznościowego i narzędzi marketingowych Facebooka. (Firma ogranicza tylko dane użytkownika, do których można uzyskać dostęp za pośrednictwem tych interfejsów API, w wyniku skandali z Cambridge Analytica i innych skandali).

Aby naprawdę zrozumieć, jak działają interfejsy API, przyjrzyjmy się bliżej dwóm zagadnieniom: Java API, którego programiści Java używają do interakcji z platformą Java, oraz Twitter API, publiczny interfejs API, którego można używać do interakcji z portalami społecznościowymi usługa sieciowa.

Java API

Java API to biblioteka komponentów oprogramowania dostępnych „po wyjęciu z pudełka” dla każdego, kto zainstalował Java Development Kit. Komponenty te realizują typowe zadania i generalnie zwiększają produktywność, ponieważ programiści nie muszą za każdym razem zaczynać od zera. Jednym z podstawowych składników oprogramowania jest tak zwana lista, która, jak można się spodziewać, śledzi listę elementów. Interfejs API języka Java definiuje, co można zrobić z listą: dodawać elementy, sortować listę, określać, czy element znajduje się na liście, itp. Określa również sposób wykonywania tych czynności. Aby posortować listę, musisz określić, w jaki sposób chcesz sortować listę: alfabetycznie, malejąco numerycznie, kolor od najjaśniejszego do najciemniejszego itp.

API Twittera

Interfejs API Twittera to internetowy interfejs API JSON, który umożliwia programistom programową interakcję z danymi Twittera. W przeciwieństwie do Java API, które jest zawarte w Java Development Kit, Twitter API jest internetowym API. Dostęp do niego należy uzyskać, wysyłając żądania przez Internet do usług udostępnianych przez Twitter.

W przypadku internetowego interfejsu API, takiego jak Twitter, aplikacja wysyła żądanie HTTP, tak jak robi to przeglądarka internetowa. Jednak zamiast dostarczenia odpowiedzi jako strony internetowej, dla ludzkiego zrozumienia, jest ona zwracana w formacie, który aplikacje mogą łatwo przeanalizować. W tym celu istnieją różne formaty, a Twitter używa popularnego i łatwego w użyciu formatu o nazwie JSON. (Jeśli nie znasz formatu JSON, możesz poświęcić kilka minut na jego przeczytanie tutaj).

Jednym z podstawowych elementów Twittera jest tweet. Interfejs API Twittera informuje Cię, co możesz zrobić z tweetami: wyszukaj tweety, utwórz tweet, dodaj tweet do ulubionych. Informuje również, jak wykonać te czynności. Aby wyszukiwać tweety, musisz określić kryteria wyszukiwania: terminy lub hashtagi do wyszukania, geolokalizację, język itp.

Projekt API

Projektowanie API to proces, w którym formułuje się „co” i „jak” API. Podobnie jak w przypadku wszystkiego innego, co można stworzyć, różne poziomy myślenia i uwagi są uwzględniane w projektowaniu API, co skutkuje różnymi poziomami jakości API. Dobrze zaprojektowane interfejsy API zachowują się spójnie, uwzględniają kontekst i mają na uwadze potrzeby użytkowników.

Konsekwentne zachowanie w obrębie API ma duży wpływ na szybkość, z jaką można się go nauczyć, oraz prawdopodobieństwo popełnienia przez programistów błędów podczas korzystania z niego. Generalnie interfejsy API, które wykonują podobne czynności, powinny zachowywać się podobnie, niezależnie od różnic technicznych. Na przykład niespójnego interfejsu API przyjrzyjmy się dwóm sposobom dodawania pozycji do listy w Javie:

Mimo że dwie metody dodawania elementów do listy robią to samo, ich typy zwracane (boolean i void) są różne. Programiści używający tego interfejsu API muszą teraz śledzić, która metoda zwraca dany typ, co utrudnia naukę interfejsu API, a jego użycie jest bardziej podatne na błędy. Oznacza to również, że kod korzystający z tych metod staje się mniej elastyczny, ponieważ musi się zmienić, jeśli chcesz zmienić sposób dodawania elementów.

Uwzględnianie kontekstu jest inną formą spójności, chociaż ma to związek z czynnikami zewnętrznymi w stosunku do API. Świetnym przykładem tego, nie będącym oprogramowaniem, jest sposób, w jaki zasada ruchu drogowego - ruch prawostronny lub lewostronny - wpływa na konstrukcje samochodów w różnych krajach. Projektanci samochodów uwzględniają ten czynnik środowiskowy, umieszczając siedzenie kierowcy po prawej lub lewej stronie samochodu.