库和 API 之间还有区别吗?
Posted
技术标签:
【中文标题】库和 API 之间还有区别吗?【英文标题】:Is there still a difference between a library and an API? 【发布时间】:2011-04-10 08:53:19 【问题描述】:每当我向人们询问 API 和库之间的区别时,我都会得到不同的意见。有人给出this kind的定义,说API是规范,库是实现……
有些人会告诉你 this type 的定义,API 是一堆映射出来的函数,而库只是编译形式的分发。
所有这一切让我想知道,在 Web 代码、框架和开源的世界中,真的有实际的区别吗?像 jQuery 或 cURL 这样的库可以交叉到 API 的定义中吗?
此外,框架是否会跨入这一类别? Rails 或 Zend 中是否有更“类似于 API”或“类库”的部分?
真的很期待一些启发性的想法:)
【问题讨论】:
“”答:非常好! 【参考方案1】:我的观点是,当我谈到 API 时,它只意味着向程序员公开的部分。如果我说的是“库”,那么我也指的是“在引擎盖下”工作的所有东西,尽管它仍然是库的一部分。
【讨论】:
在我们如何考虑编写可重用代码方面非常出色。 今天不仅库有 API,我认为这就是发生这种混乱的原因。 我起初忽略了这个答案,因为我认为 API 只是一个通信接口。我不知道定义包括任何接口,甚至是“代码接口”,可以这么说。知道这一点,这个答案是正确的。【参考方案2】:库包含可重复使用的代码块(软件程序)。
这些可重复使用的库代码通过 API 链接到您的程序 (应用程序编程接口)。也就是说,此 API 是一个库接口,可重用代码通过它链接到您的应用程序。 简单来说,API 是两个软件程序之间的接口,便于它们之间的交互。
例如,在像 C 这样的过程语言中,库 math.c
包含数学函数的实现,例如 sqrt
、exp
、log
等。它包含所有这些函数的定义。
这些函数可以通过使用math.h
describes and prescribes the expected behavior的API来引用。
话虽如此,API 是一种规范(math.h
解释了它提供的所有函数、它们的参数和返回的数据等)并且库是一种实现(math.c
包含这些函数的所有定义)。
【讨论】:
经过大量搜索,这个答案最有意义。那里有很多意见,很少有例子支持。【参考方案3】:API 是定义如何与外部代码交互的库的一部分。每个库都有 API,API 是所有公共/导出内容的总和。如今,API 的含义得到了扩展。我们也可以将网站/服务与代码交互的方式称为 API。您还可以判断某些设备具有 API - 您可以调用的命令集。
有时这些术语可以混合在一起。例如,您有一些服务器应用程序(例如 TFS)。它有 API,并且这个 API 被实现为一个库。但是这个库只是你之间的一个中间层,而不是执行你的调用的那个。但是如果库本身包含所有动作代码,那么我们不能说这个库是 API。
【讨论】:
最好的简单定义“API 是库的一部分,它定义了它将如何与外部代码交互”。谢谢。【参考方案4】:我认为Library
是一组可以从我们的代码中用于轻松完成任务的所有类和函数。但是这个库可以包含一些它不想暴露的私有函数。
API
是向用户公开的库的一部分。因此,无论我们拥有关于库的任何文档,我们都将其称为 API Documentation
,因为它仅包含我们可以访问的那些类和函数。
【讨论】:
【参考方案5】:我们首先要定义一个接口...
接口:是两个“事物”相互交谈和交换信息的方式。 “事物”可以是 (1) 人或 (2) 任何类型的运行代码(例如库、桌面应用程序、操作系统、Web 服务......等)。
如果一个人想与一个程序对话,他需要图形用户interface (GUI) 或命令行interface (CLI)。两者都是人类(但不是程序)想要使用的接口类型。
但是,如果一个正在运行的代码(任何类型)想要与另一个正在运行的代码(任何类型)对话,它不需要或不需要 GUI 或 CLI,而是需要一个应用程序编程接口 (API)。
所以回答原始发帖人的问题:库是一种运行代码,API 是该运行代码与其他运行代码对话的方式。
【讨论】:
【参考方案6】:语言简洁明了
库:为可重用而存储的所有类和方法的集合
API:用户可以在其代码中使用的库类和方法的一部分。
【讨论】:
【参考方案7】:根据我的观点,无论调用者可以访问哪些函数,我们都可以在库文件中作为api调用,库文件中的某些函数是私有的,我们无法访问它们..
【讨论】:
【参考方案8】:我们说或想到 API 有两种情况
-
使用库的计算机程序
其他一切(更广泛的含义)
我认为,在第一种情况下,从 API 的角度思考是令人困惑的。这是因为我们总是使用图书馆。只有图书馆。没有库的 API 是不存在的,但有这样的倾向。
C++ 中的标准模板库 (STL) 怎么样?这是一个软件库。
您可以使用相同的 API 拥有不同的库,这意味着一组可用的类、对象、方法、函数、过程或任何您喜欢的编程语言中的术语。但可以说,我们对一些“标准”库有不同的实现。
有些类比可能是:SQL 是一个标准,但可以有不同的实现。您使用的总是一些实现 SQL 的 SQL 引擎。您可以只遵循标准的功能集,也可以使用特定于该实现的一些扩展功能。
除了此类库的不同实现在效率方面的差异之外,库中的“幕后”是什么不是您关心的问题。
我当然知道,这种思维方式并不是“普遍具有约束力的标准”。只是创造了很多新的术语,它们并不总是清晰、精确、直观,这会带来一些混乱。当 Oracle 谈到集合时。它不是库,也不是 API,而是“Collections Framework”。
【讨论】:
以上是关于库和 API 之间还有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章