说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

别再设计易碎的Web API!

HTML文档下载 WORD文档下载 PDF文档下载
不要再设计易碎的Web API了,否则你的合作伙伴或第三方开发者会因此恨你,而离你远去的。想设计出相对稳定牢固的API,关键在于以应用目的为中心来做设计。

原文作者Mathieu Fenniak在博文中大呼:不要再设计易碎的Web API 了,否则你的合作伙伴或第三方开发者会因此恨你,而离你远去的。他认为,想设计出相对稳定、牢固的API,关键在于以应用目的为中心。文中还分享了设计优秀API需要注意的几点事项,我们一起来看下:

如果破坏了API,客户会因此而恨你

很多Web API发布后,它就像被牢牢刻在石头上无法做出兼容改变,这是个可怕的现象。倘若你破坏了API,你的客户会因此而恨你,紧接着就是你的老板。因此,你必须对该API进行更新、维护。

如果API设计的很好,那么它不会这么脆弱

减少其脆弱性或增加其韧性是管理API设计的方式之一,其关键在于以应用目的为中心做设计。也就是SOA领域,所谓的面向业务(business-orientation)。也许这个概念很难理解,下面的这个示例能很好的说明这一点:

URL之间的区别是什么呢?

http://api.fbi.gov/wanted?  order_by=notoriety,desc&  limit=10&  page=1&  fields=name,aka,known_associates,  reward,description,last_seen

这是一份来自美国联邦调查局的列表。该API包含了许多功能:你可以预定任何领域,按照升序或者降序进行排列;可以指定结果计数 ;可按页查询并且还根据指定详细信息进行检索。

对比看下这个URL:

http://api.fbi.gov/wanted/most

两个URL虽然有着相同的目标,但是执行方式不一样。第一个是名程序员设计的,他能提供任何你想要的功能。设计中没有描述用户的意图,但却利用请求定义详细信息来替代。

第二个URL意图则非常明显,显示联邦调查局头号通缉犯名单,模糊的细节,这是根据意图来进行设计的。

根据”意图“设计API,减少其脆弱性,有哪些优势呢?

  1. 易使用——没有复杂的程序、复杂的细节,易于学习;
  2. 灵活性——意向驱动API可随着服务器端的变化而变化;
  3. 一致性——一致性是API设计必备的一大特性;
  4. 松耦合——这是向后兼容性问题。你只需返回一个固定的值,后端兼容在意向驱动API中会运行的很好;
  5. 可优化——当对数据库进行更新时,可计算优化而不是在内置的需求上,这比优化每个组合的程序设计要困难得多;
  6. 可缓存——易缓存。程序员的设计使得缓存困难(正常可查询参数)和无效(比如限制=5 / 10 / 15缓存未被命中);
  7. 易开发—— 由于高复杂性使得开发和测试测试程序员的API变得更加困难和耗时。
  8. 高效验证模型缓存 — — 快速检查If-None-Match/If-Modified-Since HTTP标头并作出"304 Not Modified"响应。

但是,我需要一个更加通用的API设计……

为什么需要通用的API设计?这是因为意向会让你设计出更好的API。比如,API的灵活性。灵活的API非常有助于于开发用户界面,允许按字段排序、可自定义分页、排序和筛选或搜索。

此外,铭记UI意图,还可以提供一个易于使用、开发、灵活、一致、松耦合、可优化、可缓存和高效的API的设计决策。

DRY原则(Don’t repeat yourself)

在执行过程中不要使用重复原则,但在API设计中无须担心重复设计。如果你提供了多个API端点可根据不同意向来检索相似的对象,从常见的代码路径开始吧。 为用户提供更多具体的服务,你需要不断对API进行维护。

这个真的适用于现实的API领域吗?

