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
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
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.