Što je API? Objašnjena sučelja za programiranje aplikacija

API je sučelje za programsko programiranje, koncept koji se primjenjuje svugdje, od alata naredbenog retka do poslovnog Java koda do web aplikacija Ruby on Rails. API je način programske interakcije s odvojenom softverskom komponentom ili resursom.

Ako ne napišete svaki pojedini redak koda ispočetka, komunicirat ćete s vanjskim softverskim komponentama, svaka sa svojim API-jem. Čak i ako nešto napišete u potpunosti od nule, dobro dizajnirana softverska aplikacija imat će interne API-je koji pomažu u organizaciji koda i čine komponente višekratnom. Postoje brojni javni API-ji koji vam omogućuju da iskoristite funkcionalnost razvijenu drugdje na webu.

Što je API?

API je definiran kao specifikacija mogućih interakcija sa softverskom komponentom. Što to točno znači? Pa, zamislite da je automobil softverska komponenta. Njegov API sadržavao bi informacije o tome što može učiniti - ubrzati, zakočiti, uključiti radio itd. Također bi sadržavao informacije o tome kako biste to mogli učiniti. Na primjer, da biste ubrzali, stavite nogu na papučicu za gas i pritisnete.

API ne mora objašnjavati što se događa u motoru kada stavite nogu na gas. Zato, ako ste naučili voziti automobil s motorom s unutarnjim izgaranjem, možete sjesti za volan električnog automobila bez da morate naučiti potpuno novi skup vještina. Informacije o tome što i kako dolaze u API definiciji , koja je apstraktna i odvojena od samog automobila.

Imajte na umu da se naziv nekih API-ja često koristi kako za specifikaciju interakcija, tako i za stvarnu softversku komponentu s kojom komunicirate. Izraz "Twitter API", na primjer, ne odnosi se samo na skup pravila za programsku interakciju s Twitterom, već se općenito podrazumijeva stvar s kojom komunicirate, kao u "Radimo analizu tweetova s ​​kojih smo došli Twitter API. "

API kao sloj apstrakcije

Što se tiče softvera, API-ji su doslovno svugdje. API-i idu ruku pod ruku s jednim od najtemeljnijih pojmova u računalnoj znanosti: apstrakcija. Apstrakcija je samo način organiziranja složenosti sustava tako da se kompliciranim radnjama može rukovati na jednostavan način. Zamislite ovu apstrakciju poput onih Amazon Dash gumba, baterijskih pločica s gumbima koje možete koristiti za naručivanje spajalica od Amazona. Ovako izgledaju:

Naručite Dash Gumb od Amazona i pomoću aplikacije na pametnom telefonu povežete ga s Wi-Fi mrežom, Amazon računom i proizvodom, recimo, omiljenom markom papirnatih ručnika. Zatim, kad god želite naručiti još papirnatih ručnika, samo pritisnite gumb. Gumb Crtica spaja se na Internet i šalje poruku za narudžbu na vašem računu. Nekoliko dana kasnije, papirnati ručnici stižu vam pred kućni prag.

Poput API-ja, i crtica je blaženo jednostavno sučelje koje skriva sve vrste složenosti iza kulisa. ID proizvoda koji ste naručili mora se dohvatiti iz neke baze podataka. Adresa za dostavu mora se preuzeti s vašeg računa. Mora se odrediti najbliži centar za ispunjenje zaliha vaših papirnatih ručnika, a zatim obavijestiti da se predmet ukloni iz dostupne zalihe i spakira. Konačno, paket se mora preusmjeriti kroz neku kombinaciju zrakoplova, kamiona i kombija, zajedno s ostalim paketima, na način koji osigurava da će svi paketi učinkovito stići na odredišta.

Sad zamislite da ste morali sve te stvari koordinirati kao kupac. Nikad ne biste naručili papirnate ručnike jer je to prekomplicirano i dugotrajno, a imate i boljih poslova. Srećom, cijelo je iskušenje apstrahirano daleko od vas. Dug je, međusobno povezan lanac računalnih sustava i ljudskih procesa zbog kojih se ti papirnati ručnici prikazuju na vašem pragu, ali sve o čemu morate razmišljati je pritiskanje gumba.

To su API-ji za programere. Oni uzimaju ogromnu količinu složenosti i definiraju relativno jednostavan skup interakcija koje možete koristiti umjesto da sve to radite sami. U bilo kojem softverskom projektu vjerojatno koristite izravno desetke, ako ne i stotine API-ja, a svaki od tih API-ja oslanja se na druge API-je i tako dalje.

Javni API-ji i API integracija

