来自Google资深工程师Joshua Bloch的分享:API设计最佳实践

为什么API设计如此重要?API是一个公司最重要的资产。

为什么API的设计对程序员如此重要?

API一旦发布,出于兼容性考虑,不能轻易地随心所欲进行修改,比如删除参数。

从API的上帝 - 设计者的视角出发,有助于提高代码质量。

一个优秀的API应该满足下列标准:

易学易用,甚至是自描述的,不需文档也能让新手快速上手。不易造成误解。后续维护者易于理解,满足开闭原则 - 能够很容易进行扩展。

如何设计一个好的API

首先应该从收集需求出发。注意结合API实现的复杂度一起考虑。

作为第一步,首先给出需求规格文档,一页即可:

别指望你的API能让所有人满意。也不要指望发布后,它不会出任何错误——那是不可能的。

API也应该遵循单一职责:如果你发觉很难根据你的API实现的功能给它取个合适的名字,这是一个不好的信号,很多时候说明你的API里面做了太多事情——试着把它们拆成多个API。

信息封装 - 公有类尽量避免暴露公有字段出去,最大化信息隐藏

API命名艺术 - API的名称也是一门语言。

API和文档的关系

合理使用继承和子类,不要滥用里氏替换原则

采用fail fast 策略,尽可能早地抛出错误消息:

API的数据都应该允许使用者通过字符串的方式访问

慎用重载

选用合适的API参数和返回类型

API里的参数顺序也很有讲究

避免冗长的参数列表,参数如果超过3个,使用者就需要通过阅读文档才能消费了。

尽量返回不需要调用者进行异常处理的参数,比如空数组或集合,而不是null

API设计里的和异常处理相关的最佳实践

API重构的最佳实践

API设计和Thread-local相关的最佳实践

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

最新文章

  1. SQL select结果集和return的区别
  2. 浅谈线程池(上):线程池的作用及CLR线程池
  3. PHP: 深入pack/unpack 字节序
  4. codecomb 2098【stone】
  5. Yii系列总结:yii 标签用法
  6. beego任务定时执行,延迟执行
  7. perl5 第一章 概述
  8. docker 学习笔记21:docker连接网络的设置
  9. ElasticSearch(8)-分布式搜索
  10. HDoj-1042 大数阶乘
  11. Scrum冲刺阶段2
  12. 上传本地文件到github仓库基本操作
  13. CSS学习笔记之样式规划
  14. 微信发红包 PHP 实现
  15. osgExp只能将3dmax中的动画导出为路径动画osg::AnimationPath,而不能导出osgAnimation::Animation。osg播放骨骼动画应该使用FBX格式
  16. SDRAM相位角计算
  17. 97.394570112228 - Query OK, 1 row affected (43.05 sec) - the overhead of parsing and network communication
  18. web 纯 javascript 的MVC 实现的简单实践
  19. Linux 简单命令查询CPU、内存、网卡等信息
  20. 等边三角形---dfs

热门文章

  1. Request笔记
  2. Unity Github 项目收集
  3. Jquery jqXHR对象的属性和方法
  4. 鹅厂优文|主播pk,如何实现无缝切换?
  5. Exception from System.loadLibrary(smjavaagentapi) java.lang.UnsatisfiedLinkError: no smjavaagentapi in java.library.path
  6. Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)
  7. 跨平台 GUI可视化 网络调试工具
  8. JVM(二) 对象存活判断和垃圾回收算法
  9. Android加载大图片实例详解
  10. ccf-201609-3 炉石传说