Rakendusliides

**Rakendusliides** ehk **programmiliides** ehk **rakendustarkvara liides** ehk **API** (inglise keeles *application programming interface*) on arvutiprogrammides alamprogrammi määratluste, protokollide ja tööriistade komplekt rakendustarkvara ehitamiseks. Üldiselt on tegemist eri tarkvarakomponentide vahelise selgelt määratletud sidevahendite kogumiga. Rakendusliidese ülesanne on lihtsustada tarkvara arendamist, andes ette programmiplokid, mida programmeerijad kasutavad lõpliku arvutiprogrammi koostamisel. Rakendusliides võib olla veebipõhine süsteem, operatsioonisüsteem, andmebaasi süsteem, arvuti riistvara või tarkvara kogum. Rakendusliidese spetsifikatsiooni võib esitleda mitmesugusel kujul, kuid tihti sisaldab see rutiinide, andmestruktuuride, objektiklasside, muutujate või protseduuri kutsumise kirjeldusi. Näiteid rakendusliidestest: POSIX, Microsoft Windows API, C++ Standard Template Library ja Java API'id. Tavaliselt käib rakendusliidestega kaasa dokumentatsioon, et hõlbustada nende kasutamist.

## Otstarve
Samamoodi, nagu lihtsustab graafiline kasutajaliides arvutiprogrammide kasutamist, lihtsustab rakendusliides programmeerijatel programmide kirjutamist. Rakendusliides lihtsustab programmeerimist, eemaldades alusimplementatsiooni ja jättes alles ainult objektid ja toimingud, mida programmeerijal vaja läheb. Kui graafiline kasutajaliides loob kasutajale näiteks nupu, mida vajutades sorteeritakse e-kirjad vanuse järgi, siis rakendusliides pakub programmeerijale funktsiooni, mis sorteerib failid teatud omaduse järgi, ilma et ta peaks teadma ja aru saama sellest, kuidas failisüsteem need failid ära sorteerib.

## Kasutusalad

### Teegid ja tarkvararaamistikud
Rakendusliides on tavaliselt seotud tarkvara teekidega. Rakendusliides kirjeldab ja määrab reeglikogumi eeldatava käitumise, kuid teek on reeglikogumi implementatsioon. Ühel rakendusliidesel saab olla mitu (või mitte ühtegi) implementatsiooni eri teekide näol, mis kasutavad sama rakendusliidest. Rakendusliidese eraldamine tema implementatsioonidest võimaldab ühes keeles kirjutatud programmidel kasutada teises keeles kirjutatud teeke. Näiteks, kuna Scala ja Java kompileeruvad ühilduvaks baitkoodiks, siis Scala programmeerijad saavad kasutada ükskõik millist Java API'i.

Rakendusliidese kasutus varieerub programmeerimiskeelte vahel. Rakendusliides protseduurilise programmeerimiskeele jaoks nagu Lua koosneb põhiliselt algrutiinidest, et käivitada kood, muuta andmeid või käsitleda vigu. Kuid rakendusliides objektorienteeritud programmeerimiskeele jaoks nagu Java, rakendab klasside kirjeldused ja nende meetodid.

Programmeerimiskeelte vahelised seosed on samuti rakendusliidesed. Sidudes ühe programmeerimiskeele funktsioonid ja võimalused teises keeles koostatud teegiga, võimaldavad programmeerimiskeelte vahelised seosed kasutada ühes keeles kirjutatud teeki või teenust, teises programmeerimiskeeles programmeerides. Liidesegeneraatorid nagu SWIG ja F2PY hõlbustavad selliste teekide loomist.

Rakendusliides võib olla ka seotud tarkvararaamistikuga – tarkvararaamistik võib koosneda mitmest teegist, mis implementeerivad mitut rakendusliidest, kuid erinevalt rakendusliidese tavapärasest kasutusest on tarkvararaamistiku funktsionaalsed võimalused laiendatud tarkvararaamistikku endasse, uute klasside lisamisega. Lisaks võib üldine programmipõhine juhtimisvoog olla väljaspool kutsuja kontrolli ja olla hoopis tarkvararaamistiku juhtimise all. Kokkuvõtvalt koosneb tarkvararaamistik mitmest eri teegist ja nende teekide kasutus on tarkvararaamistikku endasse sisse ehitatud. Samuti kontrollib tarkvararaamistik ise, kuidas ta neid teeke kasutab.