API-ji su dugogodišnji koncept u računalnom programiranju i godinama su dio alata za programere. Tradicionalno, API-ji su se koristili za povezivanje komponenata koda koje se izvode na istom stroju. Porastom sveprisutnog umrežavanja postalo je dostupno sve više i više javnih API-ja, ponekad zvanih i otvoreni API-ji . Javni API-ji okrenuti su prema van i dostupni su putem Interneta, što vam omogućuje pisanje koda koji komunicira s kodom drugih dobavljača na mreži; taj je postupak poznat pod nazivom API integracija.

Ove vrste miješanja koda omogućuju korisnicima miješanje i podudaranje funkcija različitih dobavljača na vlastitim sustavima. Na primjer, ako koristite softver za automatizaciju marketinga Marketo, tamo možete sinkronizirati svoje podatke s Salesforce CRM funkcionalnošću.

„Otvoreno“ ili „javno“ u ovom se kontekstu ne bi trebalo tumačiti kao „besplatno“. I dalje morate biti Marketo i Salesforce kupac da bi ovo uspjelo. Ali dostupnost ovih API-ja čini integraciju mnogo jednostavnijim postupkom nego što bi inače bio. ( ima sjajan popis javnih API-ja o kojima biste trebali znati.)

Web usluge i API-ji

Možda se sjećate izraza w eb usluge iz ranih 00-ih i mislite da ideja otvorenog API-ja zvuči prilično slično. Zapravo, web usluga specifična je vrsta otvorenog API-ja, ona koja zadovoljava prilično kruti skup specifikacija, uključujući i to da su navedene u jeziku opisa web usluga (WSDL), XML varijanti.

Web usluge trebale su se koristiti kao dio uslužno orijentirane arhitekture (SOA). Kao što objašnjava blog o nordijskim API-ima, to je web uslugama donijelo loše ime, jer SOA-i nikada nisu opravdali svoj potencijal. Napredak u tehnikama koje se koriste za komunikaciju od usluge do usluge - osobito lakši i fleksibilniji REST - također su ostavili web usluge pomalo iza sebe u svijetu javnih API-ja.

API-ji REST

Web usluge izvorno su dizajnirane za komunikaciju pomoću SOAP-a (Simple Object Access Protocol), protokola za razmjenu poruka koji XML dokumente šalje putem HTTP-a. Međutim, danas većina internetskih API-ja koristi REST - Reprezentativni prijenos države - kao arhitektonski stil.

REST je formalno predstavio Roy Fielding u svojoj doktorskoj disertaciji 2000. To je skup arhitektonskih komponenata, principa dizajna i interakcija koji se koriste za izgradnju distribuiranih sustava koji uključuju medije bilo koje vrste (tekst, video, itd.). U svojoj osnovi, REST je stil gradnje sustava koji omogućava fleksibilnu komunikaciju i prikaz informacija na webu, istovremeno pružajući strukturu potrebnu za jednostavnu izgradnju komponenata opće namjene.

U REST API-ju, resurs može biti gotovo sve, ali primjeri uključuju korisnika, popis tweetova i trenutne rezultate pretraživanja tweetova. Svaki od ovih resursa može se adresirati na identifikatoru resursa , što je u slučaju internetskih REST API-ja obično URL, kao što je //api.twitter.com/1.1/users/show?screen_name=twitterdev. Kada aplikacija zatraži resurs pomoću identifikatora, API isporučuje trenutni prikaz tog resursa aplikaciji u formatu koji aplikacija može potrošiti, poput JPEG slike, HTML stranice ili JSON-a.

Jedan od velikih razlika REST-a je taj što uključuje slanje podataka aplikaciji koja zahtjeva. Iako ovo pruža veliku fleksibilnost, dopuštajući aplikaciji da radi sve što želi s podacima, to dolazi po cijenu učinkovitosti. Slanje podataka putem weba na obradu prilično je sporo u usporedbi s obavljanjem obrade tamo gdje se podaci nalaze i slanjem rezultata.

Naravno, problem s "učinkovitim" pristupom je taj što bi sustavi koji hostiraju podatke prije vremena morali znati što aplikacije žele s tim raditi. Dakle, kako bi se izradio API koji ima opću namjenu upotrebljivosti i fleksibilnosti, REST je put kojim treba ići.

Primjeri API-ja

