`

接口API设计的艺术

 
阅读更多

转自:http://www.iteye.com/topic/1128913

 

最近在设计一些基础平台的API,在设计过程中总结了一些经验,记录如下:

 

1、方法参数不要多。

特别是同一种数据类型的方法参数不要过多,一旦过多,调用者容易搞混顺序,搞混了顺序,在编程阶段不会报错,但是在运行时会出错。并且这种错误时不宜排查的。

 

2、如果方法参数超过4个,若超过则适合使用参数类进行封装。

人的记忆一般适合于4个参数左右,参数多了不利于掌握。

 

3、谨慎使用重载,可以使用覆盖。

重载是动态类型的,执行时才会知道到底哪个方法被执行了,覆盖则是静态类型的,一旦调用者的类型确定了,执行哪个方法就确定了。所以重载更容易造成一些你意向不到的Bug。

 

4、方法名称不宜过长,建议使用驼峰式。

在这个快餐时代,简练的东西都像迷你裙一样受欢迎。注意是简练,不是说越短约好,还得让人知道是什么。尽量使用领域内的专业术语。

 

5、方法个数不宜过多。

特别是在同一个类中的方法,容易让使用者不知道使用哪个方法合适,并且不利于维护。如果不是非得需要,不要增加一些你臆想中的方法,方法应该像正交坐标系一样。

 

6、方法签名中参数尽量使用接口,不要使用具体类。

使用接口利于扩展,使用具体类限制了使用的客户端。

 

7、要对输入参数进行校验。

要控制住输入,“用户输入的都是对的”是不靠谱的,如果等到某个关键地方因为参数错误而抛出异常,会造成查bug非常困难,这种校验工作迟早是要还的。

 

8、必要时对于输入的参数进行拷贝。

Java中对数是引用,所以传入的参数很可能在外部被修改的,这种情况下即时通过了校验,也可能会出现问题。所以为了方法的健壮性,请使用拷贝。除非,你认为客户端会注意安全的调用你的方法。注意,非final类的clone方法不一定是可靠的。

 

9、站在使用者角度写写单元测试用例。

使用API是个逆过程,这个逆过程不一定好受。特别是序列化的时候,序列化容易,反序列化不一定容易。

 

10、维护好JavaDoc

都有为开源项目垃圾的JavaDoc吐槽的时候,既然不想遭遇同样的命运,就维护好的JavaDoc。今天还看到Jsoup本次升级中修改了JavaDoc的一个bug。

分享到:
评论

相关推荐

    软件框架设计的艺术

    第17章 利用竞赛游戏来提升API设计技巧 300 17.1 概述 300 17.2 第一天 301 17.2.1 非public类带来的问题 304 17.2.2 不可变性带来的问题 304 17.2.3 遗漏实现的问题 308 17.2.4 返回结果可能不...

    浅谈关于JavaScript API设计的一些建议和准则

    但是API设计,作为我们自己写的库中提供的公共接口,能够向调用我们代码的开发者表现出我们库的一些特点和功能,所以API设计和UI设计一样重要。事实上,两者都是为应用可以提供更好的用户体验具有基本的方式。应用UI...

    Unix编程艺术.pdf

    unix是什么,它是一个...有一种很好的方式来验证API是否设计良好:如果试着用纯人类语言描述设计(不许摘录任何源代码),能否把事情说清楚?养成在编码之前为API编写一段非正式书面描述的习惯,是一个非常好的方法。

    API:针对Docker的姬长信API一个基于多种编程语言的开源免费不限制提供生活常用,出行服务,开发工具,金融服务,通讯服务和公益大数据的平台

    之前一直使用个人,在2017年首个公开公益接口并逐渐开放主Linux Docker容器,编程语言杂七杂八不介绍了数据存储主OceanBase采用REST风格设计。所有接口请求地址都是可预期的以及面向资源的。使用规范的HTTP响应代码...

    java版斗地主源码-DKJavaWebApiDemo:个人JavaWeb写API的实现设计,Maven管理依赖,框架为Spring4.1.4

    进行开发时,写接口就成为一门艺术活。无论是后台管理系统的前后端分离、还是要给移动端提供数据,返回方便、规范的数据及其重要。掌握以后,你肯定会爱不释手。有一年以上 Java 开发经验的人,相信不会再选择 PHP、...

    二十三种设计模式【PDF版】

    关于本站“设计模式” Java 提供了丰富的 API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用, 甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至. 在...

    RapidMiner6使用手册

    Java API(应用编程接口) 简单的插件和推广机制 强大的可视化引擎,许多尖端的高维数据的可视化建模 400多个数据挖掘运营商支持 耶鲁大学已成功地应用在许多不同的应用领域,包括文本挖掘,多媒体挖掘,功能设计,...

    一款多合一的照片编辑器.rar

    免费高清图片:应用内接入了Unsplash官方授权的图片搜索API接口,各种无版权、无水印、高品质的高清图片任妳免费使用,所有图片均支持免费下载,而且可用于个人或商业用途,再也不用为找不到好看的图片而烦恼了。

    JAVA3D的网络三维技术的设计与实现(源代码+论文+说明).zip

    Java3D API是Sun定义的用于实现3D显示的接口。使用Java 的重要理由之一是它的平台无关性。Java3D提供了基于Java的上层接口。Java3D把OpenGL和DirectX这些底层技术包装在Java接口中。这种全新的设计使3D技术变得不再...

    最新ssm项目基于Java Web的怀旧唱片售卖系统+vue.zip

    8. **技术文档**:项目提供完善的技术文档,包括系统架构、代码结构、API接口说明等,方便开发者快速理解和维护系统。 9. **数据库设计**:使用MySQL数据库存储唱片信息、订单记录、用户资料等数据,MyBatis作为ORM...

    matplotlib入门实战全教程

    允许用户使用非常类似于MATLAB图生成代码的代码创建绘图2.matplotlib前端或API是一组重要的类,可创建和管理图形,文本,线条,图表等(艺术家教程),是一个对输出无所了解的抽象接口3.后端是设备相关的绘图设备,...

    gelli:Jellyfin的本地音乐播放器

    无法通过API进行艺术家排序更改后,播放列表和收藏夹不会自动更新批量操作尚不起作用未来的计划如果我有时间的话,这些就是我可能会包括的一些内容。接口检修最近缓存离线下载同步播放智能播放列表会话控制这些是我...

    Workshop-Amiens-jan15

    作坊杰夫猜想 亚眠高等艺术与设计学院研讨会 - 2015 年 1 月 12-14 日一个关于从 Processing 过渡到 P5 的研讨会,并学习如何使用他们的 API(应用程序编程接口)集成从不同站点(纽约时报、谷歌地图)实时捕获的...

    Axion:实验性编程语言,针对与其他语言的互译

    网 语言核心,词法分析器,解析器,前端接口,编译器API .NET标准 将Axion语法树转换回Axion源代码的扩展.NET标准 将Axion AST转换为C#源代码的扩展.NET标准 将Axion AST转换为Python源代码的扩展.NET标准 基于...

    springboot学生综合成绩测评系统.zip

    本系统采用前后端分离的开发模式,前端可能使用React、Angular或Vue.js等现代JavaScript框架来构建用户界面,后端则利用Spring Boot提供的快速开发能力实现RESTful API接口。数据库通常选用MySQL或其他关系型数据库...

    基于Processing语言的可编程LED特效灯-电路方案

    Processing是一种具有革命前瞻性的新兴计算机语言,它的概念是在电子艺术的环境下介绍程序语言,并将电子艺术的概念介绍给程序设计师。它是Java 语言的延伸,并支持许多现有的Java 语言架构,不过在语法(syntax) 上...

    OpenGL图形学演示程序

    OpenGL作为一个性能优越的图形应用程序设计界面(API),它独立于硬件和窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的...

    Android 4游戏编程入门经典

     3.2 游戏设计:笔比代码更强大  3.2.1 游戏的核心机制  3.2.2 一个故事和一种艺术风格  3.2.3 画面和切换  3.3 代码:具体细节  3.3.1 应用程序和窗口管理  3.3.2 输入  3.3.3 文件i/o  3.3.4 音频  ...

    mecca:Clojurescriptre框架中的动画音乐编辑器

    MECCA是一个基于样本的音乐编辑器,其灵感来自用Mario Paint写成的Clojurescript,并重新设计了框架。 它最初是想成为Chiptune跟踪器,它可以简单地模拟NES的4个通道。 但是后来我开始尝试其他接口,并且在使用SVG...

Global site tag (gtag.js) - Google Analytics