API与ABI不时会出现在软件开发的文档中,他们看上去相似却有很大区别,属于编程核心知识。鉴于,在维基百科上的定义比较形式化,不易理解。这里先从通俗易懂的角度讲解区别,然后再看维基百科的定义。
通常,我们使用特定的编程语言来描述API,尽管某些软件系统(“框架”或“库”)提供了多种语言的API(例如,许多机器学习框架同时具有C++和Python API)。API不仅包括功能、过程和数据结构的描述,还包括其使用约定(用于正确的资源管理 、回调机制和性能特征等)。扎实的API知识对于在特定框架下高效开发应用程序必不可少。大多数应用程序会使用多个API或框架:包括“开箱即用”编程语言提供的API、操作系统提供的API和第三方API等。大型应用程序还将倾向于包含”内部API“,这是专门为该应用程序开发的库的API(作为一种可以降低应用程序整体复杂性的机制)。
ABI包含很多方面的东西:
尽管ABI中的A是应用程序的缩写,但通常应用程序的程序员对ABI的关注并不多。相反,它们通常处理以下两种情况:
应用程序编程接口(API)是计算机程序不同部分之间的接口或通信协议,旨在简化软件的实现和维护。
API可以用于基于Web的系统、操作系统、数据库系统、计算机硬件或软件库。
API规范可以采用多种形式,但通常包括例程、数据结构、对象类、变量或远程调用的规范。 POSIX、windows API和ASPI是不同形式的API的示例。通常会提供API文档,以方便使用和实施。
最近,该术语通常用于指代客户端和服务器之间的特定类型的接口,该接口被描述为两者之间的“合同”。因此,如果客户端以特定格式发出请求,将始终以特定的格式获得响应或启动已定义的操作。这是API的一种特殊形式,有时也定义为WEB API。
在计算机软件中,应用程序二进制接口(ABI)是两个二进制程序模块之间的接口。通常,这些模块之一是库或操作系统工具,另一个是用户正在运行的程序。
ABI定义了如何在机器代码中访问数据结构或计算例程,这是一种低级的,与硬件相关的格式。相比之下,API在源代码中定义了这种访问,这是一种相对高级的、独立于硬件的、通常是人类可读的格式。 ABI的一个常见方面是调用约定,它确定如何将数据作为计算例程的输入提供或从计算例程的输出读取。示例是x86调用约定。
坚持使用ABI(可能会或可能不会正式标准化)通常是编译器、操作系统或库作者的工作;但是,当使用多种编程语言编写程序时,应用程序程序员可能必须直接处理ABI,这可以通过使用外部函数调用接口(FFI)来实现。
参考:https://www.quora.com/What-is-the-difference-between-API-and-ABI