1.5.2 真实示例
以上列出的API示例是特意按照其结构层次组织的,目的是展示在构建应用程序时可能用到的API的类别。在构建大型软件产品时,经常会用到来自几个架构层面的API。图1-3展示了由Linden Lab开发的Second Life Viewer的示例架构图。这是一项大型开源程序,它让用户能够在一个在线虚拟3D世界中彼此交互,能够处理用户间的语音聊天和文本消息。该图演示了在大型的C++(www.cppentry.com)软件项目中API的使用与分层。

特别值得关注的是内部API这一层,其在本书中的含义是公司为某个特定产品或产品套件而在内部开发的一系列模块。虽然图1-3为了简洁仅将它们表示为一个层次,但是这套内部API可以形成额外的堆叠层次。从基础层次提供内部字符串、字典、文件IO、线程程序等例行程序,到提供应用的核心业务逻辑的API,再到用于管理应用程序用户界面的定制GUI API。
显然,图1-3没有提供该应用中所有API的详尽列表。它只是简单地展示了每个结构层次中的几个例子。表1-1中完整地列出了该应用程序依赖的第三方API,目的是说明开发一个当代软件项目要依赖多少开源代码和商业闭源代码。如果将系统和OS库考虑进去,该表会变得更大。
表1-1 Second Life Viewer所使用的开放和封闭源代码API列表
|
API
|
简述
|
API
|
简述
|
|
APR
|
Apache可移植运行时环境
|
libpng
|
PNG 图像库
|
|
Boost
|
一组可移植的C++(www.cppentry.com)工具库
|
llqtwebkit
|
Qt的WebKit嵌入式网页浏览器
|
|
c-ares
|
异步DNS解析库
|
OggVorbis
|
压缩音频格式库
|
|
cURL
|
客户端URL请求库
|
OpenGL
|
3D图形渲染引擎
|
|
Expat
|
面向流的XML解析器
|
openjpeg
|
开源JPEG-2000库,可取代KDU
|
|
FMOD
|
商业音频引擎及MP3流解码器
|
OpenSSL
|
安全套接字层(SSL)库
|
|
FreeGLUT
|
OpenGL工具包(GLUT)的开源版本
|
Quicktime
|
播放视频的库
|
|
FreeType
|
字体光栅化引擎
|
Vivox
|
商业语音聊天库
|
|
glh_linear
|
C++(www.cppentry.com) OpenGL 帮助库
|
xmlrpc-epi
|
XML-RPC 协议库
|
|
jpeglib
|
JPEG 解码库
|
zlib
|
无损数据压缩库
|
|
KDU
|
商业Kakadu(KDU)JPEG-2000 解码库
|
|
|
API与SDK
术语SDK(软件开发工具包)和术语API是密切相关的。本质上讲,SDK是安装在计算机上的特定平台的包,其目的是使用一个或多个API构建应用。
SDK至少要包含编译程序所需的头文件(.h)以及提供API实现的库文件(.dylib、.so、.dll),用以链接到应用程序之中。然而, SDK还可能包含其他帮助使用API的资源,如文档、示例代码以及支持工具。
例如,Apple发布了多种iPhone API,以便程序员可以编写运行在iPhone、iPod Touch以及iPad设备上的应用。示例中包含了UIKit用户界面API、将Web浏览器功能嵌入到应用中的WebKit API以及支持音频服务的Core Audio API。
Apple同时还提供iPhone SDK,它是一个可下载的安装包,其中包含了实现多种iPhone API的框架(头文件和库文件)。你可以编译链接这些文件以使应用程序访问API的底层功能。iPhone SDK同时还提供API文档、示例代码、Apple集成开发环境(IDE)XCode下使用的各种模板和支持在台式机中运行iPhone应用的iPhone模拟器。