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

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

Cory Ondrejka,是这位工程师拯救了Facebook! 三星争夺企业市场的三大痛点与对策 Xcode更新至4.6 支持iOS 6.1 工程师揭秘:NVIDIA如何锻造Android掌机 VMware掌控Puppet 老用户会被锁定吗? 试图领导创新:三星创新中心11亿美元建基金 基于WebRTC Chrome与Firefox实现视频通话 将OpenStack私有云部署到Hadoop MapReduce环境 Web设计师必备的10款最佳排版工具 诺基亚CEO谈平板计划 Android为候选系统 244亿美元!戴尔公司正式完成私有化 对抗苹果 Facebook或推Find My Friends应用 前谷歌工程团队负责人:如何打造一个完美的产品 好消息!Google Drive可存储共享JavaScript等网站 Android Rivers:用Kotlin语言写出的新闻应用 辞旧迎新 老牌游戏开发商的移动进化之路 iSuppli:硬盘市场持续萎缩 大数据应用成重要市场 全球最大校园Hackathon:失败后,你能学到什么? 走进Evasi0n,越狱黑客如何拿到iOS权限 提升服务扩展性和冗余的八个编码方向 分析数据预测未来?数据挖掘绝不是大公司的专利 揭秘LinkedIn数据科学家如何工作 为什么响应式设计对SEO有好处? SpaceX团队:想登陆火星吗?学好C++吧 可穿戴设备:越来越清晰的苹果iWatch 苹果设计师:开发者们的应用图标设计对了吗? AWS兴起之路:尚未成功 仍需努力 John Carmack:我们为什么不开发Linux游戏 最具创新力公司50强:耐克居首 Web如何成为另一个应用商店 Adobe发布Photoshop1.0.1源代码 当读取1万条记录以上,应怎么做才有高效率? 那想在记事本中实现“查找,”“替换”。。。。要怎么做,我头猛大 有没有按位图画不规则窗口的代码? 怎样得到LISTCTRL的全部列(COLUMN)的信息,难道要用GETCOLUMN()? 为什么现在学win32 API的人这么少? 还是老问题 redhat安装问题,请高手指点 网页中有一文本框,如何约束用户输入格式 现在fanso怎么回事? 安徒生童话之六---老爹做的事总是对的 (呵呵,好故事,很美丽) 如何调用EXE或DLL程序,使被调用程序是调用程序的MDI中的一个子窗口? 《网络设计师教程》P103表5.2中 4B/5B码和4位2进制之间是怎么转换的? COM进程类组件中,在一个接口中加了一个方法,成员变量类型CString,可是不行,那该用什么? 请问那里有 motif toolkit 开发工具下载 一个mysql的问题! 出售软件源代码以及销售权! byte类型的数据如何转化成二进制数,显示给用户(如8-》0000 1000) 代征:精通vc的深圳朋友,精通网络通讯的开发和多媒体处理。 20分求助!这条警告是什么原因呀?怎么解决 ?LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF 局域网的文件共享传输是基于什么协议的? windows and dos ??? 请问大家几个技术问题!!谁能回答阿!比较着急!:) 有没有代替VB里的PICTUREBOX 的控件,VB里的不好用?????????? 我是新手,请问JSP有些什么开发软件?比如JAVA用JBUILDER。。。 请问知道整型值a=97,什么函数可以得到"a"呢?即97->"a"通过什么函数呢? 如何将十进制数转换成二进制数 函数对象的简单问题 喜欢仙剑的朋友请进。:) 恭喜恭喜? 我想制作C++ Builder4工程的安装程序,不知道用什么软件,请大家帮忙。谢谢! 请问大家几个技术问题!!谁能回答阿! 我是ASP初学者,请求一个简单的问题,Help!!! 有没有关于installshield6的书, 快看呀!我真的要不行了! 请教大家一个术语吧! 低手问题,关于Form中的数据问题,谢了。 如何用PictureBox控件显示GIF图?特急!!!!!! 单文档多视(急!) 想学delphi中关于database方面的内容,不晓得哪本书好,大家推荐好吧? “CSDN准备推出海外图书邮购服务,首批是侯捷的著作和译作” 什么时候可以开始? 谁能介绍一下嵌入开发领域比较成熟的产品?他们的功能、性能如何 关于Autocad字体的问题 在 ActiveForm 中如何初始本地数据模块!菜鸟问题! (const char *)&p转化为delphi语言该是什么? ####我拼了命也要问出这个问题的答案########## 怎样才可以描述点击窗口右上角的“x”时所发生的事件,请给个例子,谢谢了! 哪儿有Install anywhere 4下载 庆祝kylix2001,终于知道叫什么好了,耶………… VB,请问set obj=new class 和 dim obj as new class的区别????????? install anywhere 4 哪儿有下载? GGMM,向我灌水..... 求一个《往事》作文的开头结尾,急啊! 500字《历史的选择》读后感作文 文章中一句话的含义?高手进!白云深处吉普车行了两个多小时,终于登上海拔两千多米的燕山主峰玉皇顶.纵目四望,八百里燕山,一派磅礴气势.河北电视转播台高高的井架直插云霄.我们正看得 中国有那些重大的历史事迹?我写作文需要!收集材料!麻烦您了古代史与现代史 古代史与现代史 古代史与现代史 古代史与现代史 关于历史的选择的作文800字 大师风范这篇阅读,从大师的沉默中你体会到了什么 历史上因有一技之长而扬名的人,我要写作文 帮忙举几个例子, 紧扣历史的选择400~500字作文 大师风范阅读答案.2010—2011六年级的试题啊!照样子写词语 (技艺)高超 精彩的() ()高尚精湛的(琴艺) ( )高明 精致的()本文最后一句在写作方法上叫做 仅此一点3个含义中的第 和法律有关的历史事件 简洁点 我写作文 历史的选择作文 大师风范阅读答案 苏教版啊 五年级下大练第三单元测试卷的那个啊 急QAQ原文:一位世界一流的小提琴演奏家在为人之道演奏时,从来不说话。每当学生拉完一曲,他总是再把这一曲再拉一 咋样才能快速提高写作文的水平? 历史的选择作文怎默写1500字 大师什么是大阅读答案 如何提高写作文的速度?我每次写作文都写得很慢,几乎要两个多小时.我写作文时常常是写了这一段不知道下一段写什么,要思考好久.请问有什么办法能使我写作文的速度变快又不影响文章的 历史的选择作文怎么写?312321 请大师细腻翻译短文,题目也要翻译,谢谢 如何提高小孩子的做事情速度? 我想知道“历史的选择”作文怎么写? 作文:一个令人感动的瞬间(体现父爱或母爱) 怎样提高写字速度. 历史的选择整整800字的征文作文如何写? “一个令人感动的瞬间”为题,写一篇作文,歌颂无私的父爱或母爱.要求有具体的细节 怎么提高写字速度?最好是字写得好速度又快的哪种. 大师风范什么意思百度知道 描写父爱或母爱的好文章急! 如何有效地提高写字速度?这里的写字是指硬笔(钢笔、铅笔等).平时因为写字速度慢导致语文的抄写作业几乎成了我的恶梦,政治默写时更因为写字速度慢而无法完成(我会写,而且背得很熟 阅读大师风范中:仅此一点,足以称之为大师,句中的此指的是什么? 如何写关于母爱和父爱的作文?要500字以上!写一件事!适合四年级! 写作文 申论 我特别慢写作文 申论 我特别慢 你们一分钟,能写多少字啊 我特别慢啊 蜗牛一样 概括《大师风范》,快. 父爱母爱的好文章要不长不短,通俗易懂,直点中心. 怎么才能提高写字的速度.写字精力不集中. 求英语阅读答案,和文章的主要内容,具体私下沟通,高手来, 急需一篇描写父爱或母爱的感人好文章最好短一点(写作业要用),希望今晚就有~谢谢了~ 怎样提高自己写作文的水平? 18米增加六分之一米后是() 18米增加它的6/1是() 甲数是108,甲数的3/1与亿数的4/1相等 乙数是() 一根20米长的铁丝,先用去它的20/3,再用去20/3米 还剩下() 应用题 有一份稿件,小明第一天 关于母爱和父爱的作文急需母爱或者父爱的作文,要通过一件事、一次批评等等,要在今天~ 关于中国传统建筑的资料,我要写作文,不要太专业,稍稍简单一点,先注明是哪一个建筑,再简略写一下一眼看过去的样子,然后说外型特点和内部构造. 怎样提高写作文的水平 西游记中前十回关于描写师徒四人性格特点的主要内容. 急求关于反省的历史素材,用于写作文的,谢谢 如何提高自己写作文的语言水平我现在上高二,每次作文语言都不够好,论据哪方面也了了,应该如何提高?看什么书比较好? -):-):-)求大师一一帮一帮 NBA中的作文素材我总感觉作文中可以运用大量NBA球星的感人事迹作为论据,请大家告诉我一些.我谢谢大家了. 怎么让我写作文的水平提高? 民族风范的作文 触动心灵的往事的开头与结尾 如何提高写作文的水平 大师风范中小提琴家为什么说”琴声是最好的教育“? 写作文中好的开头和结尾要求是散文或者议论文 如何速度写作文速度作文要认真先看好作文的题目,在认真的思考,想清楚在速度写! 大师风范中的小提琴家为什么说:琴声是最好的教育 题材历史的作文有什么好的开头结尾? 作文 《历史的选择 》 500字左右,要快讲的是抗日英雄的 急 谢了 上个世纪初,有一个犹太少年,他做梦都想成为像帕格尼尼那样伟大的小提琴演奏家.他一有空就练琴,可是,就连他的父母都觉得这个可怜的孩子拉得实在太蹩脚了,完全没有音乐天赋.有一天,少 怎样写作文的开头和结尾 作文 500字 曾经在一本杂志上看到过一篇这样的文章,给我的印象很是深刻,队长杰克带领着他的队友们正在日常的维护铁路的检修工作,天气很干燥,工作枯燥乏味,杰克在这条铁路上已经工作了15年了,所
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn