别再设计易碎的Web 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,减少其脆弱性,有哪些优势呢?

易使用——没有复杂的程序、复杂的细节,易于学习;
灵活性——意向驱动API可随着服务器端的变化而变化;
一致性——一致性是API设计必备的一大特性;
松耦合——这是向后兼容性问题。你只需返回一个固定的值,后端兼容在意向驱动API中会运行的很好;
可优化——当对数据库进行更新时,可计算优化而不是在内置的需求上,这比优化每个组合的程序设计要困难得多;
可缓存——易缓存。程序员的设计使得缓存困难(正常可查询参数)和无效(比如限制=5 / 10 / 15缓存未被命中);
易开发—— 由于高复杂性使得开发和测试测试程序员的 API变得更加困难和耗时。
高效验证模型缓存 — — 快速检查 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示例,通过持续集成服务来标记存储库版本。

定义特定的功能:指定一个国家修订的版本库
GitHub会自动将请求相关联的,显示在一起
无HTML 或可自定义的国家 ;API 有极少数量的数据需求。
面向未来: 它以简约的方式满足定义的问题。
状态相关修订 ;提交添加更多的请求工作。
GitHub 具有灵活性,可以进行更改,而不会破坏兼容性:1. 对于API,GitHub暂不支持重写功能整个请求功能;2.可适用于其他UI领域;3. 如果 GitHub变成MercurialHub、SubversionHub、PerforceHub、 CvsHub、RcsHub,API可同样被应用。
GitHub灵活显示提交状态: 可在移动应用中显示状态、本地化的文本易合并。
还有个真实的例子 Twilio’s AvailablePhoneNumbers API,目的是为了搜索电话号码分配到您的账户中,这个看起来就像典型的API集合,但是细节和意图关联并不大。

总结:

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

英文出自: Mathieu.Fenniak

时间: 2025-01-27 03:27:48

别再设计易碎的Web API的相关文章

构建一个Web API来显示Salesforce.com对象

简介 Web API 是一个快速增长的业务渠道,可帮助您的企业进入新的市场,并吸引新的客户 与合作伙伴.它们还可以帮助您从大型开发人员社区中挖掘创新,而不仅仅是在您的公司的开发人员中 挖掘创新. 由于 Web API 显示关键的业务资产和服务(如产品目录或电话清单),所以它们就 像是您的企业的外部人员.它们应该是自我描述性,并且简单易用.它们也应该使用 Representational State Transfer (REST) 架构风格,这样就可以很容易地从浏览器或移动设备调用 它们. 利用

GOTO Berlin: Web API设计原则

在邮件列表和讨论区中有很多与REST和Web API相关的讨论,下面仅是我个人对这些问题的一些见解,并没有绝对的真理,InnoQ的首席顾问Oliver Wolf在GOTO Berlin大会上开始自己的演讲"Web API设计原则"时如是说. 不要考虑端点.SOAP有一个单独入口点的外观.相比之下Web有很多入口点,它们建立在关系上,彼此之间相互连接,并且以超媒体作为关键要素.为了不让你的API成为一个只有一种接入方式的黑洞,你应该使用超媒体控制按照对听众有意义的表现方式去链接你的资源.

使用IBM WebSphere Cast Iron Web API Services创建一个Web API

利用 IBM WebSphere Cast Iron Web API Services,您只需点击几下就可以组装和显示 API.您还可以通过所提供的分析法来分析您的 Web API 的使用情况,并利用社区挂钩在品牌化的开发人员门户中将 Web API 社区社交化. Web API 是一个快速增长的业务渠道,可帮助您的企业进入新的市场,并吸引新的客户与合作伙伴.它们还可以帮助您从大型开发人员社区中挖掘创新,而不仅仅是在您的公司的开发人员中挖掘创新. 由于 Web API 显示关键的业务资产和服务(

使用 SoapUI 测试ASP.NET Web API

我们为不同的目的开发了很多web服务,经过授权的用户就可以访问和使用这些web服务.soapUI 是一个强大的测试web服务的工具,他不仅可以测试SOAP服务,他也支持测试RESTful服务.在这里我将解释如何使用 SOAP UI 测试ASP.NET Web API. 由于 Web 服务是被程序调用的, 一般不会提供界面让最终用户或测试人员直接使用,在 soapUI 等工具出现之前,测试人员不得不自己编写程序来测试它, 这就要求测试人员花费很大的精力了解底层的接口,调用关系和详细的协议,导致他们

WCF Web Api

什么是WCF Web Api ? 越来越多的互联网应用向外开放他们的功能,例如Flickr,Twitter和Facebook,国内也掀起了开放的浪潮.处理这些社会化的应用外,企业的组织也在暴露企业的应用功能.WCF Web API允许开发人员通过HTTP开放他们的应用程序.数据和服务.这允许开发人员可以充分利用HTTP作为应用程序的协议,应用程序可以和丰富的客户端进行交互,不仅仅是浏览器.移动设备.桌面应用还是其他的后端服务.他们还可以利用网络的高速缓存和代理的基础设施,通过提供适当的控制和实体

在ASP.NET Web API中使用OData

一.什么是ODataOData是一个开放的数据协议(Open Data Protocol) 在ASP.NET Web API中, 对于CRUD(create, read, update, and delete)应用比传统WebAPI增加了很大的灵活性 只要正确使用相关的协议,可以在同等情况下 对一个CRUD应用可以节约很多开发时间,从而提高开发效率 二.怎么搭建 做一个简单的订单查询示例 我们使用Code First模式创建两个实体对象Product(产品),Supplier(供应商) 1.新建

8 种提升 ASP.NET Web API 性能的方法

ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web API 性能的技术. 1) 使用最快的 JSON 序列化工具 JSON 的序列化对整个 ASP.NET Web API 的性能有着关键性的影响. 在我的一个项目里,我从 JSON.NET 序列化工具转到了 ServiceStack.Text 有一年半了. 我测量过,Web API 的性能提升了20

ASP.NET Web API Selfhost宿主环境中管道、路由

前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这个框架由于宿主环境的不同在不同的宿主环境中管道中的实现机制和路由的处理方式有着很大的不同,所以我会将对应不同的宿主环境来分别的做出简单的讲解.  ASP.NET Web API路由.管道     ASP.NET Web API 开篇介绍示例     ASP.NET Web API 路由对象介绍     ASP.NET Web API 管道模型     ASP.NET

一个创建 OData 的新选项: Web API

早在 OData 规范出现以前,Microsoft .NET 开发人员就已能够创建 OData 源.借助 WCF 数据服务,可使用具象状态传输 (REST) 在 Web 上公开实体数据模型 (EDM).换句话说,可 经由以下 HTTP 调用使用这些服务: GET.PUT.DELETE 等.随着创建这些服务的框架的发 展(中途数次更改名称),输出也在不断演变,并最终形成以 OData 规范 (odata.org) 封装的形态.目前已出现多种可使用 OData 的 客户端 API,来源如 .NET.