框架VS. API

现在,这可能是一个愚蠢的问题,但有时框架和API的术语可以互换使用。 我看到的方式是,框架是一个更通用的东西,包含许多API,可以用于各种编程任务(例如,.NET框架)。API更小,更专业化(例如, Facebook API。)任何人都想分享他们对这个问题的见解吗?

举个例子,微软称.NET框架,而Sun把它们称为平台……所以,如何称之为“图书馆藏”也是商业/营销决策。

devise模式提供了以下定义:

  • 工具箱:“应用程序通常会包含来自一个或多个预定义类库的类,这些库称为工具包。工具包是一组相关且可重用的类,旨在提供有用的通用function。
  • 框架:“一个框架是一组合作的类,构成了一个特定类别的软件的可重用devise”。

这里的关键是,尽pipe工具包(APIs)在很多领域都可以使用,但框架可以解决特定类别问题的问题,可以通过创build框架抽象类的特定应用子类来定制。

此外,也许更重要的是,“框架决定了你的应用程序的体系结构”:控制反转(Inversion Of Control)是框架的特征之一(参见Martin Fowler )。 而不是让你的应用程序调用特定的API来实现特定的行为,而是调用你的代码的框架。

我一直认为框架是整个事情,内部代码,API的等等。

虽然API只是您使用框架时使用的一点点。

换句话说,.NET框架由.NET库,所有语言等组成。 API只是您调用函数的方式。

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

当你指的是语言框架(比如Java框架或者.Net框架)时,你实际上不仅仅包括库和它们的API(如果这些库提供了一个控制反转的话,它们将会更受限于一个软件框架 )。

语言框架包括将调用您的代码 (编译或执行它)的开发和执行环境。
这就是为什么.Net框架是一个“框架”。


Java可能会将其框架(JDK,JRE)称为“ Java平台 ”,以强调其“独立于平台”的编程语言function。

从关于Java技术

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

Java平台有两个组件:

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

Java平台

顾名思义(应用程序接口)API只是框架的接口。

根据我的理解,API基本上是一种与现有应用程序(如Facebook)接口的方式,而框架基本上是一个从头开始构build自己的应用程序的工具。

  • 软件框架:是软件系统(或子系统)的可重用devise。 软件框架可能包括程序,代码库,脚本语言,其他软件来帮助开发软件项目的不同组件并将其粘合在一起。 框架的各个部分可能通过API公开。

  • API(应用程序编程接口):是由库和/或操作系统服务提供的一组例程(AKA方法,函数),数据结构,对象类和/或协议,以支持应用程序的构build。
    更多细节以及其他链接到这个特定的主题是http://aprogrammersday.blogspot.com/2009/02/difference-between-framework-and-api.html

图书馆是一段代码,你可以从你自己的代码中调用,帮助你更快捷地完成任务。 例如,位图处理库将提供用于加载和操作位图图像的设施,使您不必为自己编写所有代码。

API (应用程序编程接口)是一个术语,表示库中的函数/方法,您可以调用它来请求为您执行操作 – 库的接口。

一个框架是一个提供许多服务的大型图书馆(而不是大多数图书馆可能只有一个专注的能力)。 例如,.NET提供了一个应用程序框架 – 它提供了大部分(如果不是全部)你需要编写大量应用程序的服务,所以一个“库”提供了几乎所有你需要的支持。 通常,框架提供了一个构build自己的代码的基础,而不是构build一个消耗库代码的应用程序。

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

根据我的经验,一个框架通常包含两件事情(至less),一个简单的API不会:

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

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

一个框架基本上是一个类的集合,它抽象出开发过程并促进代码重用,例如你可能拥有与正在构build的应用程序无关的数据库,会话和分页类。 但是API是源代码界面,允许不同系统的两个或多个组件进行交互,例如将Google Maps API添加到您的网站,您和Google是两个不同的系统,Google将底层界面用于将其产品整合到您的网站/应用。 总的来说,只需要在构build系统时使用框架工作,然后在为Facebook和Google等其他人提供扩展时开发API。

我知道这是一个古老的线索,这并不重要,但我只是不得不用自己的观点来叮当作响。 API(例如设备驱动程序API,Windows API等)为平台提供了基本的和基本的function,程序员可以运用他的创造力和平台做一些事情 – 是的,包括使用它来构build一个框架。 一个框架在function和抽象上都是较高的水平,并且提供了一组可重复使用和方便的函数/类/约定来促进共享某些共同属性的应用程序(例如iPad应用程序,Web服务等)的开发。

一个框架实现了一个非常重要的选项,称为IoC(控制反转) ,简而言之,就是说你的代码没有更多的东西。

在API中,您的代码调用其他代码( ),当您使用特定的框架时,它是控制应用程序stream的框架。