Las API kratice vidjet ćete ih više puta i dvaput kada čitate članke o softveru. Ali ne znaju svi što je zapravo API. Zbog toga smo to pojasnili u ovom članku. Prvo što treba reći je da su to kratice sučelja za programiranje aplikacija, odnosno na španjolskom jeziku sučelje za programiranje aplikacija. A mnogo puta stvara zabunu čak i među onima koji poznaju neko programiranje.
Na primjer, Arduino ima vlastiti API za programiranje, nudeći brojne funkcije koje možete koristiti u Arduino IDE-u ili drugim okruženjima za programiranje mikrokontrolera kako bi vam omogućili stvaranje vaših projekata. Ali ... možete li mi reći razlika između programske knjižnice i API-ja? Postoje li razlike između okvira i API-ja? Je li API isti kao ABI? Mnogo je sumnji koje možda i dalje stvaraju zabunu i koje ćemo sada razjasniti.
Ne znam znate li to jezici niske razine, poput asemblera ili ASM-a, izravno ovise o hardverskoj arhitekturi, dok se oni na visokoj razini apstrahiraju od hardvera kako bi olakšali zadatak programera, ali ovise o operativnom sustavu (syscalls) ili o određenim API-ima itd. Da sve ovo ne bi zvučalo poput kineskog, da vidimo o čemu se radi ...
Što je API?
Una API je alat s kojim se pružaju programeri tako da im je na raspolaganju niz funkcija, potprograma i postupaka ili metoda za OOP koji se mogu koristiti kroz postojeće knjižnice. Među onim što API nudi su funkcije za stvaranje jednostavnih aplikacija, funkcije povezane s AI-jem, s generiranjem grafike, upravljanjem hardverskim resursima itd.
Na primjer, siguran sam da su vam poznati API-ji poput onoga koji nudi Linux putem glibc biblioteke ili grafike poput OpenGL i Vulkan, ili također drugi poput OpenCL-a za heterogeno računanje, OpenXR za virtualnu i proširenu stvarnost itd. Ostali operativni sustavi i softver također uključuju vlastite API-je tako da drugi programeri mogu stvoriti dodatke, dodatke ili module za taj sustav itd.
Primjer s Arduinom
Ako imate značku Arduino i često koristite Arduino IDE, ili bilo koje drugo razvojno okruženje za Arduino, znat ćete da kada kreirate kôd koristite više opcija kako biste naredili mikrokontroleru da izvrši niz radnji. Na primjer, pinMode () je tipična funkcija za konfiguriranje Arduino pina, zar ne?
Kad pišete pinMode (9, INPUT)Na primjer, naznačujete da bi pin 9 ploče Arduino trebao raditi kao ulaz, odnosno mikrokontroler će čekati da informacija uđe kroz taj pin da bi ga pročitao i izvršio radnju. Ali jeste li se ikad zapitali kako on može razumjeti tu zapovijed?
Pa, Arduino ima Razvojni API koji nam je dostupan. Biblioteke trećih strana mogu se dodati ovom API-u, kao što smo vidjeli u mnogim primjerima na ovom blogu. Poput SparkFuna za određene senzore itd. Uz sve to, funkcije se mogu unijeti u Arduino IDE i on će pravilno prevesti kôd kako bi ga učitao u memoriju mikrokontrolera kako bi ga mogao obraditi.
Ako niste imali ovaj API, ne biste mogli stvoriti ove programe za Arduino na tako jednostavan način, jer bismo ih trebali pokušati izraditi u montažnom kodu za mikrokontroler ATMega328P, tj. ASM za AVR arhitekturu. A to bi bilo puno složenije, jer biste se morali izravno koristiti uputama koje nudi ovaj ISA. Ako je to slučaj, ne samo da biste morali adekvatno znati repertoar tog ISA-a, već i druge aspekte poput broja registracija itd. Odnosno, trebali biste imati nisko znanje o hardveru za koji radite.
Po na primjer, ASM kod Ono što biste trebali generirati da bi lampica trepnula u petlji bilo bi:
<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
Dok zahvaljujući API-ju objekti su ukupni, pisanje na visokoj razini sljedećeg ekvivalentnog koda (puno kraćeg i intuitivnijeg):
<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
Razlike s ABI
ABI je manje poznati pojam, to je a Aplikacijsko binarno sučelje, ili na engleskom jeziku Application Binary Interface. U ovom je slučaju riječ o sučelju između modula programa, obično između knjižnice ili operativnog sustava strojnog jezika za arhitekturu u kojoj se nalazite: SPARC, AMD64, ARM, PPC, RISC-V itd.
Zahvaljujući ABI, određen je način pozivanja funkcija, binarni format koji mogu razumjeti stroj za koji kompilirate ili sistemske pozive, kako se postupa s iznimkama, kako se prosljeđuju podaci itd.
Razlike s okvirom
Un framework ili framework je više skup alata na raspolaganju za pomoć u razvoju određenog projekta. Obitelj obično postavlja neke standarde kodiranja, pruža korisne komponente itd. Na primjer, JUnit je okvir za Javu, ili Symfony / Cake za PHP itd.
Razlike sa SDK-om i NDK-om
SDK je komplet za razvoj softvera, odnosno komplet za razvoj softvera. Prelazi ono što je okvir ili API. Primjer bi mogao biti Android Studio ili iOS xCode itd. Primjerice, prvi, uz sam Android API, također uključuje IDE ili integrirano razvojno okruženje za programiranje i kompajliranje, knjižnice, alate itd.
Nadalje, NDK (Native Development Kit) to je dopuna. Na primjer, Android NDK omogućuje programerima ponovnu upotrebu C / C ++ koda uvođenjem u aplikacije putem JNI (Java Native Interface) ...
Razlike s knjižnicom
konačno, knjižnica je zbirka izvornog koda za višekratnu upotrebu to olakšava život programerima. Na primjer, unutar biblioteke C stdio.h nalazi se funkcija printf za ispis teksta na zaslon. Da bi to bilo moguće, potreban je izvorni kod koji tjera operativni sustav da izvrši ovaj zadatak. No budući da se često koristi vrlo često, jednostavno pozivanjem te biblioteke možete koristiti printf bez da ispisujete sav kôd ispočetka. Drugim riječima, drugim riječima, mogu se promatrati kao montažni blokovi.
Knjižnica i API mogu se lako zbuniti, zapravo, knjižnice su umotane u API. Primjer glibc...
Nadam se da nakon ovoga imate ideju jasnije o tome što su API, ABI, framework, SDK i knjižnica, uz mogućnost da ih od sada razlikuje.