Kas yra API

kas yra API

The API santrumpas juos matysite daugiau nei vieną ir du kartus, kai skaitysite straipsnius apie programinę įrangą. Bet ne visi žino, kas iš tikrųjų yra API. Štai kodėl mes jį paaiškiname šiame straipsnyje. Pirmiausia reikia pasakyti, kad jie yra „Application Programming Interface“, tai yra ispanų kalba, „Application Programming Interface“ santrumpos. Daug kartų tai kelia sumaištį net ir tiems, kurie žino programavimą.

Pavyzdžiui, „Arduino“ turi savo programavimo API, siūlančią daugybę funkcijų, kurias galite naudoti „Arduino IDE“ ar kitose aplinkose programuodami mikrovaldiklį, kad galėtumėte kurti savo projektus. Bet ... ar galėtum man pasakyti skirtumas tarp programavimo bibliotekos ir API? Ar yra skirtumų tarp sistemos ir API? Ar API yra tas pats, kas ABI? Yra daug abejonių, kurios galbūt ir toliau kelia painiavą ir kurias ketiname aiškiai pasakyti dabar.

Aš nežinau, ar tu tai žinai žemo lygio kalbos, kaip ir „assembler“ ar ASM, tiesiogiai priklauso nuo aparatūros architektūros, o aukšto lygio abstrakčios nuo aparatūros, kad palengvintų programuotojo užduotis, tačiau priklauso nuo operacinės sistemos („syscalls“) ar nuo tam tikrų API ir t. Kad visa tai neatrodytų kiniškai, pažiūrėkime, apie ką kalbama ...

Kas yra API?

A API yra įrankis, su kuriuo teikiami kūrėjai kad jie galėtų naudotis daugybe funkcijų, paprogramių ir procedūrų ar metodų, kuriuos galima naudoti per esamas bibliotekas. Tarp API siūlo funkcijų, skirtų paprastoms programoms kurti, funkcijoms, susijusioms su AI, su grafikos generavimu, aparatūros išteklių valdymu ir kt.

Pvz., Yra tikra, kad API yra jums gerai žinomos, pvz., Tą, kurią siūlo „Linux“ per „glibc“ biblioteką, arba grafiką, pvz., „OpenGL“ ir „Vulkan“, taip pat kiti, pvz., „OpenCL“ heterogeniniam skaičiavimui, „OpenXR“ virtualiai ir papildytai tikrovei ir kt. Kitos operacinės sistemos ir programinė įranga taip pat turi savo API, kad kiti programuotojai galėtų sukurti tos sistemos priedus, papildinius ar modulius ir kt.

Pavyzdys su Arduino

Jei turite ženkliuką „Arduino“ ir dažnai naudojate „Arduino IDE“, ar bet kurią kitą „Arduino“ kūrimo aplinką, žinosite, kad kurdami kodą naudojate kelias parinktis, kad nurodytumėte mikrovaldikliui atlikti keletą veiksmų. Pavyzdžiui, „pinMode“ () yra tipinė „Arduino“ kaiščio konfigūravimo funkcija, tiesa?

Kai rašai „pinMode“ (9, INPUT)Pvz., Jūs nurodote, kad „Arduino“ plokštės 9 kaištis turi veikti kaip įvestis, tai yra, mikrovaldiklis laukia, kol per tą kaištį bus įvesta informacija, kad ją perskaitytų ir atliktų veiksmą. Bet ar kada susimąstėte, kaip jis sugeba suprasti tą komandą?

Na, Arduino turi Kūrimo API, kuri yra prieinama mums. Prie šio API galima pridėti trečiųjų šalių bibliotekų, kaip matėme daugelyje šio tinklaraščio pavyzdžių. Kaip „SparkFun“ tam tikriems jutikliams ir kt. Visa tai atlikus, funkcijas galima įvesti į „Arduino IDE“ ir ji tinkamai išvers kodą, kad jį įkeltų į mikrovaldiklio atmintį, kad jis galėtų jį apdoroti.

