API设计原则:正确、好名、易用、易学、够快、够小。但我们从来不缺原则,〜〜〜

Interface

1.The Importance of Being Use Case Oriented,一个接口应当是一组方法的集合,方法是否能放在一起、最重要的依据是通过用测和使用场景去判断。更具体地是The Input Params Oriented,输入参数一定与接口相关。

2.you can't know what users of your API will do with it.但了解接口的可能调用者情况,预测使用场景,考虑性能压力。使用场景包括:WHO、WHY、WHERE、WHEN、HOW等,e.g.[APP团购单详情页][为了获取商户详情][在团购列表页][当该用户未购买过该团购单时][通过传Enum.Type.Mobile&shopId方式]调用shpinfo.bin接口。性能压力,各渠道调用QPS等。另外还需考虑线程安全,如synchronized等。

3.版本控制。 bring out one or more 0.x versions. create a new API with different package names. 不稳定版本、采用小号方式,让用户知道”我是坏人“。如果历史包袱太重,那就干脆换个包,令新、旧API和谐共存。另外,你永远都可以新增API,但永远都不能删除。

4.考虑提供批量处理方法,批处理可以有效减少网络传输、增加处理效率等。应当在批处理之前定义单个操作。

5.接口应该保证幂等性,异步调用超时、可保证重复调用,如AddConsum(serialNo, user, product, money),增加serialNo避免重复提交。

6.屏蔽底层实现细节。不要过度地具体说明方法的行为,如:用Map、List替换HashMap、ArrayList等,Exceptions should usually be unchecked。

Class

7.接口类使用到的所有实体类/Bean等类,为之提供无参数的构造函数。 一些框架如hessian需要bean有无参的构造函数。

8.接口方法中避免重载的方法,即避免有两个方法同名,重载的方法一个方面在hessian接口调用会有问题(其他协议的远程接口可能也有问题),另一个方面同名的方法影响代码可读性。 比如这样的接口是不合适的。

9.接口中用到的自定义类, 实现序列化接口,提供toString()方法; Java要提供toString()方法,并继承Serializable接口,生成Serial Verion UID。考虑实现Comparable等接口。

10.禁止使用继承,在实现类前加final关键字。继承违反了encapsulation特性,子类必须知道父类的实现特性。

Method

11.采用合适的参数和返回数据类型。如:使用BigDecimal或double代替float(32bit),使用更加灵活的接口数据类型作为输入参数,尽量使用Enum代替String作为类型区分参数等。

12.避免过长的参数列表,专家建议不超过3个,欢迎拍砖。有两种技术避免过长参数:a.将一个多个步聚的方法拆分细化,b.创建包含这些参数的帮助类。

13.避免集合返回NULL,应当返回空对象。但对于单个对象,如果空对象不能够方便地表达“值为NULL”的状态,则返回NULL。

附:

GOOGLE首席软件工程师Joshua Bloch:《How to Design a Good API and Why it Matters》《深入JAVA虚拟机》的作者Bill Venners:《Interface Design

Java API设计CheckList的更多相关文章

  1. (转)Java API设计清单

    转自: 伯乐在线 Java API设计清单 英文原文 TheAmiableAPI 在设计Java API的时候总是有很多不同的规范和考量.与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度 ...

  2. 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系

    现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashta ...

  3. Java API设计原则清单

    在设计Java API的时候总是有很多不同的规范和考量.与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度.就像飞行员起飞前的检查清单,这张清单将帮助软件设计者在设计Java API的过程 ...

  4. paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结

    paip.web数据绑定 下拉框的api设计 选择框 uapi  python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...

  5. Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net

    Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码, 1 1.1. 子模式 urlsafe Or  url  ...

  6. Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net

    Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码,1 1.1. 子模式 urlsafe Or  url u ...

  7. RESTful API 设计最佳实践

    背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...

  8. RESTful API 设计指南 (转)

    RESTful API 设计指南 2016-02-23 ImportNew (点击上方公号,可快速关注) 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2014/0 ...

  9. 优秀API设计的十大原则

    优秀API设计的十大原则 2015-09-23    分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难 ...

随机推荐

  1. POJ 2112 Optimal Milking (二分 + 最大流)

    题目大意: 在一个农场里面,有k个挤奶机,编号分别是 1..k,有c头奶牛,编号分别是k+1 .. k+c,每个挤奶机一天最让可以挤m头奶牛的奶,奶牛和挤奶机之间用邻接矩阵给出距离.求让所有奶牛都挤到 ...

  2. codeforces 505B Mr. Kitayuta's Colorful Graph(水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Mr. Kitayuta's Colorful Graph Mr. Kitayut ...

  3. python读取Excel

    import xlrd # 读取Excel文件 workbook = xlrd.open_workbook(r'E:\2015.xls') # 读取Excel的sheet名字 sheet_names ...

  4. 使用ARM模板部署自动扩展的Linux VMSS(2)

    12.准备完了模板文件,我们使用Powershell来创建VMSS for Linux的自动扩展集合,首先登陆到Azure中国的ARM账号: Login-AzureRmAccount -Environ ...

  5. iOS开发之OC篇-响应式编程Reactive Cocoa

    一.Reactive Cocoa 介绍 Reactive Cocoa 是 iOS 开发的一个 "重量级" 框架 高大上的概念:响应式编程 核心概念:信号 Signal 官方网站:h ...

  6. [TYVJ] P1049 最长不下降子序列

    最长不下降子序列 描述 Description 求最长不下降子序列的长度   输入格式 InputFormat 第一行为n,表示n个数第二行n个数   输出格式 OutputFormat 最长不下降子 ...

  7. js判断字符串中的英文和汉字

    有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 方法一 正则表达式,test()方法返回true 或 ...

  8. 软件体系结构经典问题——KWIC的分析和解决

    KWIC作为一个早年间在ACM的Paper提出的一个问题,被全世界各个大学的软件设计课程奉为课堂讲义或者作业的经典.(From Wiki,FYI,D. L. Parnas uses a KWIC In ...

  9. ALSA音频工具amixer,aplay,arecord

    ALSA音频工具编译安装 ========================================================================1.官网http://www. ...

  10. 论文:network embedding

    KDD2016: network embedding model: deep walk(kdd 2014): http://videolectures.net/kdd2014_perozzi_deep ...