什么是API
API(Application Programming Interface)提供了对某个问题的抽象,以及客户与解决该问题的软件组件之间进行交互的方式。组件本身通常以软件类库形式分发,它们可以在多个应用程序中使用。概括地说,API定义了一些可复用的模块,使得各个模块化功能块可以嵌入到终端用户的应用程序中去。
你可以为自己、你所在机构中的其他工程师或大型开发社区编写API。它可以小到只包含一个单独的函数,也可以大到包含数以百计的类、方法、全局函数、数据类型、枚举类型和常量等。它的实现可以是私有的,也可以是开源的。有关API的一个重要的基本定义是:API是一个明确定义的接口,可以为其他软件提供特定服务。
现代应用程序通常都是基于很多API建立起来的,而这些API往往又依赖于其他API。如图1-1中示例应用程序所示,该应用程序用到了3个类库(1、2、3)的API,而这3个API中有2个又用到了另两个类库(4和5)。举例来说,浏览图片的应用程序可能会用到加载GIF图片的API,而该API本身则可能又依赖更底层的压缩或解压缩数据的API。
为什么使用API
在软件项目中为什么要关注API,这一问题可以从两个方面理解:
- 为什么要设计并编写API?
- 为什么要在应用中使用其他人提供的API?
我将在接下来的小节中回答这两个方面的问题,并指出在项目中使用API的各种好处。
如果你正在编写供其他开发人员使用的模块,不管他们是公司里的其他工程师还是外部客户,比较明智的办法是构建API来让他们访问这些功能。这么做会带来以下好处。
更健壮的代码
隐藏实现
通过隐藏模块内部实现的细节,开发人员就可以在未来的某个时间自由修改模块的实现而不给用户造成重大影响。如若不然,会导致以下结果:
- 代码的更新将会受到限制;
- 用户只有重写代码才能使用新版本的程序库
如果总是让用户不停地更新软件版本,他们很可能不愿再做更新,或者干脆弃用,另外寻找不需要太多维护工作的API。因此,优秀的API设计对业务或项目成功至关重要。
增长寿命
随着使用时间增长,那些公开了实现细节的系统的内部代码会变得错综复杂,系统的各个部分要依赖其他部分的内部实现细节。
因此,系统将会变得脆弱、死板、不可移植且粘滞性高(Martin,2000)。如此一来,公司为了改善这些代码,就不得不花费大量人力财力,甚至推倒重写。事先花工夫做好API设计,而后维护好该设计以保证一致性,软件寿命就能延长,从长远看也能节省花费。
促进模块化
API通常用来完成一项具体的任务或用例。因此,API定义了一组具有一致目的的模块化的功能集。在大量API基础之上