从草图绘制到实施交付:优秀API设计完整流程
设计好的API是一项繁复的工作,但是优秀的设计是可以通过人为规划实现的,在本文中,我们将研究什么是好的设计以及如何在开发过程中实现它,还将介绍API设计的三个重要阶段:草图绘制,原型设计和交付实施,最后分享一些让工作更高效的工具。
优秀的API设计在迭代中发生
在开始设计API之前,先要了解其目的。从之前到你现在为什么需要构建API 。了解目的能让你更好的遵循开发方向,不至于走偏。不过,定义目的只是第一步,真正的诀窍是在实施过程中做出良好的设计决策。
作为API设计人员,我们做出的每项决策都会对产品的成功产生影响。大的决策例如API传输协议,信息格式等。除此之外还有一些与插件,名称,接口顺序等的小决策。当你把它们放在一起时,所有这些决定都会构成一种使用模式。如果你都做出了最适合的决定,那么这种模式将帮助你设计你所需要的API。
要想做出正确的设计决策,你需要先从错误的设计学习。事实上,在你摸索到正确之前,你可能需要犯很多次错误。这就是迭代的关键,没有人第一次就做对了,但是如果有足够的机会,你可以更接近预想。
照理说应该迭代我们的API设计,但在现实世界中很难做到这一点。因为在API发布后难以更改API,更改正在使用的API既昂贵又有风险。解决此问题的一种方法是每次更改时避免大幅更改界面。这是一个很好的习惯,并且是良好的API设计的基本规则。但是,有时突破性变更是不可避免的。理想情况下,在更改变得有代价之前,应该解决所有可用性和设计问题。

迭代设计过程
每次迭代都让我们可以根据其用途来设计我们的项目内容。例如,开发人员是否能够使用我们构建的内容完成目标?这个界面真的可以实现吗?等等。我们应该能够通过设计和实现许多接口而不真正发布它们来实现最佳的API设计。所以查看和模拟测试每个界面将提供如何改进产品的实用经验。
但是在实践中,这种宏观迭代设计是不可能实现的。我们没有时间反复地设计和验证一个API。更合理的方法是在设计过程中尽早执行迭代。这些早期的设计应该有足够的细节来产生改进机会,随着时间的推移,我们可以逐步提高细节(或保真度)的水平,直到最终达到我们想要的API设计。
这个渐进的过程在设计界很受欢迎,通常分为三个重要阶段:
- 草图绘制
- 原型设计
- 交付实施
1.草图的力量
草图是一种最普遍的设计行为。建筑师弗兰克盖里的草图非常有名,他的许多建筑项目都是以纸张上绘制的一系列草图开始的。他绘制了数百幅草图,每次都能接近理想的设计。
交互设计师Bill Verplank将草图描述为设计过程中必不可少的第一步。比尔·巴克斯顿(Bill Buxton)撰写了一本关于草图用户体验设计价值的完整书籍,提出了草图的关键特征以及重要性等。
在API设计过程的早期阶段结合草图使我们脑海中形成界面的概念模型。好的草图应该易于制作并且随时修正,如果花费太多时间来画图会得不偿失。
我们可以尝试不同类型的界面风格,并捕捉我们脑海中浮现的抽象概念。每一次的瞬间想法我们可以用草图的形式记录,方便我们审查和讨论它们。我们可以决定是否喜欢草图某个特定概念,然后在此基础上补充或者重新开始。
例如,我们可能会绘制一个与整个API相关的基本错误流或可应用于所有响应的响应消息格式。之后,在原型设计阶段,我们可以将这些想法应用到工作模型中。
2.原型设计
原型设计阶段是一个构建界面的更高保真度模型的过程,并测试我们在草图绘制过程中做出的一些假设。调用一个好的API原型,它应该处理实际请求消息并在需要时提供返回结果,甚至能够使用原型API创建一个简单的应用程序。
但是,构建原型应该比完全实现成本更低。降低成本的一种方法是模拟返回消息,而不是从后端系统提供实际结果。这就是MOCK,是快速构建原型的好方法。
我们应该能够基于草图构建两个或三个不同的原型,在我们构建的过程中,我们甚至可以回到草图阶段,根据我们从原型设计阶段学到的知识来尝试新的方向。
原型还可以为您的团队提供了用户对设计的早期反馈并允许观察实际使用情况的机会。如果界面具有很高的保真度,您可以要求潜在用户在此基础上构建应用程序并观察他们过程中面临的问题。
精心设计的API不仅应该易于使用,而且还要具有可持续性,可靠性,高性能和长寿命。设计周期就像一个科学过程,原型阶段是你在做出改变之前测试任何假设的机会。
3.实施交付
开发者的工作是将原型界面变成可交付使用的。最终的原型和支持草图形成了界面应该是什么样的描述。它们反映了集体设计决策,以形成需要构建的规范。实际上,使用正式的接口描述语言从原型转换到实现阶段是很有用的。
例如,当您对原型API感到满意时,您可以选择在一些API管理工具如EOLNKER等中对其进行描述。
虽然实施交付是最后目标,但设计不应该停留在这个阶段。这是一个利用实际使用数据进一步测试您在整个设计过程中所做假设的机会。正如原型API允许我们观察使用情况一样,实现的API允许我们在真实情况下分析使用情况。
例如,您可能希望验证您所做的设计假设。应用程序开发人员是否真的使用您为他们创建的便利操作?您是否获得了预期的用户类型?新用户是否遇到界面特定部分的问题?
此分析可能会导致您再次启动草图绘制过程,以支持进一步改进的界面。

