库和API之间还有区别吗?
每当我问人们API和库之间的区别时,我都会得到不同的意见。有些人给出了定义,说API是规范,库是实现 有些人会告诉你定义,一个API是一堆映射出来的函数,而一个库只是编译形式的发行版 所有这些让我想知道,在一个充斥着web代码、框架和开源的世界里,是否真的还有实际的区别?像jQuery或cURL这样的库是否可以跨接到API的定义中 另外,框架是否也属于这一类?Rails或Zend是否有更“类似API”或“图书馆式”的部分库和API之间还有区别吗?,api,frameworks,paradigms,Api,Frameworks,Paradigms,每当我问人们API和库之间的区别时,我都会得到不同的意见。有些人给出了定义,说API是规范,库是实现 有些人会告诉你定义,一个API是一堆映射出来的函数,而一个库只是编译形式的发行版 所有这些让我想知道,在一个充斥着web代码、框架和开源的世界里,是否真的还有实际的区别?像jQuery或cURL这样的库是否可以跨接到API的定义中 另外,框架是否也属于这一类?Rails或Zend是否有更“类似API”或“图书馆式”的部分 非常期待一些启发性的想法:)API是库的一部分,它定义了如何与外部代码交互
非常期待一些启发性的想法:)API是库的一部分,它定义了如何与外部代码交互。每个库都有API,API是所有公共/导出内容的总和。如今,API的含义被拓宽了。我们也可以将web站点/服务与代码交互的方式称为API。您还可以看出某些设备具有API—您可以调用的命令集
有时这些术语可以混合在一起。例如,您有一些服务器应用程序(例如TFS)。它有一个API,这个API是作为一个库实现的。但是这个库只是你和执行你调用的人之间的中间层。但是,如果库本身包含所有操作代码,那么我们不能说这个库就是API。我的观点是,当我谈到API时,它只意味着向程序员公开的部分。如果我说的是“库”,那么我也指的是“在引擎罩下”工作的所有东西,尽管它是库的一部分。我认为
库是所有类和函数的集合,可以从我们的代码中使用它们来轻松完成任务。但是库可以包含一些它不想公开的专用函数
API
是向用户公开的库的一部分。因此,无论我们有什么关于库的文档,我们都称之为API文档
,因为它只包含我们可以访问的类和函数。语言清晰简洁
库:为可重用性而存储的所有类和方法的集合
API:library类和方法的一部分,用户可以在其代码中使用。根据我的观点,无论调用程序可以访问哪些函数,我们都可以在library文件中被称为API,library文件中有一些私有函数,我们无法访问它们。库包含可重用的代码块(软件程序)
这些库的可重用代码通过API链接到您的程序
(应用程序编程接口)。也就是说,此API是一个到库的接口,通过该接口可将可重用代码链接到应用程序。
简单来说,可以说API是两个软件程序之间的接口,有助于它们之间的交互
例如,在C等过程语言中,库math.C
包含数学函数的实现,如sqrt
、exp
、log
等。它包含所有这些函数的定义
可以使用APImath.h
引用这些函数
也就是说,API是一种规范(math.h
解释了它提供的所有函数、它们的参数和返回的数据等),库是一种实现(math.c
包含这些函数的所有定义)。我们首先要定义一个接口
接口:是两个“事物”相互对话和交换信息的手段。“东西”可以是(1)人或(2)任何种类的运行代码(例如,库、桌面应用程序、操作系统、web服务等)
如果一个人想要与程序对话,他需要图形用户界面(GUI)或命令行界面(CLI)。两者都是人类(而不是程序)希望使用的接口类型
但是,如果一个运行的代码(任何种类)想要与另一个运行的代码(任何种类)对话,它不需要或不需要GUI或CLI,而是需要一个应用程序编程接口(API)
因此,为了回答最初的海报问题:库是一种运行代码,API是运行代码与其他运行代码对话的方式。当我们谈到或想到API时,有两种情况
使用库的计算机程序
其他一切(广义)
我认为,在第一种情况下,从API的角度思考是令人困惑的。因为我们总是使用图书馆。只有图书馆。没有库的API是不存在的,但有这样一种倾向
如何在C++中使用标准模板库(STL)?这是一个软件库
您可以使用相同的API拥有不同的库,这意味着可用的类、对象、方法、函数、过程或任何您喜欢的编程语言术语的集合。但是可以说,我们对一些“标准”库有不同的实现
有些类比可能是:SQL是一种标准,但可以有不同的实现。您使用的总是一些实现SQL的SQL引擎。您可以只遵循标准的特性集,或者使用特定于该实现的一些扩展特性
您不关心库中的“引擎盖下”是什么,除了这些库的不同实现在效率上的差异
当然,我知道,这种思维方式并不是“普遍具有约束力的标准”。只是很多