az Az API rövidítések többször és kétszer láthatták őket, amikor a szoftverekkel kapcsolatos cikkeket olvasott. De nem mindenki tudja, mi is az API valójában. Ezért tisztázzuk ebben a cikkben. Először azt kell mondani, hogy ezek az Application Programming Interface, vagyis spanyolul az Application Programming Interface rövidítése. És sokszor még azokban is zavart kelt, akik tudnak valamilyen programozást.
Például az Arduino saját programozási API-val rendelkezik, amely számos olyan funkciót kínál, amelyeket az Arduino IDE vagy más környezetekben használhat a mikrovezérlő programozásához, hogy lehetővé tegye a projektek létrehozását. De ... meg tudnád mondani a különbség a programozási könyvtár és az API között? Vannak különbségek a keretrendszer és az API között? Az API megegyezik-e az ABI-vel? Sok kétely merül fel, amely talán továbbra is zavart kelt, és amelyet most tisztázni fogunk.
Nem tudom, hogy tudod-e ezt alacsony szintű nyelvek, mint az assembler vagy az ASM, közvetlenül függenek a hardver architektúrától, míg a magas szintűek elvonatkoznak a hardvertől, hogy megkönnyítsék a programozó feladatát, de az operációs rendszertől (syscalls) vagy bizonyos API-któl stb. Hogy mindez ne hangozzon kínaiul, nézzük meg, miről van szó ...
Mi az API?
egy Az API olyan eszköz, amellyel a fejlesztők elérhetők hogy az OOP számára egy sor funkció, szubrutin és eljárás vagy módszer álljon rendelkezésre, amelyek a meglévő könyvtárakon keresztül használhatók. Az API többek között az egyszerű alkalmazások létrehozásához szükséges funkcióktól, az AI-hez kapcsolódó funkcióktól, grafikák létrehozásával, hardver erőforrások kezelésével stb.
Biztos vagyok benne, hogy ismeri az API-kat, például a Linux által a glibc könyvtáron keresztül kínáltat, vagy a grafikákat, mint pl. OpenGL és Vulkan, vagy mások is, mint az OpenCL heterogén számításhoz, OpenXR a virtuális és a kibővített valósághoz stb. Más operációs rendszerek és szoftverek saját API-kat is tartalmaznak, hogy más programozók kiegészítőket, bővítményeket vagy modulokat hozzanak létre ehhez a rendszerhez stb.
Példa Arduinóval
Ha van jelvényed Arduino és Ön gyakran használja az Arduino IDE-t, vagy bármely más fejlesztői környezet az Arduino számára, tudni fogja, hogy egy kód létrehozásakor több lehetőséget is felhasznál, hogy a mikrovezérlőt egy sor művelet végrehajtására utasítsa. Például a pinMode () tipikus függvény egy Arduino pin konfigurálásához, nem igaz?
Amikor írsz pinMode (9, INPUT)Például azt jelzi, hogy az Arduino kártya 9. érintkezőjének bemenetként kell működnie, vagyis a mikrovezérlő arra vár, hogy az információ bejusson a csapon keresztül, hogy elolvassa és műveletet hajtson végre. De vajon elgondolkodott már azon, hogyan képes megérteni ezt a parancsot?
Nos, Arduino-nak van egy Fejlesztési API, amely elérhetővé válik számunkra. Harmadik fél könyvtárai hozzáadhatók ehhez az API-hoz, amint ezt a blog számos példája láthatta. Mint a SparkFun bizonyos érzékelőkhöz stb. Mindezzel a funkciók bevihetők az Arduino IDE-be, és megfelelően lefordítja a kódot, hogy betöltse a mikrovezérlő memóriájába, hogy az feldolgozni tudja.
Ha nem rendelkezne ezzel az API-val, akkor nem tudná ilyen egyszerű módon létrehozni ezeket a programokat az Arduino számára, mivel meg kell próbálnunk azokat az ATMega328P mikrovezérlő összeállítási kódjában elkészíteni, azaz ASM az AVR architektúrához. És ez sokkal bonyolultabb lenne, mivel közvetlenül az ISA rendelkezésére álló utasításokat kell használnia. Ha igen, akkor nemcsak az ISA repertoárját kell megfelelően ismernie, hanem más szempontokat is, például a regisztrációk számát stb. Vagyis alacsony szintű ismeretekkel kell rendelkeznie a használt hardverről.
Által például ASM kód Amit elő kell állítania ahhoz, hogy a LED egy hurokban villogjon:
<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
míg az API-nak köszönhetően a létesítmények teljesek, magas szinten írja a következő egyenértékű kódot (sokkal rövidebb és intuitívabb):
<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
Különbségek az ABI-vel
Az ABI kevésbé ismert kifejezés, ez a Alkalmazás bináris felület, vagy angolul Alkalmazás bináris felület. Ebben az esetben ez egy interfész a program moduljai között, általában egy könyvtár vagy egy gépnyelvi operációs rendszer között az architektúrához, amelyben tartózkodik: SPARC, AMD64, ARM, PPC, RISC-V stb.
Az ABI-nek köszönhetően meghatározzák a függvények meghívásának módját, bináris formátum amely megértheti a gépet, amelyhez fordítja, vagy a rendszer hívja, hogyan kezelik a kivételeket, hogyan továbbítják az adatokat stb.
Különbségek egy kerettel
Un keretrendszer vagy keretrendszer inkább eszközkészlet rendelkezésére áll, hogy segítsen egy adott projekt fejlesztésében. A hírnév általában meghatároz bizonyos kódolási szabványokat, hasznos összetevőket stb. Például a JUnit egy keretrendszer a Java számára, vagy a Symfony / Cake a PHP számára, stb.
Különbségek az SDK-val és az NDK-val
Az SDK egy szoftverfejlesztő készlet, azaz szoftverfejlesztő készlet. Túllépi azt, ami egy keretrendszer vagy egy API. Ilyen lehet például az Android Studio vagy az iOS xCode stb. Például az első az Android API mellett magában foglal egy IDE-t vagy integrált fejlesztői környezetet a programozáshoz és fordításhoz, könyvtárakat, eszközöket stb.
Továbbá, NDK (natív fejlesztői készlet) ez egy kiegészítő. Például az Android NDK lehetővé teszi a fejlesztők számára a C / C ++ kód újrafelhasználását azáltal, hogy JNI-n (Java Native Interface) keresztül bevezetik az alkalmazásokba ...
Különbségek egy könyvtárral
Végül, a a könyvtár újrafelhasználható forráskódok gyűjteménye ez megkönnyíti a programozók életét. Például a C könyvtár stdio.h könyvtárában található egy printf funkció a szöveg nyomtatásához a képernyőn. Ehhez olyan forráskódra van szükség, amely az operációs rendszert erre a feladatra készteti. De mivel ez egy nagyon visszatérő dolog, amelyet gyakran használnak, egyszerűen a könyvtár meghívásával egyszerűen használhatja a printf-et anélkül, hogy az összes kódot nulláról írná. Más szavakkal, más szavakkal, előregyártott blokkoknak tekinthetők.
A könyvtár és az API könnyen összekeverhető, valójában a könyvtárak egy API-ba vannak csomagolva. Példa glibc...
Remélem, hogy ezek után van egy ötlete világosabb az API, az ABI, a keretrendszer, az SDK és a könyvtár, amellett, hogy ezentúl képesek megkülönböztetni őket.