设计是一个很普遍的概念,一般是可以理解为为即将做的某件事先形成一个计划或框架。 (牛津英语词典)中,设计是一种将艺术,体系,硬件或者更多的东西编织到一块的主线。软件设计,特别是作为软件设计的次类的API设计,也是一样的。但是API设计常常很少关注软件发展,因为为其他程序员写代码的重要性要次于应用UI设计和最终用户体验。
但是API设计,作为我们自己写的库中提供的公共接口,能够向调用我们代码的开发者表现出我们库的一些特点和功能,所以API设计和UI设计一样重要。事实上,两者都是为应用可以提供更好的用户体验具有基本的方式。应用UI在用户UX中占有很重要的位置,应用API是开发者的UX。因此,应用API设计应该被给予和我们提供给用户的接口相同水平的考虑和关注。正像我们关注UI的功效,简洁性和优美,我们也应该同样的评估API的功效,简洁性和代码的优美性!
API设计——javascript API设计的内容,呈现了唯一的挑战对所有的开发者,不管是否你正在开发一个公共的库或者一个内部的库。javascript的动态性,库使用者的匿名和需求的模棱两可都给API设计者呈现了一个令人畏惧的挑战。然而对于一个好的API设计是没有捷径的,但是可以从现代流行的一些javascript库中提取出一些设计准则是可能的!
API设计: 天使和恶魔的斗争
javascript API中差的设计会给使用你API的开发者和你带来高的花费。差的设计会导致浪费,使用你API的开发者会因为设法搞弄明白你接口而浪费时间,而API的开发者会因为处理不断增加的需求和解决使用者的困惑而浪费时间。然而几乎所有的API当初被开发的时候,都是为了能够提取相同的功能,方便调用并节约时间。但设计不好的API会使你的库使用者和你产生疑惑,这些库真的能节约时间吗?
优秀的API设计,一方面,完成了提取的目标,同时也实现了自我描述。当一个API被良好的设计,使用者可以快速地和直观地完成工作,完全不用不停的使用文档或者持续的访问支持或者解答网站。你也可以通过封装一些开发者需要自己花大量时间开发的一些特征来节约库开发者的时间。好的设计不仅节约开发者的时间,可以使他们看起来更加聪明和有责任。同样帮助你的用户看起来聪明和能干也会使你看起来更加的牛逼!
对于javascript来说,API设计特别重要
不管什么编程语言或者框架,API设计是重要的,API设计的重要性对于javascript来说是高于其它许多语言的。首先,作为一个动态的和后期绑定的语言,javascript没有编译器可以实现一个安全网或者检测单元功能,所以javascript不可以发现你代码中的错误。Linting 或检验框架 如 JSLint 和JSHint 可以帮助我们。这些框架的功能可以指出javascript中的一些普遍的错误,但是当我们使用API时,他们却不能发现javascript的错误。
这一切都取决于你,你可以开发一个具有良好设计的API,这个API可以帮助你的用户掉进众所周知的“成功坑”,这就意味着你的库对于开发者来说是舒服的和熟悉的,同时也提供了积极的强化和当开发者和你的代码交互时建立的信心。
“掉进成功的坑里”最好的例子是jQuery 通过CSS选择器语法获取DOM元素的运用。例如,如果我想要获取所有带有类名的article元素,我可以运用jQuery这样做:
$("article.blogPost").fadeIn();
选择器article.blogPost和下面展现使用完全一样的语法,这绝不是偶然的!
article.blogPost { border-radius: 10px; background-color: salmon; box-shadow: 0px 0px 10px 2px #ccc; }
jQuery的选择器引擎被设计为了使我和其他开发者能够使我对CSS选择器的理解和它的引擎进行交互。结果可想而知,如果jQuery需要我用一种新的,为特定目的形成的语法,我将失去快速,明显和高效。
我们可以获得灵感从这些框架中,如jQuery,或者其他框架,并应用这些灵感到我们的设计中。然而,获得灵感并不是抄袭,有个度的问题,任何设计过API的人如果是仅仅的基于别人的想法,不管好与坏,他都将继承。如果我们将在好的javascript中获得的准则运用到其他领域中,我们能开发拥有好的API的框架,这些API设计能被运用在任何情况下。
出色的Javascript APIs设计秘诀
虽然软件不具有与绘画或建筑类似的视觉评价标准,我们仍倾向于使用与物理实体一样的形容词来描述软件质量。例如,使用“优雅的”与“漂亮的”来赞美软件并不罕见。如果用与物理实体相似的形容词描述软件接口是合理的话,那么当然也可以使用与之相同的原则来评价软件设计。
在本节,将四个来自艺术领域的流行设计原则扩展至API设计中:
和谐一致
平衡
对称
重点突出
对每一个原则,将列出一到多个实例来说明,这些例子表明流行的Javascript库API设计是怎样遵循这些原则的。
原则1:一致性&协调性