API:应用程序接口(API:Application Program Interface)应用程序接口(是一组定义、程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信。)API 的一个主要功能是提供通用功能集。程序员通过使用 API 函数开发应用程序,从而可以避免编写无用程序,以减轻编程任务。 API 同时也是一种中间件,为各种不同平台提供数据共享。现代应用程序通常都是基于很多API建立起来的,而这些API往往又依赖于其他API。在软件项目中为什么要关注API,因为它能让你编写更健壮的代码。隐藏实现。通过隐藏模块内部实现的细节,开发人员就可以在未来的某个时间自由修改模块的实现而不给用户造成重 大影响。如若不然,会导致以下结果:(1)代码的更新将会受到限制;(2)用户只有重写代码才能使用新版本的程序库。如果总是让用户不停地更新软件版本, 他们很可能不愿再做更新,或者干脆弃用,另外寻找不需要太多维护工作的API。因此,优秀的API设计对业务或项目成功至关重要。延长寿命。随着使用时间增长,那些公开了实现细节的系统的内部代码会变得错综复杂,系统的各个部分要依赖其他 部分的内部实现细节。因此,系统将会变得脆弱、死板、不可移植且粘滞性高(Martin,2000)。如此一来,公司为了改善这些代码,就不得不花费大量 人力财力,甚至推倒重写。事先花工夫做好API设计,而后维护好该设计以保证一致性,软件寿命就能延长,从长远看也能节省花费。在第4章的前面部分,我们 会深入讨论该问题。促进模块化。API通常用来完成一项具体的任务或用例。因此,API定义了一组具有一致目的的模块化的功能集。在大量API基础之上开发的应用,其结构将降低耦合而更加模块化,每一个模块的行为都不依赖其他模块的内部细节。减少代码重复。代码重复是软件工程中最恶劣的行为之一,任何时候都要避免犯此类错误。通过把所有的代码逻辑置 于一个严格的接口之后,让所有客户使用这个接口,就能将程序的某种行为统一处理。这样做意味着只需更新一处代码就可以改变向所有客户提供的API的行为。 这样有助于消除代码中所有重复的实现。事实上很多的API就是这样实现的,人们首先发现有重复的代码,然后制作统一的接口取代这些重复代码,于是就产生了 API。这是一件好事。消除硬编码负担。很多程序可能包含硬编码的值,并在整个代码中不断复制。例如,在需要写日志文件的地方就使用具体的文件名“myprogram.log”。我们可以使用API来提供这些信息,而不用在整个代码层面复制这些常量,例如,使用GetLogFilename() API调用代替硬编码的“myprogram.log”字符串。易于改变实现。如果将所有的实现细节隐藏在公共接口背后,就可以在不影响任何依赖此API代码的情况下改变其内部的实现细节。例如,可以将原本使用std::string解析文件的方式变为分配、释放、再分配char*缓冲区的方式。易于优化。成功隐藏了实现细节后,在优化API的性能时就不用操心更改客户端代码。例如,可以利用加设缓存的方案优化某个计算密集型的方法。之所以这样做是因为所有读写潜在数据的操作都是通过该API进行的,因此该API更确切地知道何时缓存中的结果无效并且需要重新计算结果。