1
Application Programming Interface
O interfata API este un cod sursa oferit de catre
sistemul de operare sau o librarie pentru a permite apeluri la
serviciile care pot fi generate din API-uri respective de catre un
program.
Un program care ofera functionalitatea descrisa de interfata API este
implementarea interfetei API. Interfata API in sine este abstracta, in
sensul ca specifica instanta dar nu se implica in detalii de
implementare.
Termenul API este folosit in 2 sensuri:
- O interfata coerenta care consta din cateva clase
sau cateva seturi de functii sau proceduri interconectate.
- Un singur punct de intrare, cum ar fi o
metoda, o functie sau o procedura.
Doua Interfete API foarte cunoscute sunt Single UNIX Specification si
Microsoft Windows API.
Interfete API sunt deseori incorporate in Software Development Kit
(SDK) .
Modelul de design a Interfetelor API
Exista o multime de modele de design a Interfetelor
API. Cele prevazute pentru executie rapida deseori consta din functii,
proceduri, variabile si structuri de date. Exista si alte modele cum ar
fi interpretatori (emulatori) care evalueaza expresii in
ECMAScript (cunoscut sub nume JavaScript) sau alt layer abstract,
oferind programatorului posibilitatea de a evita implicarea in
relatiile functiilor cu nivelul inferior al abstractiei.
Unele Interfete API, cum sunt cele standard pentru un sistem de
operare, sunt implementate ca librarii de cod separate care sunt
distribuite impreuna cu sistemul de operare. Altele au integrata
functionalitatea interfetei API direct in aplicatie. Microsoft Windows
API este distribuita cu sistemul de operare. Interfetele API pentru
sisteme embedded, cum sunt console de jocuri video, in general intra in
categoria API-urilor integrate direct in aplicatie.
O interfata API care nu necesita drepturi mari de acces sunt numite
"open" (OpenGL ar fi un exemplu).
Doua linii generale ale diplomatiei de publicare a Interfetelor API:
- Unele companii protejeaza informatiile despre
Interfete API. De exemplu, Sony a facut Interfata API oficiala pentru
PlayStation 2 disponibila doar dezvoltatorilor cu drepturi speciale.
Asta a dat posibilitatea companiei Sony de a controla cine scrie jocuri
pentru PlayStation 2.
- Unele companii fac Interfete API disponibile in
public. De exemplu, Microsoft are o mare parte a informatiilor despre
Interfete API disponibile freeware, ce ofera posibilitatea de
dezvoltare a programelor pentru platforma Windows
Cateva exemple de Interfete API:
- Single UNIX Specification (SUS)
- Microsoft Win32 API
- Java Platform, Enterprise Edition API's
- OpenGL cross-platform API
- DirectX for Microsoft Windows
- Google Maps API
- Wikipedia API
- Simple DirectMedia Layer (SDL)
- svgalib pentru Linux si FreeBSD
- Carbon si Cocoa pentru Macintosh OS
Microsoft Windows API's
Windows API, neoficial WinAPI, este numele dat de
catre Microsoft pentru un set de Interfete API disponibile in sisteme
de operare Microsoft Windows. Aceste interfete au fost construite
pentru a fi folosite de catre programatori C/C++ si sunt cel mai direct
mod de a interactiona cu sistemul Windows pentru aplicatii software.
Accesul la nivel inferior la sistemul Windows, in general necesar
pentru drivere, este oferit de catre Windows Driver Foundation in
versiunea curenta a Windows-ului.
In sisteme de operare Windows este disponibil un Software Development
Kit (SDK), care ofera documentatia si unelte pentru a permite
dezvoltatorilor crearea aplicatiilor folosind Interfete API si
tehnologii Windows asociate.
Istoria
Interfetele API Windows au oferit dintotdeauna acces
la structura sistemelor Windows. Din acest motiv ele sunt construite in
mare parte pentru programatori. Programatorilor li s-a oferit multa
flexibilitate si putere in dezvoltarea aplicatiilor. In aceasi timp
aplicatiilor Windows li s-a impus mare responsabilitate in manipularea
nivelelor inferioare.
Pe parcurs au fost facute multe modificari la sistemul de operare
Windows si Interfetele API Windows au fost de asemenea schimbate pentru
a tine pasul cu sistemul de operare. Interfetele API pentru Windows 1.0
au avut mai putin de 450 de functii, in comparatie cu API-uri moderne
care au mii de functii. Avand asta in vedere, Microsoft a pus mare
accent pentru compatibilitatea inversa, adica compatibilitatea
API-urilor noi cu API-uri din urma.
Una dintre cele mai mari schimbari facute de Microsoft era schimbarea
de la Sisteme de Operare pe 16 biti la Sisteme de Operare pe 32 biti.
Pentru a oferi compatibilitate, Microsoft a scris, pentru noile
versiuni pe 32 biti, o schema complexa de Interfete API care permiteau
codului scris pe 32 biti sa apeleze cod scris pe 16 biti (si invers in
unele cazuri limitate).
Aproape fiecare noua versiune a sistemului de operare Windows a
introdus schimbari in Interfete API Windows. Numele a ramas consistent
intre diferite versiuni. In cele din urma Microsoft a schimbat numele
din Win32 API in Windows API.
Desi Microsoft detine drepturile de autor asupra Interfetelor API
Windows, in general este acceptat ca alti producatori sa emuleze
Windows oferind Interfete API identice. Proiectul Wine este cea mai
cunoscuta incercare de a oferi compatibilitate Interfetelor API Windows
pe sisteme de operare Unix-like. ReactOS a mers cu un pas mai departe
si a oferit emulare intregului sistem de operare Windows. HX
DOS-Extender este alt proiect care emuleaza Interfetele API Windows ,
pentru a permite rularea programelor Windows mai simple din linia de
comanda DOS.
Compilatoare suportate
Pentru a dezvolta software care foloseste
Interfetele API Windows, este nevoie de compilator care poate importa
si manipula fisierele DLL si obiectele COM caracteristice
Microsoft-ului. Compilatorul trebuie sa accepte dialectul limbajelor C
sau C++ si sa manipuleze IDL (interface definition language) fisiere si
fisiere header care expun denumirile functiilor interioare ale
Interfetelor API. Aceste compilatoare, unelte, librarii si fisiere
header sunt impreunate in Microsoft Platform SDK (Software Development
Kit). Pentru mult timp familia de compilatoare si unelte Microsoft
Visual Studio si compilatoare Borland, au fost singurele care puteau la
cerintele sus mentionate. Acuma exista MinGW si Cygwin care ofera
interfete bazate pe GNU Compiler Collection. LCC-Win32 este disponibil
pentru utilizare non-comerciala, continand compilator C si intretinut
de catre Jacob Navia. Pelles C este compilator C gratuit oferit de
catre Pelle Orinius.
Componentele Interfetelor API in Windows
Functionalitatea oferita de Interfete API Windows
poate fi grupata in sapte categorii:
- Base Services (Servicii de baza)
Ofera acces resurselor fundamentale disponibile in
Windows. Sunt incluse sisteme de fisiere,
dispozitive, procese, fire de executie, acces la registri
Windows si tratarea erorilor. Aceste functii se afla
in fisierele kernel32.dll si advapi32.dll pe sisteme de operare pe 32
biti.
- Graphics Devise Interface (Interfata Dispozitivelor
Graice)
Ofera functionalitate pentru afisarea continutului
grafic pe monitoare, imprimante si alte dispozitive
de iesire. Se afla in gdi32.dll pe sistemele de operare pe 32 biti.
- User Interface (Interfata utilizator)
Ofera functionalitati pentru a crea si manipula
ferestre si majoritatea controlaelor de baza, cum ar
fi butoane si scrollbar-uri, pentru a recepta intrare de la mouse
si tastatura, impreuna cu alte functionalitati
asociate cu GUI (Graphical User Interface). Aceste functii se afla in
user32.dll. De la Windows XP, controlele de baza se afla in comctl.dll,
impreuna cu controalele generale (Common Control Library).
- Common Dialog Box Library (Biblioteca Ferestrerol
de Dialog Generale)
Ofera aplicatii si ferestre de dialog standard
pentru deschiderea si salvarea fisierelor, alegerea
culuorii si fontului, etc. Linraria se afla in fisier numit
comdlg32.dll si mai tarziu de la Windows 95 in
fisier shlwapi.dll. Este grupat sub categoria User Interface a
Interfetelor API.
- Common Control Library (Libraria de Control
Generala)
Ofera acces aplicatiilor la unele controale avansate
ale sistemului de operare. Acestea includ status
bars, progress bars, toolbars si tabs. Libraria se afla intr-un fisier
DLL numit comctl32.dll. Este grupat sub categoria User Interface a
Interfetelor API.
- Windows Shell
Componenta Interfetelor API Windows care care
permite aplicatiilor acces la functionalitatile
shell ale sistemului de operare, la fel ca si schimbarea lui in
vederea inbunatatirii. Acesta componenta se afla in fisierul
shell32.dll si mai tarziu incepand cu Windows 95 in shlwapi.dll. Este
grupat sub categoria User Interface a Interfetelor API.
- Network Services (Servicii de retea)
Ofera acces la posibilitatie sistemului de operare
legate de retea. Subcomponentele lui includ NetBIOS, Winsock, NetDDE,
RPC si multe altele.
Interfete API asociate Web
Internet Explorer contine multe Interfete API care
sunt la randul sau folosite de alte aplicatii. Aceste Interfete API pot
fi considerate ca parte a Interfetelor API Windows. Internet Explorer
ofera:
- Controlul browser-ului web incorporat, aflat in
shdocvw.dll si mshtml.dll.
- Servicii URL, aflate in urlmon.dll. Aplicatiile pot
deasemenea oferi serviciile proprii URL.
- Librarii pentru suport multilingvisit si
international (mlang.dll)
- DirectX Transforms, un set de filtre pentru imaigni
- Suport XML (MSXML componente)
- Acces la Windows Adress Book
Interfete API pentru interactionare intre programe
In mare parte Interfetele API Windows se ocupa de
interactionare intre Sistemul de Operare si aplicatii care ruleaza pe
el. Pentru a face posibila comunicarea intre diferiate aplicatii,
Microsoft a dezvoltat o serie de tehnologii incorporate in Interfetele
API Windows. Incepand cu Dynamic Data Exchange (DDE), care a fost
inlocuit cu Object Linking and Embedding (OLE) si mai tarziu cu
Component Object Model (COM) .
Interfete API asociate multimedia
Microsoft a oferit un set de interfete API numit
DirectX ca fiind incorporat in toate kiturile de instalare inca de la
Windows 95 OSR2. DirectX ofera un set de servicii pentru jocuri si
multimedia.
Microsoft DirectX
1
Microsoft DirectX este o colectie de Interfete API folosita pentru
manipularea taskurilor legate de multimedia, in special programarea
jocurilor si video, pe platforme Microsoft.
DirectX este de asemenea folosit si de alti producatori software, in
mare parte in sectorul de inginerie, din cauza abilitatii de redare
rapida a obiectelor 3D de inalta calitate.
Atat DirectX runtime cat si software development kit (kitul de
dezvoltare soft) sunt disponibilie gratuit, dar sunt proprietate
Microsoft si sunt closed-source (fara posibilitate de schimbare,
rescriere, suprascriere). DirectX a fost initial redistribuit de catre
dezvoltatori de jocuri impreuna cu kiturile de instalare, dar in ultim
timp DirectX a fost inclus in kit de instalare a sistemului de operare
(sau in Service Packs). Unii dezvoltatori de jocuri inca mai includ
DirectX in kitul de instalare si ofera posibilitate de a-l instala (sau
de a face update) dupa instalarea jocului.
Cel mai recente versiuni ale DirectX-ului sunt DirectX 10 si DirectX
9.0L, disponibile exclusiv pentru Windows Vista (motivul fiind, dupa
cum sustine Microsoft, faptul ca exista schimbari in arhitectura
grafica a Windowsului si din cauza introducerii Windows Display Driver
Model).
Interfetele API din DirectX
Majoritatea Interfetelor API din DirectX sunt in
forma de obiecte COM.
Componentele care le contine DirectX sunt:
- DirectX Graphics, alcatuit din doua Interfete API
(DirectX 8.0 sau mai mult):
• DirectDraw: pentru generarea de obiecte grafice 2D
(acum dezaprobat, desi este inca folosit de multi programatori)
• Direct3D (D3D): pentru generarea obiectelor grafice
in 3D
- DirectInput: pentru tastaura, mouse, joustick sau
alte controlere
pentru jocuri (nu mai este folosit decat pentru Xinput, in controlere
la Xbox 360)
- DirectPlay: pentru comunicare jocurilor in retea
(Impreuna cu
DirectInput a fost folosit ultima data in DirectX 8. Acuma este
dezaprobat)
- DirectSound: pentru redarea sunetului si
inregistrarea sunetului in forma wave
• DirectSound3D (DS3D): pentru redarea sunetelor 3D
- DirectMusic: pentru redarea sunetelor autorizate de
catre DirectMusic Producer
- DirectX Media: contine DirectAnimation pentru
animatii web 2D,
DirectShow pentru redare multimedia, DirectX Transform pentru
interactionare web si Direct3D Retained Mode pentru obiecte grafice 3D
de nivel inalt. DirectShow mai contine DirectX Plugins pentru
procesarea semnalului audio si DirectX Video Acceseration pentru a
accelera redarea video.
- DirectX Media Objects: suport pentru pentru obiecte
cu streamuri cum sunt encodere, decodere si efecte
- DirectSetup: pentru instalarea componentelor
DirectX (care de fapt nu prea este API)
Istoria
Spre sfarsitul anilor 1994 Microsoft era pe punct de
a lansa
urmatorul sistem de operare - Windows 95. Factorul care era sa
determine succesul sistemului de operare era ce, de fapt, va putea fi
rulat pe acest sistem de operare. Trei angajati la Microsoft (Craig
Eisler, Alex John si Eric Engstorm) erau ingrijorati de faptul ca
programatorii considerau sistemul de operare DOS (lansat tot de
Microsoft) o platforma mai buna pentru dezvoltarea jocurilor. Asta
insemna ca putine jocuri vor fi dezvoltate pentru Windows 95 si asta va
influenta succesul acestui sistem de operare.
DOS oferea acces direct la placa video, tastatura, mouse-ul,
dispozitivele de sunet si alte componenete ale sistemului, in timp ce
Windows 95, avand memoria protejata, restrictiona acces la toate
acestea. Microsoft avea nevoie de o modalitate de a oferi
programatorilor ceea ce doresc. Eisler, John si Engstorm au dezvoltat o
sulutie care in cele din urma era sa fie numita DirectX.
Prima versiune a DirectX-ului a fost lansata in Septembrie 1995 avand
nume Windows Games SDK. Ea era, de fapt, inlocuire pentru Interfetele
API din sistemele pe 16 biti, care aveau un design foarte slab. In
mare, prima versiune de DirectX ofera posibilitate de a incorpora
elemente multimedia de inalta performanta.
Inainte de existenta DirectX-ului, Microsoft avea deja inclus setul de
API-uri OpenGL pe platformele Windows NT. In acel timp OpenGL necesita
hardware de inalta performanta si era limitat pe inginerie si
utilizatori CAD . Direct3D (introdus de persoane care au dezvoltat
DirectX ca o alternativa pentru OpenGL) urma sa fie o concurenta pentru
(atunci) mai costisitor (din punct de vedere hardware) OpenGL pentru
dezvoltarea jocurilor. Cu timpul, dupa ce puterea placilor video au
crescut, OpenGL a devenit standard si conducatorul pietei. In acel
punct a inceput "batalia" intre adepti ai cross-platform OpenGL si
Windows-only Direct3D, care dupa cum multi sustineau era inca un
exemplu de adoptare, extindere si eliminare (embrace, extend and
extinguish) de la Microsoft. Alte Interfete API din DirectX sunt
deseori combinate cu OpenGL in crearea jocurilor video datorita
faptului ca OpenGL nu include toate functionalitatile care le are
DirectX (cum ar fi suport pentru sunet sau joystick). Totusi,
combinatia intre OpenGL si OpenAL (Open Audio Library) pentru acest
scop a devenit populara.
DirectX este folosit ca si baza pentru Interfetele API de la console
Xbox si Xbox 360, oferite de catre Microsoft. Interfetele API au fost
dezvoltate de catre Microsoft si NVIDIA (care a dezvoltat hardware
folosit de consola). Intefetele API din Xbox sunt similare cu cele din
DirectX 8.1, dar fara posibilitate de update. Xbox a fost numit
DirectXbox, dar numele a fost prescurtat pentru motive comerciale.
In 2002 Microsoft a lansat DirectX 9 cu suport pentru programe
shader
mult mai lungi cu pixel si vertex shader, versiunea 2.0. Microsoft a
continuat cu update, si in August 2004 a introdus shader model 3.0 in
DirectX 9.0c.
Compatibilitate
Producatori hardware sunt nevoiti sa scrie drivere si sa testeze
fiecare bucata aparte, pentru a le face compatibile cu DirectX. Unele
dispozitive hardware au doar drivere compatibile cu DirectX (ceea ce
inseamna ca utilizatorul trebuie sa instaleze DirectX pentru a folosi
acele dispozitive). Versiunile mai vechi de DirectX includeau si o
librarie care continea toate driverele cunoscute si disponibile la
momentul lansarii versiunii respective. La aceasta practica s-a
renuntat in favoarea sistemului de reactualizare, bazat pe web, Windows
Update care permite utilizatorilor sa descarce doar drivere relevante
pentru dispozitivul lor.
Inainte de DirectX 10, DirectX era considerat ca fiind compatibil cu
versiuni precedente (versiunile noi erau compatibile cu cele vechi).
Asta este consecinta pozitiva a modelului COM folosit pentru API-ul
DirectX.
Cu Windows Vista si Direct3D 10 cu schimbari radicale, compatibilitate
nu mai este posibila. Din acest motiv DirectX 10 ofera Interfata API
Direct3D 9, astfel incat sa fie posibila rularea jocurilor si
aplicatiilor mai vechi.
DirectX 10 si 9.0L
Windows Vista este lansata cu DirectX 10 (si 9.0L
pentru
compatibilitate cu versiuni mai vechi) si este singurul sistem de
operare din familia Windows care il contine. Schimbari radicale au fost
facute: DirectInput este defavorizat si inlocuit cu Xinput, din Xbox.
De asemenea, DirectSound este defavorizat si inlocuit cu XACT . DirectX
10 a renuntat la suport pentru accelerarea dispozitivelor audio, iar
sunetul este redat in softearul pe CPU. DirectPlay este defavorizat si
inlocuit cu Games for Windows - LIVE , in timp ce DirectShow este
defavorizat si inlocuit cu Media Foundation, un set diferit de
Interfete API lansate impreuna cu Windows Vista, pentru manipularea de
secvente audio si video. DirectMusic va fi probabil singurul ramas
intact.
Direct3D
O proprietate noua majora in DirectX 10 este
Direct3D (initial
numit Windows Graphics Foundation). Folosind noul Windows Display
Driver Model, Shader Model 4.0 si noile, mai stricte, cerinte pentru
producatori de GPU (Graphical Processing Unit) care trebuie satisfacute
pentru a sustine compatibilitate cu Direct3D, versiunea 10 de Direct3D
reprezinta indepartarea de la practicile versiunilor mai vechi. Pentru
a oferi compatibilitate cu versiunile precedente de Direct3D, DirectX
10 contine de fapt trei versiuni de Direct3D:
- Direct3D 9: aceasta Interfata API emuleaza
comportamentele ale
Direct3D 9 pe Windows XP pentru a oferi compatibilitate cu aplicatii
mai vechi. Toate detaliile si avantajele ale Windows Display Driver
Model (WDDM) din Vista, sunt ascunse de aplicatie (in caz ca WDDM
drivere sunt instalate). Aceasta este singura Interfata API disponibila
in caz ca exista doar drivere grafice XP.
- Direct3D 9Ex (initial numit 9.0L): permite acces
total la noile
capabilitati ale WDDM, in timp ce pastreaza compatibilitate pentru
aplicatii Direct3D existente folosind o interfata API separata. Efectul
de transparenta ("glass effect") din Windows Aero se bazeaza pe codul
din Direct3D 0Ex. Cand 9Ex era inca sub numele de cod 9.0L, existau
zvonuri ca acesta va fi Direct3D 10 pentru Windows XP. Pana la urma s-a
demonstrat ca nu este asa, in mare parte din cauza incompatibilitati al
WDDM pe Windows XP.
- Direct3D 10: Temporar, singurul GPU compatibil cu
Direct3D este
NVIDIA GeForce 8 Series, care de fapt profita foarte putin de
capabilitatile ale Direct3D 10.
Alternative
Exista alternative pentru aceasta arhitectura, unele
mai complete
decat altele. Nu exista o solutie unica care sa ofere toate
functionalitatile care le ofera DirectX, dar prin combinare de librarii
- OpenGL, OpenAL, SDL, OpenML, FMOD, etc - utilizatorul pote sa
implementeze o solutie comparabila cu DirectX si in aceasi timp
gratuita si cross-platform (poate fi folosite pe diferite platforme).
Bibliografie
-
http://en.wikipedia.org/wiki/Application_programming_interface
- http://en.wikipedia.org/wiki/Windows_API
- http://en.wikipedia.org/wiki/DirectX
-
http://www.spinellis.gr/pubs/jrnl/1997-CSI-WinApi/html/win.html
- www.wikipedia.com (pentru detalii suplimentare)
Raul Buibas, An 2, grupa 1
Universitatea de Vest, Timisoara
Cele mai ok referate! www.referateok.ro |