API的概念
时间:2014.07.02
地点:基地
--------------------------------------------------------------------------------
一、什么是API
API(Application Programming Interface)在现代软件中随处可见,目的在于为某个组件的功能提供一个逻辑接口,同时隐藏该模块内部的实现细节。是对问题的抽象,以及客户与解决问题的软件组件之间进行交互的方式。总的来说:API是一个明确定义的接口,它可以为其它软件提供特定的服务。
比如读取图像的API可能仅仅提供一个LoadImage()函数,它接收一个文件名作为参数,然后返回一个2维像素数组,而所有文件格式和数据压缩的细节全部隐藏在这个看似简单的接口之下。客户端代码可以通过调用该API的公有接口。
--------------------------------------------------------------------------------
二、C++中的API
C++中的API一般包括一个或多个头文件已经辅助文档。某个特定的API的具体实现通常是可以被链接到最终用户程序中的库文件,比如windows下的 .lib文件,或者动态链接库,比如windows下的 .dll文件。
而对于API这一词而言,工程师们也更喜欢扩展为 Abstract Programming Interface——抽象编程接口。它包含的元素总结如下:
a.头文件:一组.h头文件。头文件定义了接口,使得客户端代码能够对该接口进行编译。开源的API就还包括API实现的源代码(.cpp文件)。
b.类库:一个或多个静态库或动态库文件,它们提供了API的具体实现,客户端代码可以把它们的代码和这些库文件进行链接,从而为它们的应用程序添加相应的功能。
c.文档:如何使用API的概述信息。
下面举例来说:
众所周知的Win32 API就是Windows操作系统的API,它是C函数,数据类型和常量的集合,包括文件处理函数,进程与线程管理函数,创建图形用户界面的函数,与网络交互的函数等。Win32 API是一个纯C API,但我们可在C++程序中直接使用C API,C++中API的典型代表是STL,它包括一组容器类。对容器中元素进行遍历的迭代器以及作用于容器的各种算法。STL提供了操作元素集合任务的逻辑接口,且没有暴露算法内部实现任何细节。
总的一句:。API是软件组件的逻辑接口,它隐藏了实现这个接口所需的内部细节 。
在设计API时,因为API描述了其它工程师构建他们的应用软件所使用的软件,因此,API必须拥有良好的设计,文档、回归测试,并且保证发布之间的稳定性。
--------------------------------------------------------------------------------
三、API的层次
API的大小任意,小到一个函数,大到多个类组成的集合。可提供访问任意架构层面的功能,从底层操作系统调用到GUI工具包等。比如常见的API有:
3.1操作系统API
每个操作系统都必须提供一系列标准API,以方便程序员调用系统级服务。例如:POSIX API中关于进程操作的几个API,fork() ,getpid(),kill()等。而Win32 API中相应的有 CreateProcess(),GetCurrentProcess()以及TerminateProcess()等函数。这些都是很底层的API,必须保持稳定健壮,否则很可能导致很多程序崩溃。
3.2语言API
比如C语言标准库中的printf(),scanf()和fopen()和C++标准模板库中的容器类型std::string ,std::vector,std::set,std::map;迭代器还有泛型算法等很多API。
3.3图像API
3.4三D图像API
3.5图形用于界面API
最典型的代表恐怕就是熟知的 Qt了。