Postoji mnoštvo javnih API-ja s kojima možete komunicirati, mnogi iz industrijskih zvjezda. Sposobnost programskog pristupa kodu neke platforme putem API-ja je ono što ih u osnovi čini platformom. Neki istaknuti primjeri API-ja uključuju:

  • Google API-ji koji vam omogućuju povezivanje koda sa cijelim nizom Googleovih usluga, od Karti do Prevoditelja. API-ji su toliko važni za Google da su stekli Apigee, vodeću platformu za upravljanje API-jem.
  • Facebook API-ji koji vam omogućavaju programski pristup Facebook-ovom društvenom grafikonu i marketinškim alatima. (Tvrtka ograničava samo kojim korisničkim podacima možete pristupiti putem ovih API-ja u posljedicama Cambridge Analytice i drugih skandala.)

Da bismo zaista stekli osjećaj kako API-ji rade, zaronimo u dvije stvari: Java API koji Java programeri koriste za interakciju s Java platformom i Twitter API, javni API koji biste koristili za interakciju s društvenim mrežama usluga umrežavanja.

Java API

Java API je biblioteka softverskih komponenata dostupna "iz kutije" svima koji su instalirali Java Development Kit. Te komponente provode uobičajene zadatke i općenito povećavaju produktivnost jer programeri ne moraju svaki put krenuti ispočetka. Jedna od osnovnih komponenti koja se koristi u softveru je nešto što se naziva Lista, koja, kao što ste mogli očekivati, prati popis stavki. Java API definira što možete učiniti s popisom: dodavanje stavki, sortiranje popisa, određivanje je li stavka na popisu itd. Također određuje kako izvršiti te radnje. Da biste sortirali popis, morate navesti kako želite sortirati popis: abecedno, numerički silazno, najsvjetlije do najtuplje boje itd.

Twitter API

Twitter API je internetski JSON API koji programerima omogućuje programsku interakciju s Twitter podacima. Za razliku od Java API-ja, koji je uključen u Java Development Kit, Twitter API je internetski API. Moraju mu se pristupiti upućivanjem zahtjeva putem Interneta uslugama koje Twitter hostira.

S internetskim API-jem kao što je Twitter, vaša aplikacija šalje HTTP zahtjev, baš kao što to čini web preglednik. No umjesto da se odgovor isporuči kao web stranica, za ljudsko razumijevanje, on se vraća u formatu koji aplikacije mogu lako raščlaniti. U tu svrhu postoje različiti formati, a Twitter koristi popularan i jednostavan format koji se zove JSON. (Ako niste upoznati s JSON-om, možda ćete ovdje potrajati nekoliko minuta čitajući ga.)

Jedan od osnovnih elemenata na Twitteru je tweet. Twitter API vam govori što možete učiniti s tweetovima: potražite tweetove, izradite tweet, omiljeni tweet. Također vam govori kako izvršiti ove radnje. Da biste pretraživali tweetove, morate odrediti kriterije pretraživanja: pojmove ili hashtagove koje treba tražiti, geolokaciju, jezik itd.

API dizajn

Dizajn API-ja postupak je kojim se formuliraju "što" i "kako" API-ja. Kao i kod bilo čega drugog što se može stvoriti, različiti nivoi razmišljanja i brige ulažu se u dizajn API-ja, što rezultira različitim nivoima kvalitete API-ja. Dobro dizajnirani API-ji dosljedno se ponašaju, uzimaju u obzir njihov kontekst i imaju na umu potrebe svojih korisnika.

Dosljedno ponašanje unutar API-ja uvelike utječe na brzinu kojom se on može naučiti i vjerojatnost da programeri pogriješe kada ga koriste. Općenito, API-ji koji izvode slične radnje trebali bi se ponašati slično, bez obzira na njihove tehničke razlike. Za primjer nedosljednog API-ja, pogledajmo dva načina za dodavanje stavke na Popis u Javi:

Iako dvije metode dodavanja stavki na popis čine istu stvar, njihovi su povratni tipovi (logički i void) različiti. Programeri koji koriste ovaj API sada moraju pratiti koja metoda vraća koju vrstu, čineći API težim za učenje i njegovom upotrebom sklonijim pogreškama. To također znači da kôd koji koristi ove metode postaje manje fleksibilan, jer se mora promijeniti ako želite promijeniti način dodavanja elemenata.

Uzimanje u obzir konteksta je još jedan oblik dosljednosti, iako ima veze s čimbenicima izvan API-ja. Sjajan, ne-softverski primjer toga je kako pravilo ceste - promet desnicom ili promet lijevom stranom - utječe na dizajn automobila u različitim zemljama. Dizajneri automobila uzimaju u obzir taj faktor okoliša kada lociraju vozačevo sjedalo s desne ili lijeve strane automobila.