库和API之间还是有区别吗?

每当我问人们一个API和一个图书馆之间的区别时,我会得到不同的意见。 有些人给出这种定义,说一个API是一个规范,一个库是一个实现…

有些人会告诉你这种types的定义,一个API是一堆映射出来的函数,而一个库就是编译后的forms。

所有这些让我怀疑,在一个networking代码,框架和开源的世界中​​,是否真的有一个实际的差异呢? 像jQuery或cURL的库可以交叉到一个API的定义?

另外,框架是否完全跨入这一类? 有Rails或Zend的一部分可以更“API”,或“libraryesque”?

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

我的观点是,当我提到一个API的时候,它只意味着暴露给程序员的部分。 如果我谈到一个“图书馆”,那么我也指的是“底层”的一切工作,尽pipe如此,图书馆仍然是图书馆的一部分。

API是定义如何与外部代码交互的库的一部分。 每个图书馆都有API,API是所有公共/出​​口资料的总和。 现在API的意义被拓宽了。 我们也可以将网站/服务与代码交互的方式称为API。 你也可以告诉某个设备有API–你可以调用的一组命令。

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

一个包含可重用的代码块。

这些库的可重用代码通过API (应用程序编程接口)链接到您的程序。 也就是说,API是可重用代码链接到应用程序的库的接口

在这里输入图像说明

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

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

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

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

我们首先要定义一个接口

界面 :是两个“事物”彼此交谈和交换信息的手段。 “事物”可以是(1)人或(2)任何types的运行代码(例如,库,桌面应用程序,OS,web服务等)。

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

如果一个正在运行的代码(任何types的)想要与另一个正在运行的代码(任何types的代码)交谈,它不需要或者不需要GUI或者CLI,而是需要一个应用程序编程接口 (API)。

所以要回答原来的海报问题:库是一种运行代码,API是这个运行代码与其他运行代码交谈的方式。

清晰简洁的语言

图书馆:收集所有的类和方法存储为可重用性

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

根据我的观点,无论调用者可以访问哪些函数,我们都可以在库文件中调用api,库文件具有一些私有的function,我们不能访问它们。