Lietojumprogrammas saskarne

**Lietojumprogrammas saskarne** (, **API**) ir iepriekš definētu klašu, procedūru, funkciju, struktūru un konstanšu kopums, kas tiek pasniegts kā pielikums (bibliotēkas, servisi), kuru iespējams izmantot ārējiem programmatūras produktiem. Izmanto programmētāji, lai rakstītu dažādus programmu pielikumus.

## API kā pielikumu integrācijas līdzeklis
API nosaka funkcionalitāti, kuru nodrošina programma (modulis, bibliotēka).

Ja programmu (moduli, bibliotēku) uztvert kā „melno kasti”, tad API – tā ir "svira", kas ir pieejama lietotājiem un ar kuru tie var šo kasti pārvaldīt.

Programmatūras komponentes mijiedarbojas cita ar citu, izmantojot API. Pie tam komponentes parasti veido hierarhiju - augsta līmeņa komponentes izmanto zema līmeņa komponenšu API, un tās, savukārt, izmanto zemāka līmeņa komponenšu API.

Pēc šāda principa darbojas Datu pārraides protokoli caur internetu. Standarta protokolu steks (tīkla modelis OSI) satur 7 līmeņus (sākot ar fizisko slāni bitu līmenī un beidzot ar protokolu pielikumu līmeni). Katrs slānis izmanto iepriekšējā līmeņa funkcionalitāti un nodrošina vēlamo funkcionalitāti nākamajam līmenim.

Jāatzīmē, ka protokolu koncepcija ir tuva pēc nozīmes jēdzienam API. Abi ir funkcionalitātes abstrakcija, tikai pirmajā gadījumā runa ir par datu pārraidi, bet otrajā par pielikumu mijiedarbību.

API funkciju un klašu bibliotēkas ietver iezīmju aprakstus un funkciju semantiku.

### Funkciju iezīmes
Funkcijas iezīme - daļa no vispārējās funkcijas deklarācijas, kura ļauj pārraidīšanas rīkiem identificēt funkciju starp citām funkcijām. Dažādās programmēšanas valodās ir dažāda izpratne par funkciju iezīmēm, kas ir cieši saistīta ar iespējamo funkciju pārslodzi šajās valodās.

Dažreiz tiek izdalītas izsaukšanas iezīmes un realizēšanas iezīmes. Izsaukšanas iezīme parasti tiek veidota pēc izsaukuma funkcijas sintakses, ņemot vērā dotās funkcijas redzamības apgabalus, funkcijas nosaukums, faktisko argumentu secība un rezultāta tipu.
Piemēram, C++ programmēšanas valodā vienkārša funkcija tiek atpazīta kompilatorā pēc tās vārda un tam sekojošajiem argumentiem, kas sastāda šīs funkcijas iezīmi šajā valodā.

Java programmēšanas valodā funkcijas iezīmi sastāda tās nosaukums un parametru tipu secība.

### Funkcijas semantika
**Funkcijas semantika** - tas ir apraksts par to, ko šī funkcija dara. Funkcijas semantika ietver sevī aprakstu par to, kas tiek uzskatīts par funkcijas izpildes rezultātu, kā un no kā šis rezultāts ir atkarīgs. Parasti rezultāts ir atkarīgs tikai no funkcijas argumentu vērtībām, bet atsevišķos moduļos ir stāvokļa jēdziens - tad funkcijas rezultāts var būt atkarīgs no šī stāvokļa, un, turklāt, par rezultātu var kļūt šī stāvokļa izmaiņa. Šo atkarību un izmaiņu loģika attiecas uz funkciju semantiku. Pilnīgs funkcijas semantikas apraksts ir izpildāmās funkcijas kods vai funkcijas matemātiskā definīcija.

## Operētājsistēmu API. Problēmas, kas saistītas ar API daudzveidību
Gandrīz visām operētājsistēmām (Unix, Windows, Mac OS uc) ir API, ar kura palīdzību programmētāji var izveidot pielikumus attiecīgajai operētājsistēmai. Galvenais operētājsistēmu API – tas ir daudzie sistēmas pieprasījumi.

