Hva er en API

hva er en API

Las API-akronymer vil du ha sett dem mer enn en og to ganger når du leser artikler om programvare. Men ikke alle vet hva en API egentlig er. Derfor avklarer vi det i denne artikkelen. Den første tingen å si er at de er forkortelsen for Application Programming Interface, det vil si på spansk Application Programming Interface. Og mange ganger genererer det forvirring selv blant de som kan programmering.

For eksempel har Arduino sin egen programmerings-API, og tilbyr en rekke funksjoner som du kan bruke i Arduino IDE eller andre miljøer for å programmere mikrokontrolleren slik at du kan lage dine prosjekter. Men ... kan du fortelle meg det forskjellen mellom et programmeringsbibliotek og et API? Er det forskjeller mellom et rammeverk og et API, er et API det samme som et ABI? Det er mange tvil som kanskje fortsetter å skape forvirring, og som vi kommer til å avklare akkurat nå.

Jeg vet ikke om du vet det språk på lavt nivå, som montøren eller ASM, avhenger direkte av maskinvarearkitekturen, mens de på høyt nivå trekker seg fra maskinvaren for å forenkle programmererens oppgave, men avhenger av operativsystemet (syscalls) eller av visse APIer osv For at alt dette ikke skal høres ut som kinesisk, la oss se hva det handler om ...

Hva er en API?

en API er et verktøy som utviklere leveres med slik at de har til rådighet en rekke funksjoner, underrutiner og prosedyrer eller metoder for OOP som kan brukes gjennom eksisterende biblioteker. Blant hva en API tilbyr, er funksjoner for å lage enkle apper, funksjoner relatert til AI, med generering av grafikk, styring av maskinvareressurser osv.

For eksempel er jeg sikker på at du er kjent med API-er som den som tilbys av Linux gjennom glibc-biblioteket, eller grafikk som OpenGL og Vulkan, eller også andre som OpenCL for heterogen databehandling, OpenXR for virtuell og utvidet virkelighet, etc. Andre operativsystemer og programvare inkluderer også egne APIer slik at andre programmerere kan lage tillegg, plugins eller moduler for det systemet, etc.

Eksempel med Arduino

Hvis du har et merke Arduino og du bruker ofte Arduino IDE, eller noe annet utviklingsmiljø for Arduino, vil du vite at når du oppretter en kode, bruker du flere alternativer for å beordre mikrokontrolleren din til å utføre en rekke handlinger. For eksempel er pinMode () en typisk funksjon for å konfigurere en Arduino-pin, ikke sant?

Når du skriver pinMode (9, INPUT)For eksempel indikerer du at pinne 9 på Arduino-kortet skal fungere som en inngang, det vil si at mikrokontrolleren vil vente på at informasjonen skal komme inn gjennom den pinnen for å lese den og utføre en handling. Men har du noen gang lurt på hvordan han er i stand til å forstå den befalingen?

Vel, Arduino har en Utviklings-API som er gjort tilgjengelig for oss. Tredjepartsbiblioteker kan legges til denne APIen, som vi har sett i mange eksempler på denne bloggen. Som SparkFun for visse sensorer, etc. Med alt dette kan funksjonene legges inn i Arduino IDE, og den vil oversette koden riktig for å laste den inn i minnet til mikrokontrolleren slik at den kan behandle den.

Hvis du ikke hadde denne API-en, ville du ikke kunne lage disse programmene for Arduino på en så enkel måte, siden vi skulle prøve å lage dem i monteringskode for ATMega328P-mikrokontrolleren, det vil si i ASM for AVR-arkitektur. Og det ville være mye mer komplisert, siden du må bruke instruksjonene som er tilgjengelige av denne ISA. I så fall vil du ikke bare ha tilstrekkelig kunnskap om repertoaret til den ISA, men også andre aspekter som antall registreringer osv. Det vil si at du bør ha kunnskap på lavt nivå om maskinvaren du jobber for.

av for eksempel ASM-kode Det du bør generere for at en LED skal blinke i en løkke, vil være:

<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

Mens takket være API er fasilitetene totalt, skrive på et høyt nivå følgende ekvivalent kode (mye kortere og 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 

Forskjeller med en ABI

API mot Linux ABI

ABI er et mindre kjent begrep, det er et Application Binary Interface, eller på engelsk Application Binary Interface. I dette tilfellet er det et grensesnitt mellom moduler i et program, vanligvis mellom et bibliotek eller et maskinspråk operativsystem for arkitekturen du er i: SPARC, AMD64, ARM, PPC, RISC-V, etc.

Takket være ABI bestemmes måten å ringe funksjonene på, binært format som kan forstå maskinen du kompilerer for eller systemanropene, hvordan unntak håndteres, hvordan data sendes osv.

Forskjeller med et rammeverk

Un rammeverk eller rammeverk er mer et sett med verktøy til din disposisjon for å hjelpe utviklingen av et gitt prosjekt. Famework setter vanligvis noen kodingsstandarder, gir nyttige komponenter osv. For eksempel er JUnit et rammeverk for Java, eller Symfony / Cake for PHP, etc.

Forskjeller med en SDK og NDK

SDK er et programvareutviklingssett, det vil si et programvareutviklingssett. Det går utover det som er et rammeverk eller et API. Et eksempel kan være Android Studio eller iOS xCode, etc. For eksempel inkluderer den første, i tillegg til selve Android API, også et IDE eller integrert utviklingsmiljø for programmering og kompilering, biblioteker, verktøy osv.

Videre NDK (Native Development Kit) det er et komplement. For eksempel tillater Android NDK utviklere å gjenbruke C / C ++ - kode ved å introdusere den til applikasjoner gjennom JNI (Java Native Interface) ...

Forskjeller med et bibliotek

Glibc-diagram Wikipedia

Endelig, biblioteket er en samling av gjenbrukbar kildekode som gjør livet lettere for programmerere. For eksempel er det inne i C-biblioteket stdio.h en printf-funksjon for å skrive ut tekst på skjermen. For at dette skal være mulig, er det nødvendig med en kildekode som får operativsystemet til å gjøre denne oppgaven. Men siden det er noe veldig tilbakevendende som brukes ofte, ganske enkelt ved å påkalle dette biblioteket, kan du bruke printf uten å skrive all koden fra bunnen av. Med andre ord, med andre ord, de kan sees på som forhåndsstøpte blokker.

Et bibliotek og et API kan lett forveksles, faktisk biblioteker er pakket inn i en API. Eksempel glibc...

Jeg håper at du etter dette har en ide klarere om hva en API, ABI, et rammeverk, en SDK og et bibliotek er, i tillegg til å kunne skille mellom dem fra nå av.


Bli den første til å kommentere

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.