Jei neturėtumėte šios API, negalėtumėte sukurti tokių programų „Arduino“ tokiu paprastu būdu, nes turėtume pabandyti jas padaryti ATMega328P mikrovaldiklio surinkimo kodu, t. Y. ASM AVR architektūrai. Tai būtų daug sudėtingiau, nes jūs turėtumėte tiesiogiai naudoti šio ISA pateiktas instrukcijas. Jei taip, turėtumėte ne tik tinkamai žinoti tos ISA repertuarą, bet ir kitus aspektus, tokius kaip registracijų skaičius ir kt. Tai yra, jūs turite turėti žemų žinių apie aparatinę įrangą, kuriai dirbate.

Pagal pavyzdys, ASM kodas Ką turėtumėte sugeneruoti, kad šviesos diodas mirksėtų cikle, būtų:

<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

O API dėka įrenginiai yra visi, rašydamas aukštu lygiu tokį ekvivalentišką kodą (daug trumpesnį ir intuityvesnį):

<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 

Skirtumai su ABI

API ir „Linux ABI“

ABI yra mažiau žinomas terminas, tai yra a „Application Binary Interface“ arba anglų kalba „Application Binary Interface“. Šiuo atveju tai yra sąsaja tarp programos modulių, paprastai tarp bibliotekos ar kompiuterio kalbos operacinės sistemos, skirtos architektūrai, kurioje esate: SPARC, AMD64, ARM, PPC, RISC-V ir kt.

ABI dėka nustatomas funkcijų iškvietimo būdas, dvejetainis formatas kuris gali suprasti mašiną, kuriai jūs sukūrėte, ar sistemą, kurią iškviečiate, kaip tvarkomos išimtys, kaip perduodami duomenys ir kt.

Skirtumai su sistema

Un karkasas ar karkasas yra daugiau priemonių rinkinys jūsų žinioje, kad padėtumėte plėtoti konkretų projektą. Šlovės kūrinyje paprastai nustatomi tam tikri kodavimo standartai, pateikiami naudingi komponentai ir kt. Pvz., „JUnit“ yra „Java“ arba „Symfony / Cake“ programa, skirta PHP ir kt.

Skirtumai su SDK ir NDK

SDK yra programinės įrangos kūrimo rinkinys, tai yra programinės įrangos kūrimo rinkinys. Tai peržengia tai, kas yra sistema arba API. Pavyzdys gali būti „Android Studio“ arba „iOS xCode“ ir kt. Pavyzdžiui, pirmasis, be pačios „Android“ API, taip pat apima IDE arba integruotą programavimo ir kompiliavimo kūrimo aplinką, bibliotekas, įrankius ir kt.

Be to, NDK (vietinės plėtros rinkinys) tai papildymas. Pavyzdžiui, „Android NDK“ leidžia kūrėjams pakartotinai naudoti C / C ++ kodą, pristatant jį programoms per JNI („Java Native Interface“) ...

Skirtumai su biblioteka

Glibc diagrama Vikipedija

Galiausiai, biblioteka yra daugkartinio naudojimo šaltinio kodo rinkinys tai palengvina programuotojų gyvenimą. Pavyzdžiui, C bibliotekos „stdio.h“ viduje yra funkcija „printf“ tekstui spausdinti ekrane. Kad tai būtų įmanoma, reikalingas šaltinio kodas, kuris priverčia operacinę sistemą atlikti šią užduotį. Bet kadangi tai yra dažnai pasikartojantis dalykas, kuris dažnai naudojamas, paprasčiausiai pasinaudodami ta biblioteka galite naudoti „printf“ nerašydami viso kodo nuo nulio. Kitaip tariant, kitaip tariant, juos galima vertinti kaip surenkamus blokus.

Biblioteka ir API gali būti lengvai supainiotos, tiesą sakant, bibliotekos yra suvyniotos į API. Pavyzdys glibc...

Tikiuosi, kad po to turite idėją aiškiau, kas yra API, ABI, pagrindai, SDK ir biblioteka, be to, nuo šiol galima juos atskirti.


Būkite pirmas, kuris pakomentuos

Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.