### Operatsioonisüsteemid
Rakendusliides saab määrata rakenduse ja operatsioonisüsteemi vahelise liidese. POSIX näiteks määrab levinud rakendusliideste kogu, mille komponendid võimaldavad rakendusel, kirjutatud ühe POSIX vastava operatsioonisüsteemi jaoks, kompileeruda teisel POSIX vastaval operatsioonisüsteemil.

Microsoft peab tähtsaks tagurpidi ühilduvate rakendusliideste loomist, et vanemaid rakendusi saaks käivitada uuemal Windowsi versioonil. Näiteks Microsofti Windows API (Win32) teek.

Rakendusliides erineb rakenduse binaarliidesest selle poolest, et rakendusliides on algkoodil baseeruv, kuid binaarliides on kahendfailil baseeruv. Näiteks POSIX pakub rakendusliideseid, kuid Linux Standard Base pakub binaarliideseid.

### Kaugühenduse rakendusliidesed
Kaugühenduse rakendusliidesed võimaldavad tarkvaraarendajatel muuta ressursse protokollide kaudu. Näiteks Java Database Connectivity rakendusliides lubab arendajatel saata eri andmebaasidesse päringuid. Java Remote Method Invocation rakendusliides kasutab Java Remote Method protokolli, et lubada päringute kaugsaatmine. See teeb andmebaaside halduse palju kergemaks. Kaugühenduse rakendusliidesed on kasulikud objektorienteeritud programmeerimises objektidega töötamisel.

### Veebipõhised rakendusliidesed
Veebipõhised rakendusliidesed on liidesed, mille kaudu käib suhtlus ettevõtte ja selle ressursse kasutava rakenduse vahel. Rakendusliides pakub programmeeritavaid teeke rakenduste hulgale, mis teenindavad eri kasutajaid. Veeblehekülgede arendamisel on veebipõhised rakendusliidesed defineeritud Hüperteksti edastusprotokolli (HTTP) päringute ja vastavate vastustega, mis on tavaliselt XML või JSON formaadis. Näiteks on veebipoe leheküljele lisatud rakendusliides, mis koostab statistikat ostetud kauba kättesaamisaegade kohta, ilma et poe andmebaasi oleks vaja koostada vastav tabel andmetega.

Kuigi veebipõhilised rakendusliidesed on olnud sünonüümiks veebiteenuste jaoks, on viimane trend (nii-öelda Veebis 2.0) liikunud eemale SOA protokollide ja teenusele orienteeritud arhitektuurist (SOA). Pigem kasutatakse rohkem REST-stiilis veebiressursse ja ressursile orienteeritud arhitektuuri (ROA). Suur roll selles on ressursi kirjelduse tarkvararaamistikul (RDF). Veebipõhised rakendusliidesed lubavad eri liideste kombineerimist. Sotsiaalmeedia veebilehekülgede rakendusliidesed lubavad andmevahetust eri rakenduste vahel. Sellisel juhul ilmuvad postitatud andmed ühes kohas automaatselt ka teises kohas. See lubab ka automaatset andmete uuendamist üle mitme rakenduse. Näiteks kui lisada uus pilt Instagrami, siis teine veebileht, mis kasutab Instagrami andmeid, saab otsese ligipääsu lisatud pildile. Või kui ühendada mõni teine rakendus või veebiteenus oma Google'i kasutajaga, siis Google'i kasutaja andmete muutmisel muutuvad ka andmed kõikides teistes rakendustes ja veebiteenustes, mis olid Google'i kasutajaga seotud.

### Näiteid rakendusliidestest
* ASPI  väikearvutisüsteemi liideste jaoks
* Cocoa ja Carbon Macintoshi süsteemidele
* DirectX Microsoft Windowsi süsteemidele
* Java API'id
* ODBC Microsoft Windowsi süsteemidele
* OpenALi heli rakendusliides
* OpenCLi arvutusliidesed protsessorite jaoks
* OpenGLi graafika rakendusliides
* OpenMPi programmeerimisliides Unixi ja Microsoft Windowsi süsteemidele
* SAPI serveri rakenduste programmeerimise rakendusliides

## Vaata ka
*Programmeerimine
*Programmeerimiskeel

## Viited