图书馆和API之间仍然有区别吗?

62
每当我问人们API和库之间的区别时,都会得到不同的意见。有些人给出这种定义,说API是一个规范,而库则是实现...
有些人会告诉你这种定义,即API是一组映射函数,而库只是编译形式的分布。
所有这些让我想知道,在网络代码、框架和开源的世界中,是否还存在实际的差异?jQuery或cURL这样的库是否可以跨越到API的定义中?
另外,框架是否也属于这个类别?Rails或Zend中是否有部分更像“API”,或者“库”?
真正期待一些启迪性的想法 :)

还有库和API之间的区别吗?非常明显! - Anjan Biswas
9个回答

67

我的观点是,当我谈论 API 时,它仅指程序员所能看到的部分。如果我提到“库”,那么我也指的是所有“幕后”工作的东西,尽管这些工作仍然是库的一部分。


优秀的区分,以及对我们如何思考编写可重用代码的一个很好的观点。 - Trafalmadorian
3
今天不仅图书馆有API,我认为这就是混淆发生的原因。 - Andrey
一开始我并没有采纳这个答案,因为我认为API只是一种通信接口。我不知道定义中包括任何接口,甚至可以说是“代码接口”。了解到这一点后,我认为这个答案非常准确。 - Mike B

28

一个包含可重复使用的代码块(软件程序)。

这些可重复使用的库代码通过APIs(应用程序编程接口)链接到您的程序中。 也就是说,这个API是一个与库交互的接口,通过它可将可重复使用的代码链接到您的应用程序中。
简单地说,API是一种软件接口,可以促进两个软件程序之间的交互。

enter image description here

例如,在像C这样的过程性语言中,库math.c包含数学函数的实现,如sqrtexplog等。它包含所有这些函数的定义。
可以使用API math.h引用这些函数,该API 描述并规定了预期行为
话虽如此,API是一种规范math.h解释了它提供的所有函数、它们的参数和返回的数据等),而库是一种实现math.c包含所有这些函数的定义)。

2
经过大量搜索,这个答案最有意义。有很多不同的观点,但实际例子很少。 - Drenai

17

API是库的一部分,它定义了库如何与外部代码交互。每个库都有API,API是所有公开/导出内容的总和。现在,API的含义已经扩大了。我们也可以称网站/服务与代码交互的方式为API。您还可以说某些设备具有API-您可以调用的命令集。

有时候这些术语会混合在一起。例如,您有一些服务器应用程序(例如TFS)。它具有API,并且此API实现为库。但是,该库只是您和不执行您调用的人之间的中间层。但是,如果库本身包含所有操作代码,则无法说该库 API。


最好的简单定义是:“API 是库的一部分,它定义了它将如何与外部代码交互”。谢谢。 - curiouscheese

12

我认为是一组可以轻松用于我们的代码中以完成任务的所有类和函数。但是,库可能包含一些私有函数,供其自身使用但不想公开。

API是库中向用户公开的一部分。因此,无论我们拥有关于库的哪些文档,我们都将其称为API文档,因为它只包含我们拥有访问权限的那些类和函数。


3
我们首先需要定义一个接口……“接口”是两个“事物”进行交流和信息交换的方式。 "事物"可以是(1)人或(2)任何一种运行的代码(例如库、桌面应用程序、操作系统、Web服务等)。
如果一个人想要与程序交流,他需要图形用户界面(GUI)或命令行界面(CLI)。这两种界面都是人类(但不是程序)喜欢使用的接口类型。
然而,如果任何一种运行的代码想要与另一种运行的代码进行交流,它不需要也不希望有GUI或CLI,而是需要一个应用程序编程接口(API)。
因此,回答原帖子的问题:库是一种运行的代码类型,API是这种运行的代码与其他运行的代码交流的方式。

0
根据我的观点,无论哪些函数对调用者可用,我们都可以将它们称为库文件中的API。库文件中有一些私有函数,我们无法访问它们。

0

简明扼要地表述:

库:存储所有类和方法以供重复使用的集合。

API:库中的一部分类和方法,可供用户在其代码中使用。


0

当我们谈论或思考API时,有两种情况。

  1. 计算机程序使用库
  2. 其他所有(更广义的意义)

我认为,在第一种情况下,以API的术语思考是令人困惑的。这是因为我们总是使用一个库。只有库,没有不带库的API,尽管有倾向于以这样的术语思考。

那么C++中的标准模板库(STL)呢?它是一个软件库。

你可以拥有不同的库,但具有相同的API,即一组可用的类、对象、方法、函数、过程或任何你喜欢的编程语言术语。但可以说,我们有某个“标准”库的不同实现。

一个类比可能是:SQL是一个标准,但可以有不同的实现。你使用的始终是实现了SQL的某个SQL引擎。你可以遵循标准功能集,也可以使用一些扩展功能,特定于该实现。

而在库的“底层”是什么并不是你关心的,除非涉及到不同实现之间的效率差异。

当然,我知道这种思维方式并不是“普遍约束标准”。只是有很多新术语被创造出来,它们并不总是清晰、精确、直观的,这会带来一些混淆。当Oracle谈论集合时,它不是库,也不是API,而是一个“集合框架”。


0

大家好,

我想分享一下我对API和库的理解,但不使用技术术语。

我区分“库”和“API”的方式是想象自己去图书馆的情景。当我到那里时,我向“图书管理员”请求我需要的书,而不知道整个图书馆是如何管理的。

我将它们之间建立了一个简单的关系,如下所示:

  • 库 = 一个拥有整个系统和员工来管理书籍的图书馆。
  • API = 一个提供我需要的书籍简单访问的图书管理员。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接