前言
虽然书名上写着“C++”,但是正如【译者序】所说:“本书所及,已经超出了标题所指的C++API设计——好的API所具备的特性其实是语言无关的”。
本书有12章,我想分章节做读书笔记,按自己的思路记下我最关注的内容。
什么是API?
API(Application Programming Interface)是一个明确定义的接口,提供了对某个问题的抽象,以及客户与解决该问题的软件组件之间交互的方式。
类似于“契约和承包人”:承包人提供了API并承诺调用它将完成某项任务,你不必关心它具体是怎么做的,你只负责挑选合适的API就行。
“API开发”相较于“普通软件开发”有什么不同?
- API是面向开发者设计的接口。(而普通软件面向的是一般用户)
- 多个应用程序会共享同一个API。这意味如果API出现错误将会影响多个程序。
- 修改API时,必须尽可能保证向后兼容。你不知道别人在哪使用了你的API。
- 也出于向后兼容的需求,所以在开发流程上要控制变更流程。(即审核更严格)
- API生存周期一般比较长。前期投入的成本比较高,但做好后会降低长期成本。
- 需要良好的文档。
- 自动化测试。
我为什么要编写API?
主要目的是隐藏该模块内部的实现细节。这有很多好处:
- 在未来可以自由修改内部实现,而不影响外部调用。
- 促进模块化
- 减少代码重复
- 易于在之后优化
我为什么要使用别人的API?
主要目的就是代码复用,而非从零开始造轮子。
(现代应用程序通常都是基于很多API建立起来的,而这些API又依赖于其他API)
团队为什么要使用API?
主要目的就是并行开发。
比如你可以先编写一个占位用的API,其他人在开发时可以调用这个占位的API,而非等待你完全写好API后才开始他们的工作。
什么时候我不要编写API?
编写API需要花费更多的精力,如果你没有提供给他人接口的需求,就不需要。
但是——这并不是编写劣质代码的理由。从长远来看,坚持API的设计原则还是值得的。(所以说还是尽量编写好的API)
什么时候我要小心使用API?
- 许可证限制。
- 功能不符合我预期
- 缺少源代码。这导致出了问题后我无法修复。
- 缺少文档,这导致我无充分信任它的行为。