这是GitHub提交的一份Status API示例,通过持续集成服务来标记存储库版本。
  1. 定义特定的功能:指定一个国家修订的版本库
  2. GitHub会自动将请求相关联的,显示在一起
  3. 无HTML 或可自定义的国家;API 有极少数量的数据需求。
  4. 面向未来:它以简约的方式满足定义的问题。
  5. 状态相关修订;提交添加更多的请求工作。
  6. GitHub 具有灵活性,可以进行更改,而不会破坏兼容性:1. 对于API,GitHub暂不支持重写功能整个请求功能;2.可适用于其他UI领域;3. 如果 GitHub变成MercurialHub、SubversionHub、PerforceHub、 CvsHub、RcsHub,API可同样被应用。
  7. GitHub灵活显示提交状态: 可在移动应用中显示状态、本地化的文本易合并。

还有个真实的例子 Twilio’s AvailablePhoneNumbers API,目的是为了搜索电话号码分配到您的账户中,这个看起来就像典型的API集合,但是细节和意图关联并不大。

总结:

综上所述,不再设计脆弱的Web API,我们得出几点:1.根据自己的意向设计API;2. 在细节上是模糊的;3.提供多个API以区分用户意向;4. 通过分享常见的实现方式而不是提供一个通用的服务来减少代码重复。

CSDN各位网友,对此,您怎么看呢?

英文出自:Mathieu.Fenniak

