Wat is een API

wat is een API

De API-acroniemen u zult ze meer dan eens en twee keer hebben gezien wanneer u artikelen over software leest. Maar niet iedereen weet wat een API werkelijk is. Daarom verduidelijken we het in dit artikel. Het eerste dat u moet zeggen, is dat dit de afkortingen zijn van Application Programming Interface, dat wil zeggen, in het Spaans, Application Programming Interface. En vaak wekt het verwarring, zelfs bij degenen die wat programmeren kennen.

Arduino heeft bijvoorbeeld zijn eigen programmeer-API, die een aantal functies biedt die u in de Arduino IDE of andere omgevingen kunt gebruiken om de microcontroller te programmeren zodat u uw projecten kunt maken. Maar ... kun je het me vertellen het verschil tussen een programmeerbibliotheek en een API? Zijn er verschillen tussen een framework en een API, is een API hetzelfde als een ABI? Er zijn veel twijfels die misschien voor verwarring blijven zorgen en die we nu duidelijk gaan maken.

Ik weet niet of u dat weet talen op laag niveau, net als de assembler of ASM, rechtstreeks afhankelijk van de hardware-architectuur, terwijl de high-level degenen abstraheren van de hardware om de taak van de programmeur te vergemakkelijken, maar afhankelijk zijn van het besturingssysteem (syscalls) of van bepaalde API's, enz. Zodat dit allemaal niet als Chinees klinkt, laten we eens kijken waar het over gaat ...

Wat is een API?

een API is een tool waarmee ontwikkelaars worden voorzien zodat ze beschikken over een reeks functies, subroutines en procedures of methoden voor OOP die via de bestaande bibliotheken kunnen worden gebruikt. Een API biedt onder meer functies om eenvoudige apps te maken, functies met betrekking tot AI, met het genereren van grafische afbeeldingen, beheer van hardwarebronnen, enz.

Ik ben er bijvoorbeeld zeker van dat u bekend bent met API's zoals die aangeboden door Linux via de glibc-bibliotheek, of afbeeldingen zoals OpenGL en Vulkan, of ook anderen zoals OpenCL voor heterogeen computergebruik, OpenXR voor virtuele en augmented reality, enz. Andere besturingssystemen en software bevatten ook hun eigen API's, zodat andere programmeurs add-ons, plug-ins of modules voor dat systeem kunnen maken, enz.

Voorbeeld met Arduino

Als je een badge hebt Arduino en je gebruikt vaak Arduino IDE, of een andere ontwikkelomgeving voor Arduino, weet je dat je bij het maken van een code gebruik maakt van meerdere opties om je microcontroller opdracht te geven een reeks acties uit te voeren. PinMode () is bijvoorbeeld een typische functie om een ​​Arduino-pin te configureren, toch?

Als je schrijft pinMode (9, INGANG)U geeft bijvoorbeeld aan dat pin 9 van het Arduino-bord als invoer zou moeten werken, dat wil zeggen dat de microcontroller wacht tot de informatie via die pin binnenkomt om het te lezen en een actie uit te voeren. Maar heb je je ooit afgevraagd hoe hij dat gebod kan begrijpen?

Nou, Arduino heeft een Ontwikkelings-API die aan ons ter beschikking wordt gesteld. Aan deze API kunnen bibliotheken van derden worden toegevoegd, zoals we in veel voorbeelden op deze blog hebben gezien. Zoals SparkFun's voor bepaalde sensoren, enz. Met dit alles kunnen de functies in de Arduino IDE worden ingevoerd en zal het de code correct vertalen om deze in het geheugen van de microcontroller te laden, zodat deze deze kan verwerken.

Als je deze API niet had, zou je deze programma's niet op zo'n eenvoudige manier voor Arduino kunnen maken, omdat we zouden moeten proberen om ze in assemblagecode te maken voor de ATMega328P-microcontroller, dat wil zeggen in ASM voor AVR-architectuur. En dat zou veel gecompliceerder zijn, aangezien u direct de instructies van deze ISA zou moeten gebruiken. Dan zou je niet alleen het repertoire van die ISA voldoende moeten kennen, maar ook andere aspecten zoals het aantal aanmeldingen etc. Dat wil zeggen dat u een lage kennis moet hebben van de hardware waarvoor u werkt.

door bijvoorbeeld ASM-code Wat u zou moeten genereren om een ​​LED in een lus te laten knipperen, zou zijn:

<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

Terwijl dankzij de API zijn de faciliteiten totaal, op hoog niveau de volgende equivalente code schrijven (veel korter en intuïtiever):

<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 

Verschillen met een ABI

API versus Linux ABI

ABI is een minder bekende term, het is een Application Binary Interface, of in het Engels Application Binary Interface. In dit geval is het een interface tussen modules van een programma, meestal tussen een bibliotheek of een besturingssysteem van een machinetaal voor de architectuur waarin u zich bevindt: SPARC, AMD64, ARM, PPC, RISC-V, enz.

Dankzij de ABI wordt de manier waarop de functies worden aangeroepen, bepaald, binair formaat die de machine waarvoor u compileert of de systeemaanroepen kan begrijpen, hoe uitzonderingen worden afgehandeld, hoe gegevens worden doorgegeven, enz.

Verschillen met een raamwerk

Un framework of framework is meer een set tools tot uw beschikking om een ​​bepaald project te helpen ontwikkelen. Het familiewerk stelt meestal enkele coderingsnormen vast, biedt nuttige componenten, enz. JUnit is bijvoorbeeld een framework voor Java, of Symfony / Cake voor PHP, enz.

Verschillen met een SDK en NDK

SDK is een Software Development Kit, dat wil zeggen, een softwareontwikkelingskit. Het gaat verder dan wat een framework of een API is. Een voorbeeld is Android Studio of iOS xCode, enz. Zo bevat de eerste, naast de Android API zelf, ook een IDE of geïntegreerde ontwikkelomgeving voor programmeren en compileren, bibliotheken, tools, etc.

Bovendien NDK (native ontwikkelingskit) het is een aanvulling. Met de Android NDK kunnen ontwikkelaars bijvoorbeeld C/C++-code hergebruiken door deze via JNI (Java Native Interface) in applicaties te introduceren...

Verschillen met een bibliotheek

Glibc-diagram Wikipedia

Tenslotte de bibliotheek is een verzameling herbruikbare broncode dat maakt het leven gemakkelijker voor programmeurs. In de C-bibliotheek stdio.h is er bijvoorbeeld een printf-functie om tekst op het scherm af te drukken. Om dit mogelijk te maken is een broncode nodig die het besturingssysteem deze taak laat uitvoeren. Maar aangezien het iets heel terugkerends is dat vaak wordt gebruikt, kun je door simpelweg die bibliotheek aan te roepen gebruik maken van printf zonder alle code helemaal opnieuw te hoeven schrijven. Met andere woorden, ze kunnen met andere woorden worden gezien als geprefabriceerde blokken.

Een bibliotheek en een API kunnen in feite gemakkelijk door elkaar worden gehaald bibliotheken zijn verpakt in een API. Voorbeeld glibc...

Ik hoop dat je hierna een idee hebt duidelijker over wat een API, ABI, een framework, een SDK en een bibliotheek zijn, naast het feit dat ze vanaf nu kunnen differentiëren.


Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.