框架与API的区别

48

现在可能是一个愚蠢的问题,但有时候“框架”和“API”这两个术语是可以互换使用的。我认为,“框架”更大、更通用,并包含许多API,可用于各种编程任务(例如,.NET框架)。而“API”则更小、更专业(例如,Facebook API)。有人想分享他们对此问题的看法吗?

以微软称.NET为一个“框架”,而Sun则称它们的产品为“平台”来举例,这是否也是一种商业/营销决策,即如何称呼“库集合”的问题?

12个回答

38

设计模式提供以下定义:

  • 工具包: "通常应用程序将包含来自一个或多个预定义类库的类,称为工具包。 工具包是一组相关和可重用的类,旨在提供有用的通用功能"。
  • 框架: "框架是一组合作的类,构成了特定软件类的可重复使用设计"。

关键在于,虽然工具包(API)可以在许多领域中很有用,但框架是为解决特定类别问题而设计的,并且可以通过创建框架的抽象类的应用程序特定子类来进行定制。

此外,可能更重要的是,“框架决定了您的应用程序的体系结构”,控制反转是框架的特征之一(请参见Martin Fowler); 代替您的应用程序调用特定的API以实现特定的行为,正是框架调用您的代码。


22

我一直以为框架就是整个东西,包括内部代码、API等。

实际上,API只是你想要利用框架时使用的部分。

换句话说,.NET框架包括.NET库、所有语言等。API只是调用函数的方式。


我更喜欢你的解释。API = 只是一个接口,轻量级的。框架:包括内部内容的完整盒子。 - Anonymous

16

一个框架确实引入了控制反转的概念
(即整个程序的控制流不是由调用者决定,而是由框架决定)

当你提到语言框架(如Java框架或.Net框架)时,你实际上包括的不仅仅是库及其API(如果这些库提供控制反转,那么它们将更受限制,成为软件框架)。

语言框架包括开发和执行环境,这些环境将会调用你的代码(编译或执行)。
这就是为什么.Net Framework是一个"框架"。


为了强调其“平台无关”的编程语言特性,Java可能将其框架(JDK、JRE)称为“Java Platform”。

摘自关于Java技术

平台是程序运行的硬件或软件环境。(包括Microsoft Windows、Linux、Solaris OS和Mac OS)。
大多数平台可以描述为操作系统和底层硬件的组合。
Java平台不同于其他大多数平台,它是一个仅运行在其他基于硬件的平台之上的纯软件平台。

Java平台有两个组成部分:

  • Java虚拟机
  • Java应用程序接口(API)

Java Platform


9
正如其名称所示(应用程序编程接口),API只是框架的接口。

6
据我所知,API基本上是与现有应用程序(如Facebook)进行接口交互的一种方式,而框架基本上是从头开始构建自己的应用程序的工具。

是的,我的意思就像一个专门的接口...不一定是应用程序,也可以是硬件。 - jasonco

5
  • 软件框架:是一个可重复使用的软件系统(或子系统)设计。软件框架可能包括程序、代码库、脚本语言、其他软件,以帮助开发和粘合软件项目的不同组件。框架的各个部分可以通过API公开。

  • API(应用程序编程接口):是由库和/或操作系统服务提供的一组例程(也称为方法、函数)、数据结构、对象类和/或协议,以支持应用程序的构建。
    更多详细信息以及其他内容,请参见 此特定主题的链接

4
API(应用程序编程接口):就像其名称所表示的那样,是一个外部程序与您的内部程序或库进行交互的接口,而不需要直接访问。例如,Google地图API和Facebook API为您提供了与其程序和库进行交互的接口,而无需直接访问。
另一方面: 框架:是一组可以帮助您构建应用程序的库。您可以将框架想象为“骨架”,应用程序定义“肉体”,因此在开始编程之前必须选择好框架,就像不能使用人类骨骼来构建马的身体一样。这就是为什么我们说:“你调用库。框架调用你。”

2
我认为API是框架的一个子集。

是的,就像一个框架包含许多API一样。例如,Java平台提供了Java 2D API,我用它来调整图像大小。 - jasonco

2

根据我的经验,一个框架通常包含至少两个简单API所没有的东西:

  • 可扩展性:您可以组合或子类化框架组件以扩展或自定义其功能。

  • 用于代码生成、管理或与应用程序开发相关的诊断任务的工具。


同意 - 框架提供了定制、配置和扩展能力,以及代码生成、部署和监控工具。 - Gordon Mackie JoanMiro

2

框架基本上是一组类,它们抽象了开发过程并促进了代码复用。例如,您可能会拥有独立于正在构建的应用程序的数据库、会话和分页类。但是,API是源代码接口,允许不同系统的两个或多个组件进行交互。例如,将Google Maps API添加到您的网站中,您和Google是两个不同的系统,Google编写了用于将其产品整合到您的网站/应用程序中的底层接口。总之,在构建系统时使用框架,然后为其他人(如Facebook和Google)提供扩展时开发API。


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