什么是API

什么是API

API首字母缩写词在阅读有关软件的文章时会多次出现。 但是,并非所有人都知道API的真正含义。 这就是为什么我们在本文中对其进行澄清。 首先要说的是它们是应用程序编程接口的缩写,即西班牙语中的应用程序编程接口。 很多时候,即使在那些了解某些编程的人中,它也会引起混乱。

例如,Arduino有自己的编程API,提供了许多功能,您可以在Arduino IDE或其他环境中使用这些功能来对微控制器进行编程,以允许您创建项目。 但是...你能告诉我吗 编程库和API之间的区别? 框架和API之间有区别吗?API是否与ABI相同? 有许多疑问可能会继续造成混乱,我们现在将要进行澄清。

我不知道你是否知道 低级语言像汇编器或ASM一样,直接依赖于硬件体系结构,而高层则从硬件中提取以方便程序员的任务,但依赖于操作系统(系统调用)或某些API等。 为了使所有这些听起来都不像中文,让我们看看它的含义是...

什么是API?

API是为开发人员提供的工具 因此,他们可以使用现有库中可以使用的OOP一系列功能,子例程和过程或方法。 API提供的功能包括创建简单应用程序的功能,与AI相关的功能,图形的生成,硬件资源的管理等。

例如,我确定您熟悉API,例如Linux通过glibc库提供的API,或诸如以下的图形 OpenGL和Vulkan,或其他类似OpenCL 用于异构计算,用于虚拟现实和增强现实的OpenXR等。 其他操作系统和软件也包括自己的API,以便其他程序员可以为该系统创建插件,插件或模块等。

Arduino的例子

如果您有徽章 Arduino,您经常使用Arduino IDE, 或任何其他Arduino开发环境,您将知道,在创建代码时,您会使用多个选项来命令您的微控制器执行一系列操作。 例如,pinMode()是配置Arduino引脚的典型函数,对吗?

昆多语者 pinMode(9,输入)例如,您指示Arduino板的引脚9应该作为输入,也就是说,微控制器将等待信息通过该引脚输入以读取信息并执行操作。 但是您是否想知道他如何理解该命令?

好吧,Arduino有一个 提供给我们的开发API。 正如我们在此博客的许多示例中所看到的,可以将第三方库添加到此API。 像某些传感器的SparkFun一样,等等。 有了这些,就可以在Arduino IDE中输入功能,它将正确转换代码以将其加载到微控制器的内存中,以便对其进行处理。

如果您没有此API,那么您将无法以这种简单的方式为Arduino创建这些程序,因为我们应该尝试将它们制作为ATMega328P微控制器的汇编代码,即 适用于AVR架构的ASM。 这将更加复杂,因为您将必须直接使用此ISA提供的说明。 如果是这样,您不仅必须充分了解该ISA的全部功能,还必须充分了解其他方面,例如注册数量等。 也就是说,您应该对所使用的硬件有较低的了解。

通过 例如,ASM代码 您应该为LED闪烁而生成的内容是:

<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

多亏了API,这些设施才算完整, 高层次地编写以下等效代码(更短,更直观):

<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 

与ABI的差异

API与Linux ABI

ABI是一个鲜为人知的术语,它是一个 应用程序二进制接口,或英文应用程序二进制接口。 在这种情况下,它是程序模块之间的接口,通常是您所在的体系结构的库或机器语言操作系统之间的接口:SPARC,AMD64,ARM,PPC,RISC-V等。

多亏了ABI,可以确定调用函数的方式, 二进制格式 可以了解您要编译的机器或系统调用,如何处理异常,如何传递数据等。

与框架的差异

Un 框架或框架更多是一组工具 在您的帮助下,以帮助开发给定的项目。 框架通常设置一些编码标准,提供有用的组件等。 例如,JUnit是Java的框架,或者Symfony / Cake是PHP的框架,等等。

SDK和NDK的差异

SDK是一个软件开发套件,即软件开发套件。 它超出了框架或API的范围。 例如Android Studio或iOS xCode等。 例如,第一个,除了Android API本身,还包括一个IDE或用于编程和编译的集成开发环境,库,工具等。

此外, NDK(本机开发套件) 这是一个补充。 例如,Android NDK允许开发人员通过JNI(Java本机接口)将C / C ++代码引入应用程序,从而重用C / C ++代码。

与图书馆的差异

Glibc图Wikipedia

最后, 该库是可重用的源代码的集合 这使程序员的生活更轻松。 例如,在C库stdio.h中,有一个printf函数可在屏幕上打印文本。 为此,需要使操作系统执行此任务的源代码。 但是由于这是经常性的事情,因此只需调用该库就可以使用printf,而无需从头开始编写所有代码。 换句话说,它们可以看作是预制块。

实际上,库和API很容易混淆, 库包装在API中。 例子 glibc的...

我希望在此之后您有一个主意 更清楚地了解API,ABI,框架,SDK和库的功能,以及从现在开始可以区分它们的功能。


成为第一个发表评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。