到目前为止,已经负责API接近两年了,这两年中发现现有的API存在的问题愈来愈多,但不少API一旦发布后就再也不能修改了,即时升级和维护是必须的。一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户须要排查全部调用的代码,须要调整全部与之相关的部分,这些工做对他们来讲都是额外的。若是辛辛苦苦完成这些之后,还发现了相关的bug,那对用户的打击就更大。若是API常常发生变化,用户就会失去对提供方失去信心,从而也会影响目前的业务。php
可是咱们为何还要修改API呢?为了API看起来更加漂亮?为了提供更多功能?为了提供更好的性能?仍是仅仅以为到了改变了时候了?对于用户来讲,他们更愿意使用一个稳定可是看起来不那么时髦的API,这并不意味着咱们再也不改进API了。当糟糕的API带来的维护成本愈来愈大时,我想就是咱们去重构它的时候。html
若是能够回头从新再作一遍,那么我心目中的优秀的API应该是怎么样的?编程
判断一个API是否优秀,并非简单地根据第一个版本给出判断的,而是要看随着时间的推移,该API是否还能存在,是否仍旧保持得不错。槽糕的API接口各类各样,可是好的API接口对于用户来讲必须知足如下几个点:api
而对于开发人员来讲,要求又是不同的:函数
如何作到以上几点,如下是一些总结:工具
若是一个API被普遍使用了,那么就不可能了解全部使用该API的用户。若是设计者但愿可以设计出被普遍使用的API,那么必须站在用户的角度来理解如何设计API库,以及如何才能设计出这样的API库。性能
在设计过程当中,若是能按照下面的方式来进行设计,会让这个API生命更长久学习
除此以外,下面还列出了一些具体的设计方法:测试
在设计API的时候,必定要避免任何极端的意见,尤为是如下几点:优化
API设计完成之后,须要通过周密的设计评审,评审的重点以下:
API须要是可测试的,测试不该依赖实现,测试充分的API,尤为是通过了严格的“兼容性整合测试”的API,更能保证在升级的过程当中不出现兼容性问题。兼容性整合测试,是指一组测试用例集合,这组测试用例会站在使用者的立场上使用API。在API升级之后,再检测这组测试用例是否能彻底符合预期的经过测试,尽量的发现兼容性问题。
对于每个API的设计者来讲,都渴望作到“向后兼容”,由于不论是如今的API用户,仍是潜在的API用户,都只信任那些可兼容的API。但向后兼容有多个层次上的意义,并且不一样层次的向后兼容,也意味着不一样的重要性和复杂度。
过去咱们总但愿能将现有的“不合理”的设计彻底推翻,而后按照如今“美好”的思路,从新设计这个API,可是在一段时间之后,又会碰到同样的情况,须要再推翻一次。 若是咱们没有有效的逐步改善的办法,依靠推翻现有设计,从新设计API只能让咱们回到起点,而后重现以前的过程。 要有一套行之有效的持续改善的办法来在API兼容的同时,改善API使之更好。
每个API都是有生命周期的,咱们须要让API的生命周期更长,而且在API的生命周期结束时能让其平滑的消亡。
开发API的过程其实就是一个沟通交流的过程。沟通的双方就是API用户和API设计者。
在一个API不可避免要消亡或者改变的时候,咱们应该接受而且面对这个事实,下面列举了几种保证兼容性的前提下,对API进行调整的办法:
引用地址:http://www.biaodianfu.com/how-to-design-a-good-api.html