Ce este un API

ce este un API

Las Acronime API le-ați fi văzut de mai multe ori și de două ori când citiți articole despre software. Dar nu toată lumea știe ce este cu adevărat un API. De aceea o clarificăm în acest articol. Primul lucru de spus este că acestea sunt acronimul pentru Application Programming Interface, adică, în spaniolă, Application Programming Interface. Și de multe ori generează confuzie chiar și între cei care știu ceva despre programare.

De exemplu, Arduino are propriul API de programare, oferind o serie de funcții pe care le puteți utiliza în IDE-ul Arduino sau în alte medii pentru a programa microcontrolerul pentru a vă permite să vă creați proiectele. Dar ... ai putea să-mi spui diferența dintre o bibliotecă de programare și un API? Există diferențe între un cadru și un API? Este un API la fel ca un ABI? Există multe îndoieli care, probabil, continuă să genereze confuzie și pe care le vom clarifica chiar acum.

Nu știu dacă știi asta limbaje de nivel scăzut, cum ar fi asamblorul sau ASM, depind direct de arhitectura hardware, în timp ce cele de nivel înalt se abstractizează de hardware pentru a facilita sarcina programatorului, dar depind de sistemul de operare (syscalls) sau de anumite API-uri etc. Pentru ca toate acestea să nu vă pară chinezești, să vedem despre ce este vorba ...

Ce este un API?

o API este un instrument cu care sunt furnizați dezvoltatorii astfel încât să aibă la dispoziție o serie de funcții, subrutine și proceduri sau metode pentru OOP care pot fi utilizate prin bibliotecile existente. Printre ceea ce oferă un API se numără funcțiile pentru a crea aplicații simple, funcții legate de AI, cu generarea de grafică, gestionarea resurselor hardware etc.

De exemplu, sunteți sigur că API-urile cunoscute, cum ar fi cea oferită de Linux prin biblioteca glibc, sau grafica precum OpenGL și Vulkan, sau, de asemenea, altele precum OpenCL pentru calcul eterogen, OpenXR pentru realitate virtuală și augmentată etc. Alte sisteme de operare și software includ, de asemenea, propriile API-uri, astfel încât alți programatori să poată crea programe de completare, pluginuri sau module pentru sistemul respectiv etc.

Exemplu cu Arduino

Dacă aveți o insignă Arduino și folosiți frecvent Arduino IDE, sau orice alt mediu de dezvoltare pentru Arduino, veți ști că, atunci când creați un cod, utilizați mai multe opțiuni pentru a comanda microcontrolerului dvs. să efectueze o serie de acțiuni. De exemplu, pinMode () este o funcție tipică pentru a configura un pin Arduino, nu?

Când scrii pinMode (9, INPUT)De exemplu, indicați că pinul 9 al plăcii Arduino ar trebui să funcționeze ca intrare, adică microcontrolerul va aștepta ca informațiile să intre prin acel pin pentru a le citi și a efectua o acțiune. Dar v-ați întrebat vreodată cum este capabil să înțeleagă acea poruncă?

Ei bine, Arduino are un API de dezvoltare care ne este pus la dispoziție. Bibliotecile terțe pot fi adăugate la acest API așa cum am văzut în multe exemple de pe acest blog. La fel ca SparkFun pentru anumiți senzori etc. Cu toate acestea, funcțiile pot fi introduse în IDE-ul Arduino și acesta va traduce codul în mod corespunzător pentru a-l încărca în memoria microcontrolerului, astfel încât acesta să îl poată procesa.

Dacă nu ați avea acest API, nu ați putea crea aceste programe pentru Arduino într-un mod atât de simplu, deoarece ar trebui să încercăm să le creăm în codul de asamblare pentru microcontrolerul ATMega328P, adică în ASM pentru arhitectura AVR. Și acest lucru ar fi mult mai complicat, deoarece ar trebui să utilizați direct instrucțiunile disponibile de acest ISA. Dacă da, nu trebuie doar să cunoașteți în mod adecvat repertoriul acelui ISA, ci și alte aspecte, cum ar fi numărul de înregistrări etc. Adică, ar trebui să aveți cunoștințe la nivel scăzut despre hardware-ul pentru care lucrați.

De de exemplu, cod ASM Ce ar trebui să generați pentru ca un LED să clipească într-o buclă ar fi:

<br data-mce-bogus="1">

