许多软件工程师更喜欢把API 缩写为 Abstract Programming Interfaces 而非Application Programming Interfaces.

API 在c++中包含多个头文件及相关辅助文档

接口是开发者所写的最重要的代码,比起相关的实现代码出现问题,修复接口出现的问题的代价更大。

API是为编程人员所开发的用户接口,你的API可以被你没有想过的方式调用

修改API时必须保证向后兼容

API的生命周期比较长,为了创建好的API前期需要比较大的成本。因此规划、设计、版本、审查比不可少,后期大幅降低长期成本,对实现的更新改进不会影响客户

编写API时,良好的文档必不可少,尤其在不提供源代码的情况下。

自动化测试也非常重要,其他成千上万的开发人员依赖你代码的正确性,当对API进行修改时,一套完整的回归测试更有信心保证客户的程序不会奔溃。

API的好处

1.隐藏实现:通过隐藏内部实现细节,开发人员可以未来自由修改代码实现,不给用户造成重大影响

2.延长寿命:随着时间的延长,那些公开了实现内部细节的代码会变得错综复杂,系统的其他部分要依赖于另外的实现细节,系统会变得脆弱、僵化、顽固且粘渧性高,因此事先设计好的API,能后期保证一致性,软件寿命延长

3.促进模块化:API通常完成具体的任务和用例。API定义了一组模块化的功能集,大量API开发的应用降低了耦合,促进了模块化。

4.减少代码重复:通过将所有接口的逻辑置于一个接口之后,就将程序的某种行为统一处理,有助于消除代码复制。

5.消除硬编码假设:很多程序包含硬编码的值,并且不断复制,

6.易于改变实现:

7.易于优化:隐藏了实现细节不用,在优化代码时不用考虑客户端的调用

便捷API:简化API是一项困难的事情,减少API函数与API易于各种客户使用之间存在天然的矛盾

渐进式公开,API通过易用接口呈现基本功能,同时将高级的功能隐藏到另一个独立的层次中。

易用性:优秀的API设计应该使简单的任务更简单,使人一目了然。好的API可以让客户通过方法的签名知晓其使用方法,而不需要文档。遵循最小惊奇(leaset surprise)

  1.可发现性:可发现的API要求用户能够通过API自身明白如何使用它们,不需要任何解释和文档。

  2.不易误用:优秀的API不近易于使用,还要不易误用,这个是最重要的通用接口设计原则。

  3.一致性:优秀的API应该采用一致的设计方法,以便于用户记住其风格,进而更容易被用户采用。比如命名约定,参数顺序,标准的设计模式,内部模型语义,异常使用,和错误处理。

  4.正交:在API设计中,正交性以外这没有方法的副作用,调用设置的特定熟悉的方法属性的方法应该仅改变这个属性,而不改变其他公开访问的属性。

松耦合:

转载于:https://www.cnblogs.com/tianc/p/8783507.html

如何设计API 摘要 《C++API设计》相关推荐

  1. 视频编辑SDK---我们只提供API,任你自由设计炫酷的功能

    面对相对复杂的视频编辑处理技术,你是否束手无策? 在短视频应用中,有一定技术难度的视频编辑技术中,我们提出了一种全新的解决方法:画板和画笔. 短视频处理,用画板和画笔,就够了! 我们设计了极其简单易懂 ...

  2. Web API核查表:设计、测试、发布API时需思考的43件事

    当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是基于TCP/IP创建的.TCP/IP建立在一系列的管道上.当然,你也 ...

  3. 异步api_如何设计无服务器异步API

    异步api by Garrett Vargas 通过Garrett Vargas 如何设计无服务器异步API (How To Design a Serverless Async API) I rece ...

  4. API接口应该如何设计?

    在日常开发中,总会接触到各种接口.前后端数据传输接口,第三方业务平台接口.一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护.这篇文章重点讨论一下提 ...

  5. 设计糟糕的 RESTful API 就是在浪费时间!

    作者 | 帝都羊 责编 | 郭芮 现在微服务真是火的一塌糊涂.大街小巷,逢人必谈微服务,各路大神纷纷忙着把自家的单体服务拆解成多个Web微小服务.而作为微服务之间通信的桥梁,Web API的设计就显得 ...

  6. 元数据驱动设计 —— 设计一套用于API数据检索的灵活引擎

    如果你曾在企业开发方面具有一些经验,那么基本上可以断言,你必定承担过一些类似于搬运工的职责,将数据从你的数据库中不断地搬进搬出.此外,如果你在这方面有过过往的经验,那么你肯定也曾经做过将大量对共享文件 ...

  7. 深入探索REST(1):如何设计好的RESTful API?

    REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风格的一个典型应用.从其诞生之日开始,它就因其可扩展性和简 ...

  8. 如何设计好的RESTful API?

    REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风格的一个典型应用.从其诞生之日开始,它就因其可扩展性和简 ...

  9. 虚拟研讨会:如何设计好的RESTful API?

    http://www.infoq.com/cn/articles/how-to-design-a-good-restful-api/ REST架构风格最初由Roy T. Fielding(HTTP/1 ...

最新文章

  1. 主从配置_MySQL主从复制配置详解
  2. Nchain旗下矿池挖出首个BCH区块,“算力战争”真的要来了?
  3. SAP Spartacus split view控制同屏显示最大视图数的配置
  4. [JavaWeb-Servlet]Servlet_执行原理
  5. Maven : 将 Jar 安装到本地仓库和 Jar 上传到私服
  6. 理论基础 —— 线性表
  7. mybatis注册映射文件
  8. react 逆地理 高德地图_给高德新版地图点赞!出行服务竟然如此智能
  9. STM32固件库详解
  10. JAVA我的世界怎么弄TNT大陆_《我的世界》爷爷的遗言:TNT大陆地图存档
  11. 三菱服务器显示003C,FX3U/FX3G系列PLC内置定位功能的当前值寄存器是什么?
  12. AspCms程序PC端生成静态,手机端动态运行
  13. vue 抽离公共方法
  14. 求教lotka-volterra模型在matlab中的仿真模拟
  15. 取消mysql的salve设置
  16. CodeForces 805C Find Amir
  17. kettle使用 - 开启Carte服务
  18. ZbxTable 2.0 重磅发布!6大主要优化功能!
  19. AHB到标准握手时序桥 - 逻辑设计部分
  20. FC协议功能子模块,实现FC-1553协议,ASM协议,AV协议的应用,多种接口可定制

热门文章

  1. 51单片机配合振动传感器实现振动计数
  2. iris数据集(拿走不谢)
  3. linux内核线程优先级设置,Linux c 线程属性,线程优先级的修改
  4. SpringBoot整合redisTemplate获取自增主键
  5. vscode快捷键-mac
  6. Python 语音转文本
  7. 无向简单图怎么判断_无向图的基本算法
  8. Tesseract 识别图片
  9. 委托与事件代码详解与(Object sender,EventArgs e)
  10. VMware网络设置技巧