den API-akronymer har du sett dem mer än en och två gånger när du läser artiklar om programvara. Men inte alla vet vad ett API verkligen är. Det är därför vi klargör det i den här artikeln. Det första att säga är att de är förkortningen för Application Programming Interface, det vill säga på spanska Application Programming Interface. Och många gånger genererar det förvirring även bland dem som känner till programmering.
Arduino har till exempel sitt eget programmerings-API och erbjuder ett antal funktioner som du kan använda i Arduino IDE eller andra miljöer för att programmera mikrokontrollern så att du kan skapa dina projekt. Men ... kan du berätta för mig skillnaden mellan ett programmeringsbibliotek och ett API? Finns det skillnader mellan ett ramverk och ett API? Är ett API samma som ett ABI? Det finns många tvivel som kanske fortsätter att skapa förvirring och som vi kommer att klargöra just nu.
Jag vet inte om du vet det språk på låg nivå, som monteraren eller ASM, beror direkt på hårdvaruarkitekturen, medan de höga nivåerna är abstrakta från hårdvaran för att underlätta programmerarens uppgift, men beror på operativsystemet (syscalls) eller på vissa API: er etc. Så att allt detta inte låter som kinesiskt, låt oss se vad det handlar om ...
Vad är ett API?
en API är ett verktyg som utvecklare tillhandahålls så att de har till sitt förfogande en serie funktioner, underrutiner och procedurer eller metoder för OOP som kan användas genom befintliga bibliotek. Bland vad ett API erbjuder är från funktioner för att skapa enkla appar, funktioner relaterade till AI, med generering av grafik, hantering av hårdvaruresurser etc.
Till exempel är jag säker på att du är bekant med API: er som den som erbjuds av Linux via glibc-biblioteket eller grafik som t.ex. OpenGL och Vulkan, eller andra som OpenCL för heterogen databehandling, OpenXR för virtuell och augmented reality, etc. Andra operativsystem och programvara inkluderar också sina egna API: er så att andra programmerare kan skapa tillägg, plugins eller moduler för det systemet etc.
Exempel med Arduino
Om du har ett märke Arduino och du använder ofta Arduino IDE, eller någon annan utvecklingsmiljö för Arduino, kommer du att veta att när du skapar en kod använder du flera alternativ för att be din mikrokontroller att utföra en serie åtgärder. Till exempel är pinMode () en typisk funktion för att konfigurera en Arduino-stift, eller hur?
När du skriver pinMode (9, INPUT)Till exempel indikerar du att stift 9 på Arduino-kortet borde fungera som en ingång, det vill säga mikrokontrollen väntar på att informationen ska komma in genom den stiftet för att läsa den och utföra en åtgärd. Men har du någonsin undrat hur han kan förstå det kommandot?
Arduino har en Utvecklings-API som görs tillgängligt för oss. Tredjepartsbibliotek kan läggas till i detta API som vi har sett i många exempel på den här bloggen. Som SparkFun för vissa sensorer etc. Med allt detta kan funktionerna skrivas in i Arduino IDE och den kommer att översätta koden ordentligt för att ladda den i minnet på mikrokontrollern så att den kan bearbeta den.
Om du inte hade det här API: et skulle du inte kunna skapa dessa program för Arduino på ett så enkelt sätt, eftersom vi bör försöka göra dem i monteringskod för ATMega328P mikrokontroller, det vill säga i ASM för AVR-arkitektur. Och det skulle vara mycket mer komplicerat, eftersom du skulle behöva använda de instruktioner som finns tillgängliga av denna ISA. Om så är fallet skulle du inte bara behöva känna till repertoaren för den ISA utan också andra aspekter som antalet registreringar etc. Det vill säga att du bör ha låg kunskap om den hårdvara du arbetar för.
Por till exempel ASM-kod Vad du bör generera för att en lysdiod ska blinka i en slinga skulle vara:
<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
Medan tack vare API är anläggningarna totalt, skriva på hög nivå följande motsvarande kod (mycket kortare och mer intuitiv):
<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
Skillnader med en ABI
ABI är en mindre känd term, det är en Application Binary Interface, eller på engelska Application Binary Interface. I det här fallet är det ett gränssnitt mellan moduler i ett program, vanligtvis mellan ett bibliotek eller ett maskinspråk operativsystem för den arkitektur du är i: SPARC, AMD64, ARM, PPC, RISC-V, etc.
Tack vare ABI bestäms sättet att ringa funktionerna, binärt format som kan förstå maskinen du kompilerar för eller systemanropen, hur undantag hanteras, hur data skickas etc.
Skillnader med en ram
Un ram eller ram är mer en uppsättning verktyg till ditt förfogande för att hjälpa till med utvecklingen av ett visst projekt. Familjen sätter vanligtvis vissa kodningsstandarder, tillhandahåller användbara komponenter etc. Till exempel är JUnit ett ramverk för Java, eller Symfony / Cake för PHP, etc.
Skillnader med SDK och NDK
SDK är en mjukvaruutvecklingssats, det vill säga en mjukvaruutvecklingssats. Det går utöver vad som är ett ramverk eller ett API. Ett exempel kan vara Android Studio eller iOS xCode, etc. Till exempel innehåller den första, förutom själva Android API, också en IDE eller integrerad utvecklingsmiljö för programmering och kompilering, bibliotek, verktyg etc.
Vidare, NDK (Native Development Kit) det är ett komplement. Till exempel tillåter Android NDK utvecklare att återanvända C / C ++ - kod genom att introducera den till applikationer via JNI (Java Native Interface) ...
Skillnader med ett bibliotek
Slutligen, biblioteket är en samling av återanvändbar källkod som gör livet enklare för programmerare. Inom C-biblioteket stdio.h finns det till exempel en printf-funktion för att skriva ut text på skärmen. För att detta ska vara möjligt behövs en källkod som gör att operativsystemet utför denna uppgift. Men eftersom det är något mycket återkommande som används ofta, helt enkelt genom att åberopa det biblioteket kan du använda printf utan att skriva all koden från grunden. Med andra ord, med andra ord, de kan ses som prefabricerade block.
Ett bibliotek och ett API kan enkelt förväxlas, faktiskt bibliotek är insvept i ett API. Exempel glibc.
Jag hoppas att du efter detta har en idé tydligare om vad ett API, ABI, ett ramverk, ett SDK och ett bibliotek är, förutom att kunna skilja mellan dem från och med nu.