Wat is 'n API

wat is 'n API

die API-akronieme: u sal dit meer as een en twee keer gesien het as u artikels oor sagteware lees. Maar nie almal weet wat 'n API regtig is nie. Daarom verduidelik ons ​​dit in hierdie artikel. Die eerste ding om te sê is dat dit die afkorting is van Application Programming Interface, dit wil sê in Spaans, Application Programming Interface. En dit veroorsaak baie keer verwarring selfs onder diegene wat 'n mate van programmering ken.

Arduino het byvoorbeeld sy eie programmerings-API en bied 'n aantal funksies aan wat u in die Arduino IDE of ander omgewings kan gebruik om die mikrobeheerder te programmeer sodat u projekte kan skep. Maar ... sou jy my kon sê die verskil tussen 'n programmeringsbiblioteek en 'n API? Is daar verskille tussen 'n raamwerk en 'n API? Is 'n API dieselfde as 'n ABI? Daar is baie twyfel wat miskien verwarring voortbring en wat ons nou gaan opklaar.

Ek weet nie of u dit weet nie lae-vlak tale, net soos die samesteller of ASM, hang direk af van die hardeware-argitektuur, terwyl die hoëvlak-hulle van die hardeware afneem om die taak van die programmeerder te vergemaklik, maar afhang van die bedryfstelsel (syscalls) of van sekere API's, ens. Sodat dit nie soos Chinees klink nie, kom ons kyk waaroor dit gaan ...

Wat is 'n API?

'n API is 'n instrument waarmee ontwikkelaars voorsien word sodat hulle 'n reeks funksies, subroetines en prosedures of metodes vir OOP tot hul beskikking het wat deur die bestaande biblioteke gebruik kan word. 'N API bied onder meer funksies om eenvoudige programme te skep, funksies wat verband hou met AI, met die generering van grafika, bestuur van hardewarehulpbronne, ens.

Ek is byvoorbeeld seker dat u vertroud is met API's soos die wat Linux deur die glibc-biblioteek aanbied, of grafika soos OpenGL en Vulkan, of ook ander soos OpenCL vir heterogene rekenaars, OpenXR vir virtuele en uitgebreide realiteit, ens. Ander bedryfstelsels en sagteware bevat ook hul eie API's, sodat ander programmeerders byvoegings, inproppe of modules vir die stelsel kan skep, ens.

Voorbeeld met Arduino

As u 'n kenteken het Arduino en jy gebruik gereeld Arduino IDE, of enige ander ontwikkelingsomgewing vir Arduino, sal u weet dat wanneer u 'n kode skep, u verskeie opsies gebruik om u mikrobeheerder te beveel om 'n reeks aksies uit te voer. PinMode () is byvoorbeeld 'n tipiese funksie om 'n Arduino-pin in te stel, nie waar nie?

As jy skryf pinMode (9, INPUT)U gee byvoorbeeld aan dat pen 9 van die Arduino-bord as 'n invoer moet werk, dit wil sê dat die mikrobeheerder sal wag dat die inligting deur die pen gaan om dit te lees en 'n aksie uit te voer. Maar het u al ooit afgevra hoe hy die opdrag kan verstaan?

Wel, Arduino het 'n Ontwikkelings-API wat aan ons beskikbaar gestel word. Derdeparty-biblioteke kan by hierdie API gevoeg word, soos ons in baie voorbeelde op hierdie blog gesien het. Soos SparkFun's vir sekere sensors, ens. Met dit alles kan die funksies in die Arduino IDE ingevoer word en dit sal die kode behoorlik vertaal om dit in die geheue van die mikrobeheerder te laai sodat dit kan verwerk.

As u nie hierdie API gehad het nie, sou u nie hierdie programme op so 'n eenvoudige manier vir Arduino kon skep nie, want ons moet probeer om dit in samestellingskode vir die ATMega328P-mikrobeheerder te maak, dit wil sê in ASM vir AVR-argitektuur. En dit sal baie ingewikkelder wees, aangesien u die instruksies wat beskikbaar is by hierdie ISA direk sal moet gebruik. As dit die geval is, sal u nie net die repertorium van daardie ISA voldoende moet ken nie, maar ook ander aspekte soos die aantal registrasies, ens. Dit wil sê, u moet kennis dra van die hardeware waarvoor u werk, op 'n lae vlak.

Por ASM-kode Wat u moet genereer vir 'n LED om in 'n lus te knip, is:

<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

terwyl danksy die API is die fasiliteite totaal, die volgende ekwivalente kode (baie korter en intuïtiewer) op hoë vlak te skryf:

<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 

Verskille met 'n ABI

API teen Linux ABI

ABI is 'n minder bekende term, dit is 'n Application Binary Interface, of in Engels Application Binary Interface. In hierdie geval is dit 'n koppelvlak tussen modules van 'n program, meestal tussen 'n biblioteek of 'n masjientaal-bedryfstelsel vir die argitektuur waarin u is: SPARC, AMD64, ARM, PPC, RISC-V, ens.

Danksy die ABI word die manier om die funksies te skakel bepaal, binêre formaat wat die masjien waarvoor u saamstel of die stelseloproepe kan verstaan, hoe uitsonderings hanteer word, hoe data deurgegee word, ens.

Verskille met 'n raamwerk

Un raamwerk of raamwerk is meer 'n stel gereedskap tot u beskikking om die ontwikkeling van 'n gegewe projek te help. Die famework stel gewoonlik enkele koderingstandaarde, bied nuttige komponente, ens. JUnit is byvoorbeeld 'n raamwerk vir Java, of Symfony / Cake vir PHP, ens.

Verskille met 'n SDK en NDK

SDK is 'n sagteware-ontwikkelingstel'n sagteware-ontwikkelingstel. Dit gaan verder as wat 'n raamwerk of 'n API is. 'N Voorbeeld kan wees Android Studio of iOS xCode, ens. Die eerste een bevat, benewens die Android API self, ook 'n IDE of geïntegreerde ontwikkelingsomgewing vir programmering en samestelling, biblioteke, gereedskap, ens.

Verder, NDK (Native Development Kit) dit is 'n aanvulling. Met Android NDK kan ontwikkelaars byvoorbeeld C / C ++ - kode hergebruik deur dit bekend te stel aan toepassings via JNI (Java Native Interface) ...

Verskille met 'n biblioteek

Glibc-diagram Wikipedia

Ten slotte, die biblioteek is 'n versameling herbruikbare bronkode dit maak die lewe vir programmeerders makliker. In die C-biblioteek stdio.h is daar byvoorbeeld 'n printf-funksie om teks op die skerm af te druk. Om dit moontlik te maak, is 'n bronkode nodig wat die bedryfstelsel hierdie taak laat doen. Maar omdat dit iets baie herhalend is wat gereeld gebruik word, kan u slegs gebruik maak van printf sonder om al die kode van vooraf af te skryf deur die biblioteek aan te roep. Met ander woorde, met ander woorde, dit kan gesien word as voorafvervaardigde blokke.

'N Biblioteek en 'n API kan maklik verwar word, biblioteke is in 'n API toegedraai. Voorbeeld glibc...

Ek hoop dat u hierna 'n idee het duideliker oor wat 'n API, ABI, 'n raamwerk, 'n SDK en 'n biblioteek is, benewens om voortaan tussen hulle te kan onderskei.


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

Wees die eerste om te kommentaar lewer

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.