60

每当我向人们询问 API 和库之间的区别时,我都会得到不同的意见。有人给出这种定义,说 API 是规范,库是实现......

有些人会告诉你这种类型的定义,API 是一堆映射出来的函数,而库只是编译形式的分布。

这一切都让我想知道,在网络代码、框架和开源的世界里,真的有实际的区别吗?像 jQuery 或 cURL 这样的库可以交叉到 API 的定义中吗?

此外,框架是否完全跨入这一类别?Rails 或 Zend 中是否有更“类似于 API”或“图书馆式”的部分?

真的很期待一些启发性的想法:)

4

8 回答 8

61

我的观点是,当我谈到 API 时,它只意味着向程序员公开的部分。如果我说的是“库”,那么我也指的是“在引擎盖下”工作的所有东西,尽管它仍然是库的一部分。

于 2010-09-09T16:48:41.250 回答
25

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

这些可重用的库代码通过API (应用程序编程接口)链接到您的程序。也就是说,此 API 是库的接口,可重用代码通过该接口链接到您的应用程序。
简单来说,API 是两个软件程序之间的接口,便于它们之间的交互

在此处输入图像描述

例如,在 C 等过程语言中,库math.c包含数学函数的实现,例如sqrtexplog。它包含所有这些函数的定义。

这些函数可以通过使用描述和规定预期行为math.h的 API来引用。

话虽如此,API 是一种规范math.h解释它提供的所有函数、它们的参数和返回的数据等),而库是一种实现math.c包含这些函数的所有定义)。

于 2015-01-19T15:32:34.733 回答
17

API 是定义如何与外部代码交互的库的一部分。每个库都有 API,API 是所有公共/导出内容的总和。如今,API 的含义得到了扩展。我们也可以将网站/服务与代码交互的方式称为 API。您还可以判断某些设备具有 API - 您可以调用的命令集。

有时这些术语可以混合在一起。例如,您有一些服务器应用程序(例如 TFS)。它有 API,并且这个 API 被实现为一个库。但是这个库只是你之间的一个中间层,而不是执行你的调用的那个。但是如果库本身包含所有动作代码,那么我们不能说这个库API。

于 2010-09-09T16:48:08.613 回答
12

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

API是暴露给用户的库的一部分。因此,无论我们有什么关于库的文档,我们都称它为 an,API Documentation因为它只包含我们可以访问的那些类和函数。

于 2012-09-06T12:04:13.243 回答
3

我们首先要定义一个接口...

接口:是两个“事物”相互交谈和交换信息的方式。“事物”可以是 (1) 人或 (2) 任何类型的运行代码(例如库、桌面应用程序、操作系统、Web 服务等)。

如果一个人想与一个程序交谈,他需要图形用户界面(GUI) 或命令行界面(CLI)。两者都是人类(但不是程序)想要使用的接口类型。

但是,如果一个正在运行的代码(任何类型)想要与另一个正在运行的代码(任何类型)对话,它不需要或不需要 GUI 或 CLI,它需要一个应用程序编程接口(API)。

所以要回答原始发帖人的问题:库是一种运行代码,API 是该运行代码与其他运行代码对话的方式。

于 2015-11-20T17:24:26.037 回答
0

语言简洁明了

库:为可重用而存储的所有类和方法的集合

API: 用户可以在他/她的代码中使用的库类和方法的一部分。

于 2013-10-12T13:55:10.063 回答
0

根据我的观点,无论调用者可以访问哪些函数,我们都可以在库文件中调用 api,库文件中的某些函数是私有的,我们无法访问它们..

于 2014-12-29T06:41:49.113 回答
0

我们说或想到 API 有两种情况

  1. 使用图书馆的计算机程序
  2. 其他一切(更广泛的含义)

我认为,在第一种情况下,从 API 的角度思考是令人困惑的。这是因为我们总是使用图书馆。只有图书馆。没有库的 API 是不存在的,但有这样的倾向。

C++ 中的标准模板库 (STL) 怎么样?这是一个软件库。

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

一些类比可能是:SQL 是一种标准,但可以有不同的实现。您使用的总是一些实现 SQL 的 SQL 引擎。您可以只遵循标准的功能集或使用特定于该实现的一些扩展。

库中的“幕后”不是您关心的问题,除非此类库的不同实现在效率方面存在差异。

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

于 2020-10-14T03:17:32.023 回答