本篇摘自:InfoQ的微信公众号

在设计API的时候考虑的问题包括:API所使用的传输协议、支持的消息格式、接口的控制、名称、关联、次序,等等。我们很难始终作出正确的决策,很可能是在多次犯错之后,并从中吸取经验,才能够接近正确的决策。而通过迭代的方式,只要有足够的机会,就能在API设计方面接近完美。

一个公开的API就像砖石,它是永恒不变的。(引自Joshua Block)

要知道,API的变更代价很大,并且伴随着很大的风险。但同时,破坏性的变更通常不可避免。

我们要做的是:在接口发布之前尽早迭代修复问题。也就是说,我们先设计与实现接口而不发布他们,等进行足够的审查与测试再发布。

具体来说,可以按照"草图设计→原型设计→实现"的方式去做。

草图设计

草图无需反映出整个接口,无需过于深入。API草图设计过程有一种好方法,就是定义接口中最明显的单词列表。有哪些单词是用户必须知道的?哪些单词能够最好地表达目标受众的目的与任务?通过回答这些问题,创建一份接口的词汇表。

原型设计

这个阶段对草图阶段的一些假设进行验证。一个好的原型大致是:

● 可以被调用
● 能够处理真实的请求信息
● 在必要的时候提供响应
● 开发者能够通过原型API创建出一个简单的应用

如何保证创建原型的成本低于一个完整的实现呢?

--模拟响应的消息,不是由后台系统输出响应信息,而是模拟响应信息,这种方式也称为接口的虚构(mocking)。

建立原型的目的是什么?

--为投入找到一个合适的范围,能够至此后续的迭代。

通过原型,有机会获得用户反馈,更接近最终的实现。

实现

实现是将一个原型接口转变成实际可以使用的接口。

API设计的自动化工具

● 适用于原型设计的工具:Swagger,RAML,Blueprint,WADL。
● 适用于草图设计的工具:Rapido!

ASP.NET Web API实践系列11,如何设计出优秀的API的更多相关文章

  1. ASP.NET Web API实践系列04,通过Route等特性设置路由

    ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程.在"ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置"一 ...

  2. ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定

    本篇接着上一篇"ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API",尝试获取数据. 在Models文件夹下创 ...

  3. ASP.NET Web API实践系列05,消息处理管道

    ASP.NET Web API的消息处理管道可以理解为请求到达Controller之前.Controller返回响应之后的处理机制.之所以需要了解消息处理管道,是因为我们可以借助它来实现对请求和响应的 ...

  4. 如何设计出优秀的Restful API?

    https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247485240&idx=1&sn=b5b9c8c41659d2 ...

  5. 如何设计一个优秀的API(转载)

    最近在整理框架的一些 API,觉得很有必要总结一下 API 兼容性的设计.下图是我自己当下的一些总结,慢慢维护: 网上搜索了一下,一个多月前,“标点符”已经发布了下面这篇文章,觉得写得非常不错,转载于 ...

  6. 如何设计一个优秀的API(转)

    到目前为止,已经负责API接近两年了,这两年中发现现有的API存在的问题越来越多,但很多API一旦发布后就不再能修改了,即时升级和维护是必须的.一旦API发生变化,就可能对相关的调用者带来巨大的代价, ...

  7. 如何设计一个优秀的API

    如何设计一个优秀的API - 文章 - 伯乐在线 http://blog.jobbole.com/42317/ 如何设计一个优秀的API - 标点符 https://www.biaodianfu.co ...

  8. ASP.NET Web API实践系列02,在MVC4下的一个实例, 包含EF Code First,依赖注入, Bootstrap等

    本篇体验在MVC4下,实现一个对Book信息的管理,包括增删查等,用到了EF Code First, 使用Unity进行依赖注入,前端使用Bootstrap美化.先上最终效果: →创建一个MVC4项目 ...

  9. ASP.NET Web API实践系列09,在Fiddler和控制台中模拟GET和POST请求

    ASP.NET Web API本质是由一个进程托管的一组类,需要宿主,这个宿主可以是ASP.NET应用程序,可以是MVC项目,可以是控制台应用程序,也可以是自己定制的宿主. 在VS2012中创建一个& ...

随机推荐

  1. 升级openssh到最新版本

    首先,下载最新版本,传到服务器:http://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/ 安装 cd /root/ mkdir ssh_upg ...

  2. Linux内存管理 【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-4491368.html Linux内存管理 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理 ...

  3. 数组slice方法

    slice slice(start,end):方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素.(不会改变原数组) start参数:必须,规定从何处 ...

  4. 08 Go 1.8 Release Notes

    Go 1.8 Release Notes Introduction to Go 1.8 Changes to the language Ports Known Issues Tools Assembl ...

  5. PowerMockRunner和ActiveObjectsJUnitRunner

    Jira的二次开发,需要作单元测试. 测试跟数据库连接的类,比如service类,需要在类上加@RunWith(ActiveObjectsJUnitRunner.class). 有时需要搭配mocki ...

  6. Ibatis.Net <![CDATA[ ]]>标记学习(九)

    当Sql语句中包含特殊字符时,例如: <select id="SelectOnePerson" resultMap="PersonModel"> s ...

  7. 【linux】crontab无效解决办法

    参考来源:http://www.tennfy.com/3088.html 问题: 我在crontab中添加了一条定时任务 * * * sh test.sh 出乎意料的是,该定时任务并没有执行.可是我直 ...

  8. .NetCore 中扩展ExceptionLess 实现链式方法添加操作日志

    在使用ExceptionLess添加日志的时候,发现还是有一些写法上的个人觉得不爽的地方,比如添加Info日志 ExceptionlessClient.Default.CreateLog(source ...

  9. stm32+ESP8266AT指令详细说明

    最近公司团队的项目用到ESP8266,使用的是stm32c8t6芯片,软件使用MDK,于是写下调试过程中的一些注意点.具体代码和涉及思路不能外泄,这里只给出我们调试过程中的注意的方面. 关于ESP82 ...

  10. Air Raid HDU 1151

    题意  给定n个路口 加上一些单向路  求遍历完所有路口需要多少人  人是空降的 哪里都可以作为起点 求 最小边覆盖   (用最少的边覆盖所有的点) 也叫最小路径覆盖(更形象) 也叫二分图的最大独立集 ...