使用工具自动化流程
工具和技术可以从根本上改善设计过程。降低草图和原型创建成本的工具将使设计团队能够在更短的时间内生成更多设计,从而改进设计决策。
结合工具自动化是大多数设计过程的重要组成部分。在建筑设计领域,SHoP(总部设在纽约的建筑师联盟)通过创新,协作和基于工具的设计取得了成功。他们的工艺包括原型设计工具,使设计人员能够将所用材料的物理特性结合在一起。这种方法允许他们创建数千个设计迭代,每个迭代都包含可以轻松评估的实现细节。
API设计领域中也有这种能优化的工具。实际上,全球范围内API服务领域中已经存在一些优秀的Web API设计工具。
现在,如EOLINKER、RAML、Swagger,都提供了出色的编辑工具来支持他们的语言。其中EOLINKER作为国内领先的API接口管理研发工具,正在以更全面的功能和简洁的页面超过如RAML、Swagger等国外传统单一服务产品。这些编辑器缩短了API的设计的创建时间,使得更容易在更短的时间内创建更多描述。有兴趣的点击查看EOLINKER的API编辑器。

成功完成迭代过程
遵循本文中描述的迭代设计风格,你将为你的团队创建有效的API。在流程开始时创建和评估许多低保真设计,以促进实验和构思。构建更高保真的原型和模拟实现来评估早期的设计理念。最后,为真实用户实施设计并收集数据以分析实际使用情况。
良好的API设计过程为您提供了生成最佳界面的机会。构建优秀API的秘诀不是专家指导或内部知识,相反,它是通过优秀的工具,语言和配置文件优化的迭代而成的,这会帮你完成越来越多优秀的API。
参考资料:Ronnie Mitra,From Doodles to Delivery: An API Design Process
原文地址:https://www.infoq.com/articles/doodles-to-delivery/?useSponsorshipSuggestions=true
从草图绘制到实施交付:优秀API设计完整流程的更多相关文章
- 优秀API设计的十大原则
优秀API设计的十大原则 2015-09-23 分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难 ...
- atitit.api设计 方法 指南 手册 v2 q929.docx
atitit.api设计 方法 指南 手册 v2 q929.docx atitit.api设计原则与方法 1. 归一化(锤子钉子理论)1 1.1. 链式方法2 1.2. 规则5:建立返回值类型2 1. ...
- 一篇文章帮你梳理清楚API设计时需要考虑的几个关键点
本文作者是Enchant的架构师,他最近研究了Netflix.SoundCloud.谷歌.亚马逊.Spotify等公司的微服务实践,并根据自己的理解总结出了一套适用于现代Web和云技术的微服务实战经验 ...
- [转] 阿里研究员谷朴:API 设计最佳实践的思考
API是软件系统的核心,而软件系统的复杂度Complexity是大规模软件系统能否成功最重要的因素.但复杂度Complexity并非某一个单独的问题能完全败坏的,而是在系统设计尤其是API设计层面很多 ...
- Web API设计方法论
英文原文:A Web API Design Methodology 为Web设计.实现和维护API不仅仅是一项挑战:对很多公司来说,这是一项势在必行的任务.本系列将带领读者走过一段旅程,从为API确定 ...
- 从商业角度探讨API设计
为Web设计.实现和维护API不仅仅是一项挑战:对很多公司来说,这是一项势在必行的任务.本系列将带领读者走过一段旅程,从为API确定业务用例到设计方法论,解决实现难题,并从长远的角度看待在Web上维护 ...
- Web API设计方法论--比较完整的web api 开发过程
为Web设计.实现和维护API不仅仅是一项挑战:对很多公司来说,这是一项势在必行的任务.本系列将带领读者走过一段旅程,从为API确定业务用例到设计方法论,解决实现难题,并从长远的角度看待在Web上维护 ...
- API 设计 POSIX File API
小结: 1. https://mp.weixin.qq.com/s/qWrSyzJ54YEw8sLCxAEKlA API 设计最佳实践的思考 谷朴 阿里技术 昨天 阿里妹导读:API 是模块或者子 ...
- 我所理解的RESTful Web API [设计篇]
<我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...
随机推荐
- C#实现任意源组播与特定源组播
IP组播通信需要一个特殊的组播地址,IP组播地址是一组D类IP地址,范围从224.0.0.0 到 239.255.255.255.其中还有很多地址是为特殊的目的保留的.224.0.0.0到224.0. ...
- Qt优雅地结束线程(两种方法都是用Mutex锁住bool变量进行修改,然后由bool变量控制耗时动作的退出,即正常退出)
如果一个线程运行完成,就会结束.可很多情况并非这么简单,由于某种特殊原因,当线程还未执行完时,我们就想中止它.不恰当的中止往往会引起一些未知错误.比如:当关闭主界面的时候,很有可能次线程正在运行,这时 ...
- QThread多线程编程经典案例分析(三种方法,解释了为什么使用moveToThread的根本原因,即为了避免调用QThread::exec() )
传统的图形界面应用程序都只有一个线程执行,并且一次执行一个操作.如果用户调用一个比较耗时的操作,就会冻结界面响应. 一个解决方法是按照事件处理的思路: 调用 Void QApplication::pr ...
- MJPhotoBrowser 用法
一.使用方法: #import "MJPhotoBrowser.h" #import "MJPhoto.h" - (void)tapPhoto:(UIT ...
- DirectUI的消息流转
Windows是一个基于消息循环的系统,DirectUI同样遵循这样的消息流转.当界面呈现.用户点击.定时器等各种各样的消息一旦进入windows消息循环队列,系统自动调用该窗口的WndProc过程. ...
- 转载几篇文章URL
读了百伯在线Jobbole的几篇文章,转给需要的朋友.如下: 产品小设计大体验:http://blog.jobbole.com/39593/ 苹果是一家有工程师的设计公司:Google是一家有设计师的 ...
- Varnish动静分离配置示例
动静分离 [root@varnish ~]# vim /etc/varnish/default.vclvcl 4.0;backend web { .host = "192.168.30.15 ...
- Scala 学习之路(六)—— 常用集合类型之 List & Set
一.List字面量 List是Scala中非常重要的一个数据结构,其与Array(数组)非常类似,但是List是不可变的,和Java中的List一样,其底层实现是链表. scala> val l ...
- zabbix2.4汉化
zabbix的2.4版本安装完后,这里的语言界面选择没有中文,其实是这个版本把中文的屏蔽了. [root@zabbix-server opt]# vim /var/www/html/include/l ...
- Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
一.JDK1.8 环境搭建 1.上传文件解压 [root@localhost mysoft]# tar -zxvf jdk-8u161-linux-x64.tar.gz [root@localhost ...