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

别再设计易碎的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

VB中list控件的功能扩充 VB中用Multimedia MCI控件开发多媒体应用 Win Api在VB中的妙用 WINDOWS SCRIPT HOST对象在VB中的使用 安装向导生成程序组并建立多个程序项 -VB资料 保存复选框选项-VB资料 不用OCX来创建自己的控件(一)-VB资料 成组更新控件属性-VB资料 VB创建数据驱动窗体 得到鼠标位置 -VB资料 动态加入控件到VB控件数组中 对ListView中的列排序-VB资料 放一个Combo到Toolbar中 -VB资料 改进VB的驱动器列表框 给TreeView控件添加弹式菜单 -VB资料 计算从开机到现在用了多少秒-VB资料 将立体的ListView标题栏转换成平面式的标题栏 -VB资料 禁用窗体上所有控件 -VB资料 拷贝或移动列表框或组合框中的内容-VB资料 利用VB5开发ActiveX控件 利用VB三维面板控件设计流动条 浅谈用VB6.0编写BO程序 巧用Visual Basic的TIMER控件 VB取得控件绝对Top值 VB如何解决VB中的Grid 控件的打印问题 VB如果自定义 MsgBox 的按钮,标题等 VB如何创建数据绑定控件。 VB如何解决VB中的Grid控件的打印问题 VB如何强制文件对话框再次读取正确的磁盘? VB如何取得RichTextBox控件中光标所在行的值? VB如何设定 MsgBox 在若干时间之后若无回应則自动关闭? 如何再98中删除IE的历史纪录,很怪~~~~~~~~~~~! 讨论:从IDL开始所有的编程工作 大虾们如何动态创建Table的field Editor功能 高分求解!与Delphi的参数问题! xml spy suite4.2需要联机注册,有没有方法可以使用? linux为何没有出现在启动菜单 @_@ 在DELPHI中如何把一目录下的某文件移到另一目录中——急 在C#中如何用BinaryReader把DLL文件的内容读出来,并转来string? 如何根据Task ID或Process ID得到hwnd 如何让程序启动时自动hide()阿! 问一个最大化窗体与任务栏的关系的问题 把一表中一字段(字符型)以一條記錄返回出來. Rational Rose 中没有Delphi方面得模块,哪儿有与Delphi接口下载 谁有ActiveReport 2的中文例子和原程?在线等待!急急急! 大家来讨论一下,《设计模式》应该怎么看!! 关于打印的问题,高手关注! datagrid如何实现分页,。net菜鸟 声音问题 access数据库加密后,如何再用ADO与之连接? 有谁用过ms Agent? 很菜的问题! delphi里的widestring类型对应着BCB里的什么类型啊 开了一个socket,acept后如何给ie发一个字符串显示出来? access数据库加密后,如何再用ADO与之连接? 如何查询出所有用户表名 PWS中的一个小问题 请问DataSet里的Relations和Constraints有什么区别? 想了三天,还是做不出 请问如何创建一个大于屏幕分辨率的窗口? 公开putao的最大秘密,他女友的隐私! 关于不同版本的用户对象的问题!(online) 在批处理中设置路径,有空格系统不认怎么办? 为了忘却的纪念(今天是咱们的国耻日) 关于JSP菜单实现的问题? 如何判断数组是否被赋值? 用MSCHART的二维折线图如何实现左右坐标分别标识不同的曲线? 请问招行的网上银行的在网上点击安装是怎么实现的呀? 100分只是开始。。。 如果回答继续加!! 一个template问题,想不出办法,高手请进 送分题:如何改变dll的调试可执行文件? 大家看看代码 真搞不懂为什么出错??? 如何在表单中设置包含字段http://schemas.microsoft.com/cdo/workflow/response 如何使用VBSCRIPT读取本页文本框中的数据, (不能用表单提交和JAVASCRIPT 能不能?) 我在桌面上执行一个应用程序,运行正常,但用pb中调用run("***.exe")运行是出错,提示是少了某些dll文件 我怎么才能使客户端发过来的经UF8编码的中文URL,还原成GD312,能找到页面? 我用openwithparm(w_1,arg),arg明明传递的是LONG型的数据,为什么用message.longparm接收到的是0,而一定要用message.doubleparm才能正确 问一个sql语句如何写,简单! 征集能够同时输出文本和图形的控件! 急寻bmp转gif的代码 封装在Dll中的窗口焦点问题 为什么我用JBUILDER编译JSP文件,用web run执行后会出现这些情况?? 如图,在平行四边形ABCD中,点M为CD的中点AM与BD相交于点N,那么三角形面积DMN比平行四边形面积ABCD= 物理学怎样判断水果电池的正负极 xx的感觉真好——作文. 关于孔子的作文 水果电池怎么回事? 作文:xx感觉真好额……新颖点,新颖点···~叙事的文章叙事文 关于孔子的作文! 急求 初中物理小制作,水果电池 校园一角的作文开头要怎么写?我主要写的是树 四年级上册语文园地六作文胜似亲人 描写开心的一件事的作文开头 70字 作文《校园一角》怎么写 人教版小学四年级语文上册 语文园地六看图作文 一束平行光的光源从地面上方沿竖直方向将光线向上投射到一面和它垂直的平面镜上,平面镜与地面的距离为3m,一束平行光的光源从地面上方沿竖直方向将光线向上投射到一面和它垂直的平面 写校园一角的作文写花坛里的植物(按四季(一季写一种) 议论文中以“合作”话题的800字作文 一束光从地面上一点A沿竖直方向投射到一块水平放置的平面镜上,平面镜距地面4m,如果把平面镜以入射点o为中心顺时针旋转30度,地面上得到的光斑距A点多少米 校园一角怎么写?要写港头中心小学 写事的结尾和开头 一束细光从地面A处竖直向上投射到一块与它垂直的平面镜上,平面镜离地3M,如果把平面镜沿水平方向转过30°角地面上的光斑距离A出多远?(初二物理) 描写校园一角的作文 如图所示电路,电源是由三个相同的电池串联组成的电池组,每个电池的电动势E=2V,内电阻r=0.5Ω,电阻R1=6Ω,R2=2.5Ω,R3=3Ω,电表内阻影响不计,求(1)电键K断开时,伏特表和安倍表的读数?(2)电键K 如图,一束细小的平行光从地面A处沿竖直方向向上投射到一块跟他垂直的平面镜上 什么样的感觉真好作文400字 粉笔的自述作文1000字 物理学中电池(电源)用什么符号表示? 有·····的感觉真好 (初三作文600字) 我心中的孔子是什么样的?求论文 在直径为5米的圆形花坛边缘,围绕着一条宽0.8米的环形小路,这条小路的面积是多少平方米? 《放假,感觉真好》 作文 我心中的孔子作文300字急! 绕一个直径为5米的圆形花坛修一条宽0.8米的环形小路,这条小路的面积为多少? 一束光线和水平面成30·,若使其经一平面镜反射后,反射光线沿水平方向射出,则镜面与水平面的夹角为 或 我眼中的孔子 作文 一束光a斜射到两个互相垂直和互相平行的平面镜上,请画出最终反射出去的光的方向 《放假,感觉真好》作文 500字左右 急需(我眼中的孔子)作文 以《最快乐的事》为题写一个精彩的开头和结尾快 七月的天山是按照什么的顺序描写的 如图,平行四边形ABCD中,E、F分别是边BC、CD的中点,则图中与△ABE面积相等的三角形有哪些?不写证明过程. 如何用物理实验器材判断蓄电池正负极在实验桌上有一个电极已经看不清楚的蓄电池,请利用一些实验器材确定它的正负极 四年级作文校园一角范文 如图,平行四边形ABCD的面积是S,E、F分别是BC、CD的重点,那么图中三角形AEF的面积是( )A.(5/8)S B.(1/2)S C.(3/8)S D.(1/4)S 有道物理题,大概是 有一节正常的电池A,和一节正负极不明的电池B,一个灯泡,导线若干,想要判断电池B的正负极,想出方案.答案上说把A,B串起来,跟灯泡再串起来,然后把B倒过来继续与A相串,灯泡 一束平行光从地面A处沿竖直方向向上投射到一块跟他垂直的平面镜上,平面镜距离地面4m,如果把平面镜在竖直面内沿水平轴转过30°,地面上得到的光斑距A点多远? 以草为话题写一篇咏物抒怀的作文字数不少于500字. 物理中电池的正负怎样表示 如图所示,一块水平放置的平面镜m,与地面的距离是2米,一束光从地面上s点沿竖直方向将光线so投射到平面镜m上,若将平面镜转动一个角度,则反射光线在地面上的光斑由s点移到s‘点,测的ss’=2 四年级上册语文园地作文二多头树 有关孔子简介的作文(要自己写的) 对教师的教育组织策略的评价方式: 以“草”为话题写一篇作文. 伤心的一件事 作文的开头和结尾关于伤心的事作业的开头和结尾,那你发出来吧,要不然我选你,对其他人不太公平 求作文《XXX的感觉真好》 600字以上,以记叙为主 以“春来草自青”为话题,写一篇作文.不少于800字希望你们回答我的问题不要在其他网站复制一个.给我粘贴过来了.我相信团队.我挺着急的. 找一篇关于快乐的作文 开头与结尾要照应 有具体的一件事 要有具体的一件事........ XXX感觉真好作文~500字左右 以“春来草自青”为话题 一篇作文 800字左右 以“位置”为题目 一篇作文 800字左右马上就要开学了 只要第一篇的 后一篇写完了 有哪些水果可以做水果电池 如下图,三角形ABC的面积为72cm²,点D在线段AC上,点F在线段BC的延长线,BC=2CF,且DCFE是平行四边形.阴影部分的面积是( )cm² ‍‍‍
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