企业级API设计
最近对service的API设计,在team内有些讨论,主要集中在API是足够抽象、通用好呢, 还是具体、易用好?
其实这个是要折衷的,通用的好处是以后更改API的可能性小,但坏处是想要通用,里面的字段就不能定义太死,不定义死,极端的例子是全部用Name/Value Pair,最通用,但client面对这些NV,根本不知道怎么去设值,这样的API很明显是不友好,难用的,而一个好的API应该是自明的(self-documenting)的。 所以需要折衷。
关于API 通用性(Generic)和 自明性(self-documenting)讨论继续...
这个折衷要看应用场合,世界上最大的分布式系统是什么?对,是万维网,它的API是什么,对,HTTP。 万维网包罗万象,所以其API(HTTP)要绝对的通用,可扩展。怎样做到呢,没有任何限制(constraint)的东西,无疑是最自由、最可扩展的,所以稍微知晓HTTP的同学,不难发现在HTTP里,除了消息头的元数据名如 HOST,Connection-type等是要遵循协议规范的(消息头也是可扩展的,用户可以自行添加头部元数据,通常以X-开头),对于消息体(Message Body)可以说是绝对的自由,没有一丁点限制,你可以在里面放HTML,也可以是XML、JSON,
也可以是图像,二进制流,音频,视频,可以说是世界上最通用的API。
再看一个场合,公司A和公司B合作,A需要提供一组API给B公司条用,好吧,B公司,我们决定使用世界上最通用的API给你用,www.A.com/service4B,可是里面的request body要怎么写呢?像这样针对性不叫强的API,最好还是具体一点,这样client看到你的接口,就基本知道要怎么调用你的服务了, 比如对于查询合同的API,你就必须要在HTTP Body里写明:
<contract>
<contractId>123456</contractId>
</contract>
或者用REST的思想,URI为 www.A.com/service4B/contract/123456. 这样的API失去了通用性,但其专用性以及对特定环境下的约束,正是B公司我们想要的。
还有API也是一个不断演化的过程,所以不用太担心当前的API是不是扩展性太差,这也是Agile的思想,包括HTTP从1.0 到1.X 也是在不断的演化当中。
当然一个企业级API需要考虑的因素还很多,这里先开个头,后面会结合公司的CommerceOS (eBay next gen public API),在详细讨论....
还有个原因就是,刚才看到一篇文章《管理企业级API的7个最佳实践》,觉得说的还是很在理,先copy在这里,后面有时间再整理一下。
1. API优先的设计方法
SOA最佳实践就是将API开发从后端应用中完全地分离出来。“与其在执行应用之后再创建API,倒不如先尽己所能提前创建好一个接口,然后再将其与后端逻辑相挂钩。这样一来,问题便可逐个击破,开发者也可以更专注于清晰明了的API执行过程,而API测试也会变得更加容易。”Shafii如此说道。
2. 选择一个稳定的API运行时
运行时的选择可以说是至关重要。因此,我们必须要注意一个企业级API从创建开始的所有需求,比如可扩展性、实用性、可靠性等。即使API没有进行修改,也应该能够在企业内部和云端顺利运行。这样一来,开发者便可以干很多事情,比如利用云来获取更多额外资源,或者在充分准备之后,实现企业模型到云模型的转移等。
3. 创建一个中央服务存储库
另外一个关键点就是将API开放到一个中央存储库中,以便于开发者和终端用户发现。
4. 通过版本、策略和契约来管理服务
对于任何操作系统或应用程序来说,API的版本控制都是必不可少的,其重要程度不亚于安全性和策略管理。
5. 提升和开放你的API
Shafii强烈建议为API创建一个社区平台,并为其提供信息和技术支持。
6. 通过度量、分析来监控和测量API使用情况
在商业活动中,评估力度越大,就越能有效追踪到API的运行过程和结果。不管是从潜在的技术层面还是商业层面,一定的度量标准都会帮助开发者更好地了解API的使用情况。
7. 重构API以提升API用户体验和效率
对于这最后一点,Shafii更是反复强调,一定要对API保持不断的更新。
版权声明:本文为博主原创文章,未经博主允许不得转载。
企业级API设计的更多相关文章
- 从商业角度探讨API设计
为Web设计.实现和维护API不仅仅是一项挑战:对很多公司来说,这是一项势在必行的任务.本系列将带领读者走过一段旅程,从为API确定业务用例到设计方法论,解决实现难题,并从长远的角度看待在Web上维护 ...
- 深入浅出聊聊企业级API网关
http://architect.dataguru.cn/article-11431-1.html API Gateway(API GW / API 网关),顾名思义,是出现在系统边界上的一个面向 A ...
- javascript的api设计原则
前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...
- (转载) RESTful API 设计指南
作者: 阮一峰 日期: 2014年5月22日 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制 ...
- RESTful API 设计指南
转自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机. ...
- GOTO Berlin: Web API设计原则
在邮件列表和讨论区中有很多与REST和Web API相关的讨论,下面仅是我个人对这些问题的一些见解,并没有绝对的真理,InnoQ的首席顾问Oliver Wolf在GOTO Berlin大会上开始自己的 ...
- RESTful API 设计最佳实践
背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...
- 我所理解的RESTful Web API [设计篇]
<我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...
- 从英文变形规则计算到Restful Api设计
➠更多技术干货请戳:听云博客 一天在研究Restful API设计,命名的时候我总是很纠结,我相信大多数人也有这种感觉,不是说想不出来某个单词怎么写的问题,像我这种没事背单词背到13000词量的人也要 ...
随机推荐
- input输入框与元素间有间隙
<div class="container"> <button>1</button> <button>2</button> ...
- Using AntiForgeryToken make it better
原文发布时间为:2011-09-01 -- 来源于本人的百度文章 [由搬家工具导入] http://weblogs.asp.net/srkirkland/archive/2010/04/14/guar ...
- 实现多线程sokect
上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后 续Clien ...
- pcm2aac
1.下载faac源代码:http://downloads.sourceforge.net/faac/faac-1.28.zip 2.在VAWARE上进行交叉编译,安装. ./configure --t ...
- windows下apache+php配置 问题总结
以下为转帖内容: 原文出处:http://www.cnblogs.com/angelox/archive/2008/10/09/1306732.html PHP5+APACHE2.2配置成功案例:第一 ...
- MySQL的XA_prepare_event类型binlog的解析
为了支持新版的xa事务,MySQL新加了一种binlog event类型:XA_prepare 项目中使用的开源组件mysql-binlog-connector-java无法解析此种binlog ev ...
- java的架构流行阶段
第一阶段:SSM 第二阶段:分布式系统改造,平台化初具规模,各项垂直业务系统搭建上线.产品端极大丰富用户投资.大数据平台研究并使用 第三阶段:SOA治理,使用zookeeper作为注册中心,dubbo ...
- Java开发笔记(一百零四)普通线程池的运用
前面介绍了线程的基本用法,以及多线程并发的问题处理,但实际开发中往往存在许多性质相似的任务,比如批量发送消息.批量下载文件.批量进行交易等等.这些同类任务的处理流程一致,不存在资源共享问题,相互之间也 ...
- asp.net上传文件夹权限配置以及权限配置的分析
切记:一定要禁止给公共上传文件夹的权限设置为everyone,且为完全控制!除非你这个文件夹属于内部操作的,那这样做是允许,其余情况一律禁止! 基本的文件上传文件夹权限配置: 1.在需要配置上传的文件 ...
- iOS5可能会删除本地文件储存
文/ Nick (iphoneincubator) 关于iOS 5的本地文件储存Marco(Instapaper 的开发者)写过一篇很好的帖子阐述过相关问题,有兴趣的同学可以先阅读下他的文章然后再看下 ...