.ORG 0x0000
; the next instruction has to be written to
; address 0x0000
rjmp START
; the reset vector: jump to "main"
START:
ldi r16, low(RAMEND) ; set up the stack
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, 0xFF
; load register 16 with 0xFF (all bits 1)
out DDRB, r16
; write the value in r16 (0xFF) to Data
; Direction Register B
LOOP:
sbi PortB, 5
; switch off the LED
rcall delay_05
cbi PortB, 5
; wait for half a second
; switch it on
rcall delay_05 ; wait for half a secon
rjmp LOOP ; jump to loop
DELAY_05:
; the subroutine:
ldi r16, 31
; load r16 with 31
OUTER_LOOP:
; outer loop label
ldi r24, low(1021) ; load registers r24:r25 with 1021, our new
; init value
ldi r25, high(1021) ; the loop label
DELAY_LOOP:
; "add immediate to word": r24:r25 are
; incremented
adiw r24, 1
; if no overflow ("branch if not equal"), go
; back to "delay_loop"
brne DELAY_LOOP
dec r16
; decrement r16
brne OUTER_LOOP
ret
; and loop if outer loop not finished
; return from subroutine

În timp ce datorită API-ului, facilitățile sunt totale, scriind la un nivel înalt următorul cod echivalent (mult mai scurt și mai intuitiv):

<br data-mce-bogus="1">

int ledPin = 13; 		// LED que se encuentra en el pin 13
   void setup(){ 
   pinMode(ledPin, OUTPUT);	// El p1n 13 será una salida digital 
} 
void loop(){ 
   digitalWrite(ledPin, HIGH);	// Enciende el LED
   delay(1000); 				// Pausa de 1 segundo 
   digitalWrite(ledPin, LOW); 	// Apaga el LED 
   delay(1000);				// Pausa de 1 segundo 

Diferențe cu un ABI

API vs Linux ABI

ABI este un termen mai puțin cunoscut, este un Application Binary Interface sau în limba engleză Application Binary Interface. În acest caz, este o interfață între modulele unui program, în general între o bibliotecă sau un sistem de operare cu limbaj de mașină pentru arhitectura în care vă aflați: SPARC, AMD64, ARM, PPC, RISC-V etc.

Datorită ABI, se determină modul de apelare a funcțiilor, format binar care poate înțelege mașina pentru care compilați sau apelurile de sistem, cum sunt tratate excepțiile, cum sunt transmise datele etc.

Diferențe cu un cadru

Un cadru sau cadru este mai mult un set de instrumente la dispoziția dumneavoastră pentru a ajuta la dezvoltarea unui proiect dat. Famework stabilește de obicei unele standarde de codare, oferă componente utile etc. De exemplu, JUnit este un cadru pentru Java sau Symfony / Cake pentru PHP etc.

Diferențe cu un SDK și un NDK

SDK este un kit de dezvoltare software, adică un kit de dezvoltare software. Merge dincolo de ceea ce este un cadru sau un API. Un exemplu ar putea fi Android Studio sau iOS xCode etc. De exemplu, primul, pe lângă API-ul Android în sine, include și un IDE sau mediu de dezvoltare integrat pentru programare și compilare, biblioteci, instrumente etc.

În plus, NDK (kit de dezvoltare nativă) este un complement. De exemplu, Android NDK permite dezvoltatorilor să refolosească codul C / C ++ introducându-l în aplicații prin JNI (Java Native Interface) ...

Diferențe cu o bibliotecă

Diagrama Glibc Wikipedia

În cele din urmă, biblioteca este o colecție de cod sursă reutilizabilă care face viața mai ușoară pentru programatori. De exemplu, în biblioteca C stdio.h există o funcție printf pentru a imprima text pe ecran. Pentru ca acest lucru să fie posibil, este necesar un cod sursă care să facă sistemul de operare să îndeplinească această sarcină. Dar, deoarece este ceva foarte recurent care este utilizat frecvent, pur și simplu prin invocarea acelei biblioteci puteți utiliza printf fără a scrie tot codul de la zero. Cu alte cuvinte, cu alte cuvinte, ele pot fi văzute ca blocuri prefabricate.

O bibliotecă și un API pot fi ușor confundate, de fapt, bibliotecile sunt împachetate într-un API. Exemplu glibc...

Sper că după asta ai o idee mai clar despre ceea ce sunt un API, ABI, un cadru, un SDK și o bibliotecă, pe lângă faptul că pot face diferența între ele de acum înainte.


Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.