Te Akronimy API, które zobaczysz więcej niż raz i dwa razy, czytając artykuły o oprogramowaniu. Ale nie wszyscy wiedzą, czym naprawdę jest API. Dlatego wyjaśniamy to w tym artykule. Pierwszą rzeczą do powiedzenia jest to, że są to skróty interfejsu programowania aplikacji, czyli w języku hiszpańskim interfejsu programowania aplikacji. I niejednokrotnie powoduje to zamieszanie nawet wśród tych, którzy znają się na programowaniu.
Na przykład Arduino ma własne programistyczne API, oferujące szereg funkcji, których możesz użyć w Arduino IDE lub innych środowiskach do zaprogramowania mikrokontrolera, aby umożliwić tworzenie projektów. Ale ... czy mógłbyś mi powiedzieć różnica między biblioteką programistyczną a interfejsem API? Czy istnieją różnice między strukturą a interfejsem API? Czy interfejs API to to samo, co ABI? Istnieje wiele wątpliwości, które być może nadal będą generować zamieszanie i które zamierzamy teraz wyjaśnić.
Nie wiem, czy o tym wiesz języki niskiego poziomu, podobnie jak asembler lub ASM, zależą bezpośrednio od architektury sprzętowej, podczas gdy te wysokopoziomowe są abstrahowane od sprzętu, aby ułatwić zadanie programisty, ale zależą od systemu operacyjnego (wywołania systemowe) lub niektórych interfejsów API itp. Aby to wszystko nie brzmiało jak chińskie dla ciebie, zobaczmy, o co chodzi ...
Co to jest API?
A API to narzędzie, z którego korzystają programiści dzięki czemu mają do swojej dyspozycji szereg funkcji, podprogramów i procedur lub metod OOP, które mogą być używane w istniejących bibliotekach. Wśród tego, co oferuje API, są funkcje do tworzenia prostych aplikacji, funkcje związane ze sztuczną inteligencją, generowanie grafiki, zarządzanie zasobami sprzętowymi itp.
Na przykład jestem pewien, że znasz interfejsy API, takie jak ten oferowany przez Linuksa za pośrednictwem biblioteki glibc, lub grafiki, takie jak OpenGL i Vulkan, a także inne, takie jak OpenCL do obliczeń heterogenicznych, OpenXR dla rzeczywistości wirtualnej i rozszerzonej itp. Inne systemy operacyjne i oprogramowanie zawierają również własne interfejsy API, dzięki czemu inni programiści mogą tworzyć dodatki, wtyczki lub moduły dla tego systemu itp.
Przykład z Arduino
Jeśli masz odznakę Arduino i często korzystasz z Arduino IDE, lub w jakimkolwiek innym środowisku programistycznym dla Arduino, będziesz wiedział, że podczas tworzenia kodu korzystasz z wielu opcji, aby zlecić mikrokontrolerowi wykonanie szeregu działań. Na przykład pinMode () to typowa funkcja do konfiguracji pinów Arduino, prawda?
Kiedy piszesz pinMode (9, WEJŚCIE)Na przykład wskazujesz, że pin 9 płyty Arduino powinien działać jako wejście, to znaczy mikrokontroler będzie czekał na wprowadzenie informacji przez ten pin, aby je odczytać i wykonać akcję. Ale czy kiedykolwiek zastanawiałeś się, jak on jest w stanie zrozumieć to polecenie?
Cóż, Arduino ma API programistyczne, które zostało nam udostępnione. Biblioteki innych firm można dodawać do tego interfejsu API, jak widzieliśmy w wielu przykładach na tym blogu. Podobnie jak SparkFun dla niektórych czujników itp. Dzięki temu funkcje można wprowadzić do Arduino IDE i odpowiednio przetłumaczy kod, aby załadować go do pamięci mikrokontrolera, aby mógł go przetworzyć.
Gdybyś nie miał tego API, nie mógłbyś w tak prosty sposób stworzyć tych programów dla Arduino, skoro powinniśmy spróbować zrobić je w kodzie asemblera dla mikrokontrolera ATMega328P, czyli ASM dla architektury AVR. A to byłoby znacznie bardziej skomplikowane, ponieważ musiałbyś bezpośrednio skorzystać z instrukcji dostępnych w tym ISA. Jeśli tak, musiałbyś nie tylko odpowiednio znać repertuar tego ISA, ale także inne aspekty, takie jak liczba rejestracji itp. Oznacza to, że powinieneś mieć niskopoziomową wiedzę na temat sprzętu, na którym pracujesz.
przez na przykład kod ASM To, co powinieneś wygenerować, aby dioda LED migała w pętli, to:
<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
Podczas dzięki API obiekty są totalne, napisanie na wysokim poziomie następującego równoważnego kodu (znacznie krótszego i bardziej intuicyjnego):
<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
Różnice z ABI
ABI to mniej znany termin, to jest Application Binary Interface lub w języku angielskim Application Binary Interface. W tym przypadku jest to interfejs pomiędzy modułami programu, generalnie pomiędzy biblioteką lub systemem operacyjnym języka maszynowego dla architektury, w której jesteś: SPARC, AMD64, ARM, PPC, RISC-V itp.
Dzięki ABI ustalany jest sposób wywoływania funkcji, format binarny który może zrozumieć maszynę, dla której kompilujesz, lub wywołania systemowe, jak obsługiwane są wyjątki, jak przekazywane są dane itp.
Różnice w stosunku do frameworka
Un Framework lub framework to raczej zestaw narzędzi do Twojej dyspozycji, aby pomóc w opracowaniu danego projektu. Ta rodzina zwykle określa pewne standardy kodowania, dostarcza użytecznych komponentów itp. Na przykład JUnit to framework dla Java lub Symfony / Cake dla PHP itp.
Różnice z SDK i NDK
SDK to zestaw do tworzenia oprogramowaniaczyli zestaw do tworzenia oprogramowania. Wykracza poza ramy lub API. Przykładem może być Android Studio lub iOS xCode itp. Na przykład pierwsza z nich, oprócz samego interfejsu API systemu Android, zawiera również IDE lub zintegrowane środowisko programistyczne do programowania i kompilacji, biblioteki, narzędzia itp.
Ponadto NDK (natywny zestaw programistyczny) jest uzupełnieniem. Na przykład Android NDK umożliwia programistom ponowne wykorzystanie kodu C / C ++ poprzez wprowadzenie go do aplikacji za pośrednictwem JNI (Java Native Interface) ...
Różnice z biblioteką
Wreszcie, Biblioteka jest zbiorem kodu źródłowego wielokrotnego użytku co ułatwia życie programistom. Na przykład w stdio.h biblioteki C znajduje się funkcja printf, która drukuje tekst na ekranie. Aby było to możliwe, potrzebny jest kod źródłowy, który sprawi, że system operacyjny wykona to zadanie. Ale ponieważ jest to coś bardzo powtarzającego się, co jest często używane, po prostu wywołując tę bibliotekę, możesz użyć printf bez pisania całego kodu od zera. Innymi słowy, można je postrzegać jako prefabrykowane bloki.
Bibliotekę i API można łatwo pomylić. Biblioteki są opakowane wewnątrz interfejsu API. Przykład glibc...
Mam nadzieję, że po tym masz pomysł jaśniej o tym, czym są API, ABI, framework, SDK i biblioteka, oprócz możliwości rozróżnienia między nimi od teraz.