什么是API
API(Application Programming Interface)提供了对某个问题的抽象,以及客户和解决该问题软件组件之间进行交互的方式。
组件通常以软件类库的形式分发,可以在多个应用程序中使用。目前的应用程序往往是由很多API建立而成,而这些API往往依赖于其他API。
API的目的是为某个组件的功能提供一个逻辑接口,同时隐藏该模块的具体实现。即代码只能通过该API的公共接口进行访问。也就是说,提供了一个抽象的接口,所以更多的将API理解为Abstract Programming Interface。
C++中的API
在C++中一般包含三个部分:
1.一个或多个头文件,定义了接口,使得客户端能够对其进行编译。开源API还包括其.cpp
文件。
2.库文件,某个API的特定实现可以被链接到用户程序的库文件中。可以为静态库,如Windows下的.lib
文件和Linux,Mac OS下的.a
文件。又或者是动态库,如Windows下的.dll
文件和Linux,Mac OS下的.so
文件。
3.辅助文档,如何使用API的概述信息。通常包括为API中所有的类和函数自动生成的文档。
API设计的注意事项
1.API是给开发者设计的接口。 设计拙劣的API很有可能让你的用户转向竞争者的怀抱。
2.多应用共享一个API。 一旦出错,造成的影响巨大。
3.修改API时必须保证向后兼容。 在计算机中指在一个程序或者类库更新到较新的版本后,用旧的版本程序创建的文档或系统仍能被正常操作或使用,或在旧版本的类库的基础上开发的程序仍能正常编译运行的情况。
4.API必须有良好的设计、文档、回归测试,并且保证发布之间的稳定性。
SDK与API
SDK(软件开发工具包)为安装在计算机特定平台的包,目的是使用一个或多个API来构建应用。除了上述API所要求的东西之外,还要包含支持其他帮助使用API的资源。
特征
良好的抽象
在设计API时,应该阐述在选定问题域内有意义的深层概念,而不是公开底层实现细节。当你把API文档提供给一位非程序员是,他应该能够理解接口中的概念并且知道他的工作机制。一种API不仅仅只有一种方式建模,每种方式都可以提供良好的抽象和易用的接口,关键是API应该有一致且合理的支撑体系。
这边先介绍一下UML类图。UML规范定义了一组面向对象软件系统的可视化建模符号。类用方框表示,该方框被分成三个区域,上层为类名,中层为列出类的属性,下层区域为类的方法。
方框中每条记录都可以添加前缀符,来对因属性或方法的可见性。+
表示共有类成员,-
表示私有类成员,#
表示受保护的类成员。
类之间的关系可以用多种样式的连接线和箭头表示。
关联:两个类之间的简单的依赖关系,两者互不从属于对方,用实线表示。带有方向,UML用开放箭头表示方向,比如“>”。
聚合:“has-a”关系,或者整体与部分的关系,两个类互不从属对方。用空心菱形的直线表示。
组合:“contain-a”关系,部分和整体具有统一的生存期。用带有实心菱形的直线表示。
泛化:类之间的父子关系,用带空心三角箭头的直线表示。
对象间的各种关系可以在某个对象边用注释定义,这样就能分辨出他们的关系是一对一还是多对一还是多对多。常见的一些关系有:0..1
表示零个或一个实例,1
表示一个实例,0..*
表示0个或多个实例, 1..*
表示一个或多个实例。