优秀API设计的十大原则

2015-09-23    分类:编程开发设计模式首页精华暂无人评论

分享到:更多4

本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎加入技术翻译小组!

每个软件开发人员都使用API。“优秀”的API设计就像魔法。不过,我不知道有多少人可以解释为什么有的API很复杂、很难学,而有的则干净、简单、使用起来堪称是一种快乐。关于这个问题,我将在文中回答,并提供优秀API设计的十条法则。

1.只做你今天需要的

这是最顶级的规则。只解决今天必须解决的问题,最小化需要完成的答案。解决明天的问题的诱惑力是巨大的。但是一定要顶住诱惑!不要提前发布代码,重点是注重缩小发布周期。如果需要花几个小时的时间来回答新问题,那么就不用再猜测明天会出现什么问题了。

2.API模块化

将大型问题转化为规模较小的、可单独解决的问题。模块化API更容易学习,并且可以随时间而改变。你可以用新模块替代旧模块。可以一个一个地教导模块。也可以将API的实验部分从稳定或传统的部分中单独分出来。

3.使用结构化语法

使用结构化的API语法:用thing.action或thing.property代替do_action_with_thing。语法将自然而然地适应模块化的方法,其中每个模块是一个类。

4.使用自然语义

不要发明新概念。只使用开发人员众所周知的概念,作为类系统的基础。如果你发现自己需要解释概念,那说明你出错了:要么你在解决以后的问题,要么你正在错误地构建API。

5.API的自我约定

每个类都要严格使用相同的样式和约定。一致性是指当一个人学会这一个类时,他就能够融会贯通地掌握全部的类。文档化约定,让它们成为贡献者必须的标准。

6.API的可扩展性

易扩展性有许多好处,并不仅仅在于受到贡献者的欢迎。它还可以让你延缓实现功能,因为“如果需要的话,后面再添加也很方便”。不需要的功能就不添加,这也是一种双赢。

7.完全测试

每个类和方法必须经过恶意代码的完全测试。要像写代码一样写测试,然后像API提供给外界约定文档一样使用测试。每当代码改变的时候就运行这些测试。不要担心代码覆盖率。重要的是外部约定。也可以考虑使用约定生命周期。

8.分层式成长

保持API突出重点,然后在顶部将新的API分层,以便于它们能随着时间的推移成长。可扩展性并不意味着无限期的成长。明确API的范围,并在范围内执行。

9.保持简单易用

最终的测试要看API的简单易用程度。你写的例子,能不能让你的代码看起来更简单?你是不是强迫用户说明他们不在乎的选项?有没有毫无价值的额外步骤?要注重约减少API的可视面积。

10.保持可移植性

不要让系统概念泄漏到API。整洁有目的地抽象:这个API可以运行在任何操作系统上。API必须能够隐藏实现,但要注意第4条规则,以及要使用自然抽象。

欢迎大家说说自己的看法。

优秀API设计的十大原则的更多相关文章

  1. 好的框架需要好的 API 设计 —— API 设计的六个原则

    说到框架设计,打心底都会觉得很大很宽泛,而 API 设计是框架设计中的重要组成部分.相比于有很多大佬都认可的面向对象的六大原则.23 种常见的设计模式来说,API 设计确实缺少行业公认的原则或者说设计 ...

  2. 从草图绘制到实施交付:优秀API设计完整流程

    设计好的API是一项繁复的工作,但是优秀的设计是可以通过人为规划实现的,在本文中,我们将研究什么是好的设计以及如何在开发过程中实现它,还将介绍API设计的三个重要阶段:草图绘制,原型设计和交付实施,最 ...

  3. IOS7 UI设计的十大准则

    陈子木 iOS7 的用户界面设计比以往更卓越,并为用户提供了更具吸引力的独特体验,带来更大的机遇.在正式写代码之前,认真考虑UI设计是否符合这十条设计准则,可以提高App的可用性与吸引力.如果要更深入 ...

  4. SOA 设计的 9 大原则

    面向服务的架构 (SOA) 设计要尽可能地简单.在设计一个 SOA 服务的时候要谨记这 9 大设计原则: 1. 标准服务契约 服务要遵循一个服务描述. 2. 松耦合 服务之间的依赖最小化. 3. 服务 ...

  5. 数据分析利器之hive优化十大原则

    hive之于数据民工,就如同锄头之于农民伯伯.hive用的好,才能从地里(数据库)里挖出更多的数据来. 用过hive的朋友,我想或多或少都有类似的经历:一天下来,没跑几次hive,就到下班时间了. h ...

  6. IIS使用十大原则,(IIS过期时间,IIS缓存设置) 【转载】

    1. 自定义错误页虽然自定义错误页很简单,但只有少数管理员有效地利用了它.管理员可以在MMC中将HTTP错误信息映像到服务器上的绝对URL或是某个文件,更为详细的信息可以在这里找到.如果你嫌这太麻烦, ...

  7. atitit.api设计 方法 指南 手册 v2 q929.docx

    atitit.api设计 方法 指南 手册 v2 q929.docx atitit.api设计原则与方法 1. 归一化(锤子钉子理论)1 1.1. 链式方法2 1.2. 规则5:建立返回值类型2 1. ...

  8. 什么是好的产品——Diet Rams的十大设计原则

    博朗(BRAUN)的首席设计师Diet Rams的十大设计原则 第一条,好的产品是有创意的,它必须是一个创新的东西: 第二条,好的产品是有用的,一定要对人有用: 第三条,好的产品是优美的,它必须有美感 ...

  9. javascript的api设计原则

    前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...

随机推荐

  1. 1140 分珠 dfs

    时间限制:500MS  内存限制:65536K提交次数:24 通过次数:18 题型: 编程题   语言: G++;GCC Description 如下图所示,有若干珠子,每颗珠子重量不同,珠子之间有一 ...

  2. HDU5737 : Differencia

    注意到$b$不变,考虑用归并树来维护这个$b$序列,对于每个节点有序地维护$b$,同时在归并的时候预处理出每个元素在左右儿子里的排名. 在归并树上额外维护区间内$a\geq b$的个数以及赋值标记. ...

  3. 如何让Ue4画面产生振动效果

    可以使用CameraShake蓝图类,对应的C++类为UCameraShake. 这个类是通过修改PlayerController来达到效果

  4. Silverlight

    http://kb.cnblogs.com/zt/silverlight/ http://www.cnblogs.com/gnielee/archive/2010/01/15/silverlight- ...

  5. hdu2553 N皇后问题

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. RecyclerView android:layout_width="match_parent" 无效

    使用RecyclerView 时,在xml文件中设置宽度match_parent无效. View view = mInflater.from(mContext).inflate(R.layout.it ...

  7. Codeforces Round #244 (Div. 2) B. Prison Transfer

    题目是选出c个连续的囚犯,而且囚犯的级别不能大于t #include <iostream> using namespace std; int main(){ int n,t,c; cin ...

  8. ACM 过河问题

    过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...

  9. Html5_禁止Html5在手机上屏幕页面缩放

    最近测试html5页面,发现默认都允许用户缩放页面,或者在屏幕双击放大或缩小.即相当于这样设置 <meta name="viewport" content="wid ...

  10. window下 配置gitlab ssh非端口22端口

    git config --global user.name "jack" git config --global user.email "jackluo@xxx.com& ...