调查显示:2015年Android将统治全球操作系统 初创公司最爱使用的那些开发工具 仙剑之父姚壮宪强势加盟Unity游戏及应用大赛 智能可视化平台:DCOS之数据中心抽象 一周热点:5美分/GB的开源存储系统,及硬盘质量“最差”的希捷 英特尔收购可穿戴技术公司BASIS Science 设计移动App的十大技巧 皮皮网陈超:易用与性能兼备,Spark蓬勃发展! Sahara顺利毕业,将加速OpenStack与Hadoop的融合 十大将拯救地球的开源硬件项目 Android应用程序开发者需要了解的五个内容 百度轻应用插件CloudaMySQL诞生记 盘点Github所用的开源项目 开源不只是面对开发者 见证新一代全能大数据计算平台崛起 ——中国Spark技术峰会将于4月19日在北京召开 大佬放猛料的节奏 阿里云聚无线为开发者提供一站式服务 智能硬件又添新选手 汉王推出便携PM2.5检测仪 2014年首场百度轻应用高级训练营落幕 现场展示云端结合能力 销售易史彦泽:企业应用,自上而下的革命 专访寻医问药网创始人:轻应用背后的长尾效应 轻松打造品牌轻应用:实时Web App开发框架Clouda Intel强势入驻,Cloudera新一轮融资总额已达9亿美元 每个Web开发者必备的9个软技能 4月1日:闻名世界的苹果公司正式成立 AMD正在探索一种新颖的Linux开源驱动模式 QQ手机浏览器推出5.1播霸版 内置强解码引擎支持22种视频格式 Ceph浅析(上):概况与设计思想 IBM:你好,互联网 光网络SDN化的四大驱动力及两条路径 《近匠》酷传:解除App发布和监控痛苦 有道heX正式开源:用HTML5和NodeJS开发桌面应用 幫我看看這是什麼病毒:win32.HLLM.Reteras 急急????在繞等待!!!!!! pb含原代码的例子何处寻觅 如何读取word表格中的数据? 怎样让一个tc程序在一台没有安装tc的电脑上运行? 请问在Vb.NET中引用型变量本身在内存中的值怎么查看呢? 关于在网络版程序中单据号连续的问题? 有关上网的缓存文件(捧分跪等) 我这样实现查询可不可以,为什么没有结果请帮我看好吗 怎么VFP2.5 for windows里的界面(对话框的标题栏里)都没有关闭按钮啊 如何在用户长时间等待的过程中显示一个临时页 ERROR:ORA-12560: TNS: 协议适配器错误 如何在SQL语句里精确小数点以后的位数不清 想得到一段程序的运行时间,C#中提供的time精确度太低,有没有精度比较高的算法? 在客户端已知某个文件的存放路径而不通过HTML的FILE控件再进行浏览选择,怎样把这个文件上传到服务器上 在VBA中变量的值改变后如何保存住值啊? 请问ListView怎么实现(点击标题栏字段名时)排序?谢谢 为什么生命还是这么短 关于电子论坛的设计!!!(回答有意义的高分美人相送,灌水的大炮伺候) jdk1.4大量认证资料奉送 请教对话框的创建 几个小问题,请大家多多帮忙!在线等待 请大家仔细看看,不知道我有没有写清楚,不知道算不算难还算容易....... win2000 sever怎样安装borland c++builder?(高分100) 请大家帮个忙,举手之劳而已 使用MSComm,在关闭窗口的时候,出现“端口已打开”的错误。怎么解决? 请问这几段C#语句怎么办? applet问题,期待高手出现 如何使用OpenDialog啊? 高分组网,斑竹不要删~~~~~~~~~~~~~~~ win2000 sever怎样安装borland c++builder?(高分100) 如何按分组条件,给一个字段乘以不同的值 求电子书!!! win2000问题,很急.在线等 求教,用delphi编的drm程序,急!~~~~~~~~ 请教对话框的创建 倒粪1 win2k中tts问题 XML+XSL+HTML运行出错(书上的例子) 倒粪2 高手帮我看一下这个奇怪的问题 倒粪3 ServerSocket的疑问 倒粪4 电脑配件 请问如何在JBuilder中调用我自己编写的JavaBean? 文件1可以Imports文件2的Namespace么? 我需要一个汉字的字库和词库,请问在什么地方能够得到?或者怎么可以从一个输入法程序中导出词库或词库?多谢。 调查:有多少人用的支持Java的手机? 关于注册表重命名操作? redhat的lilo问题 急!!!!!!计算机启动后,能检测到新的硬件并安装驱动,之后出现错误按任一键继续按三键重启任一键后,屏幕上一无所有,出现蓝屏,多次启动依然 如果没有元灭两宋中国人口会是13亿吗?如果不是会是 15亿?20亿?25亿?更多?这问题比较反动? 为什么元灭宋打的时间最长?蒙古不是很轻松的打到欧洲为什么对付一个弱宋要用的时间最长(先不说忽必烈为争夺汗位匆匆北返) 城管为什么不管成都郫县团结镇靖源下街,83和85号的铺面违法安装门面团结城管都没有人管.具听说买手机的87和89号的也要学83和85的那样装,隔壁床上用品的也要装还有红旗连锁那条街的都要 为什么城管不管新疆人做生意? 我国面积最大,人口最多的直辖市是 中国哪个城市面积最大?哪个城市人口最多?哪个城市城区面积最大?(包括直辖市) 基督教中有多少个魔鬼?电影《最后一次驱魔》中魔鬼的名字叫阿巴伦,这是电影编出来的,还是基督教中本来就有的?基督教里除撒旦还有多少种魔鬼? 我国面积最大、人口最多的直辖市 这样的女孩你们会怎么形容?如果一个女孩有对象的前提下别的男生在她宿舍楼下发信息说“想看你一眼她”就穿着拖鞋下去了,和别的男人聊微信比跟自己对象聊天还能聊并且用么么哒这样 形容一下这个女孩 作为直辖市,至少要需要多少万人口? 北京最牛违建拆除停近1月 同楼居民纷李某某再换律师二审推迟 新律师称重新中国全票连任联合国经社理事会成员德国法兰克福股市DAX指数30日下跌伦敦股市股指30日上涨突尼斯旅游城市发生自杀式爆炸袭击电视购物广告不允许\"叫卖式\"宣传中国成功连任联合国经社理事会成员法国巴黎CAC40股指下跌成品油调价窗口今日开启 机构预测每升国内成品油价今迎调价窗口 “两连跌”去日本东京,十大必吃美味蛋糕了解翡翠A货、B货、C货,才有机会捡花上10万元能买上一款土豪车是再合适图文:险相撞 俄军舰开火警告土渔船百余亩良田变垃圾场荒了民心交行湖北省分行 布局供应链金融西安将建首个 自然沙滩日光浴场微评论宁西铁路二线陕西段全线贯通“令”夜狂欢,“星”动而来,打令之星中关村首次发布大数据产业发展路线图
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