Programmēšanas industrijā API standartam ir svarīga loma kopīgas funkcionalitātes nodrošināšanai, jo tie garantē, ka visas programmas, kuras izmanto kopējo API, strādās tikpat labi. Attiecībā uz API GUI, tas nozīmē, ka programmām būs līdzīgas lietotāju saskarnes, kas atvieglo jaunu programmatūras produktu apguvi.

No otras puses dažādu operētājsistēmu API atšķirības būtiski sarežģī pielikumu pārnešanu starp dažādām platformām. Eksistē dažāda veida risinājumi, kā risināt šo problēmu - uzrakstīt „starpposma” API (*[[Qt (ietvars)|Qt]]*, gtk, uc), bibliotēku uzrakstīšana, kuras pārveido vienas OS sistēma izsaukumus otras OS sistēmas izsaukumos (piemēram, Wine, cygwin uc), ieviešot kodēšanas standartus programmēšanas valodām (piem., standarta C valodas bibliotēka).

Jāatzīmē arī tas, ka programmētāja rīcībā bieži vien ir vairākas atšķirīgas API, kas ļauj sasniegt to pašu rezultātu. Turklāt katra API parasti tiek īstenota, izmantojot programmatūras zemāka līmeņa API komponenšu abstrakcijas.

Piemēram, lai pārlūkprogrammā ieraudzītu «Sveika, pasaule!» rindiņu, pietiek ar HTML dokumenta izveidi ar minimālu galveni un ķermeni, kas satur konkrēto teikumu. Kas notiek, kad pārlūkprogramma atver šo dokumentu? Pārlūkprogramma nodod šī faila nosaukumu bibliotēkai, kas apstrādā HTML dokumentus, kura, savukārt, ar operētājsistēmas API izlasa šo failu un pēc tam secīgi caur API izsauc standarta grafisko primitīvu operāciju bibliotēku, kas izpilda „ekrāna attīrīšanu” un teksta uzrakstīšanu izvēlētajā formātā (« Sveika, pasaule! »). Šo operāciju laikā standarta grafisko primitīvu operāciju bibliotēka vēršas pie loga saskarnes bibliotēkas ar attiecīgo pieprasījumu, šī bibliotēka vēršas pie operētājsistēmas API, lai ierakstītu datus Videokartes buferī.

Tajā pašā laikā gandrīz katrā līmenī patiesībā eksistē vairākas iespējamās API alternatīvas. Piemēram, dokumentu var rakstīt nevis HTML, bet LaTeX valodā, teksta attēlošanai var izmantot jebkuru pārlūkprogrammu. Dažādas pārlūkprogrammas parasti izmanto dažādas HTML bibliotēkas, un, turklāt, to visu var apkopot, izmantojot dažādu primitīvu bibliotēkas un dažādas operētājsistēmas.

Galvenās problēmas, kas saistītas ar API daudzveidību ir:

* Sarežģīta koda pārnešana no vienas API sistēmas uz citu (piemēram, mainot operētājsistēmas);
* Funkcionalitātes zudums, pārejot no zemāka uz augstāku līmeni.

## Izplatītākās API
### Operētājsistēmu API
* POSIX 
* Windows API 
* Cocoa 
* Linux Kernel API 
* OS/2 API 
* Amiga ROM Kernel

### Grafisko saskarņu API

* OpenGL
* OpenVG
* X11
* Qt
* GTK
* Motiff
* Tk
* GDI
* GDI+
* Direct3D (daļa no DirectX)
* DirectDraw (daļa no DirectX)
* Zune
* SDL

### Skaņu pārvaldības saskarņu API
* DirectSound (daļa no DirectX)
* DirectMusic (daļa no DirectX)
* OpenAL

### Autentificēšanas sistēmu API
* BioAPI 
* PAM

### Web API
Tiek izmantots tīmekļa lapu izstrādē, un parasti tas ir HTTP pieprasījumu kopums, un HTTP atbilžu struktūras noteikšanas kopums, kas izmanto XML vai JSON formātus. «Web API» praktiski ir sinonīms Tīmekļa pakalpēm. Tīmekļa saskarnes, kas nodrošina vairāku servisu kombināciju jaunajos lietojumos tiek kvalificētas kā hibrīdi.

## Atsauces

## Ārējās saites