我的观点是,当我谈论 API 时,它仅指程序员所能看到的部分。如果我提到“库”,那么我也指的是所有“幕后”工作的东西,尽管这些工作仍然是库的一部分。
一个库包含可重复使用的代码块(软件程序)。
这些可重复使用的库代码通过APIs(应用程序编程接口)链接到您的程序中。
也就是说,这个API是一个与库交互的接口,通过它可将可重复使用的代码链接到您的应用程序中。
简单地说,API是一种软件接口,可以促进两个软件程序之间的交互。
math.c
包含数学函数的实现,如sqrt
、exp
、log
等。它包含所有这些函数的定义。math.h
引用这些函数,该API 描述并规定了预期行为。math.h
解释了它提供的所有函数、它们的参数和返回的数据等),而库是一种实现(math.c
包含所有这些函数的定义)。API是库的一部分,它定义了库如何与外部代码交互。每个库都有API,API是所有公开/导出内容的总和。现在,API的含义已经扩大了。我们也可以称网站/服务与代码交互的方式为API。您还可以说某些设备具有API-您可以调用的命令集。
有时候这些术语会混合在一起。例如,您有一些服务器应用程序(例如TFS)。它具有API,并且此API实现为库。但是,该库只是您和不执行您调用的人之间的中间层。但是,如果库本身包含所有操作代码,则无法说该库是 API。
我认为库
是一组可以轻松用于我们的代码中以完成任务的所有类和函数。但是,库可能包含一些私有函数,供其自身使用但不想公开。
API
是库中向用户公开的一部分。因此,无论我们拥有关于库的哪些文档,我们都将其称为API文档
,因为它只包含我们拥有访问权限的那些类和函数。
简明扼要地表述:
库:存储所有类和方法以供重复使用的集合。
API:库中的一部分类和方法,可供用户在其代码中使用。
当我们谈论或思考API时,有两种情况。
我认为,在第一种情况下,以API的术语思考是令人困惑的。这是因为我们总是使用一个库。只有库,没有不带库的API,尽管有倾向于以这样的术语思考。
那么C++中的标准模板库(STL)呢?它是一个软件库。
你可以拥有不同的库,但具有相同的API,即一组可用的类、对象、方法、函数、过程或任何你喜欢的编程语言术语。但可以说,我们有某个“标准”库的不同实现。
一个类比可能是:SQL是一个标准,但可以有不同的实现。你使用的始终是实现了SQL的某个SQL引擎。你可以遵循标准功能集,也可以使用一些扩展功能,特定于该实现。
而在库的“底层”是什么并不是你关心的,除非涉及到不同实现之间的效率差异。
当然,我知道这种思维方式并不是“普遍约束标准”。只是有很多新术语被创造出来,它们并不总是清晰、精确、直观的,这会带来一些混淆。当Oracle谈论集合时,它不是库,也不是API,而是一个“集合框架”。
大家好,
我想分享一下我对API和库的理解,但不使用技术术语。
我区分“库”和“API”的方式是想象自己去图书馆的情景。当我到那里时,我向“图书管理员”请求我需要的书,而不知道整个图书馆是如何管理的。
我将它们之间建立了一个简单的关系,如下所示: