最近对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设计的更多相关文章

  1. 从商业角度探讨API设计

    为Web设计.实现和维护API不仅仅是一项挑战:对很多公司来说,这是一项势在必行的任务.本系列将带领读者走过一段旅程,从为API确定业务用例到设计方法论,解决实现难题,并从长远的角度看待在Web上维护 ...

  2. 深入浅出聊聊企业级API网关

    http://architect.dataguru.cn/article-11431-1.html API Gateway(API GW / API 网关),顾名思义,是出现在系统边界上的一个面向 A ...

  3. javascript的api设计原则

    前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...

  4. (转载) RESTful API 设计指南

    作者: 阮一峰 日期: 2014年5月22日 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制 ...

  5. RESTful API 设计指南

    转自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机. ...

  6. GOTO Berlin: Web API设计原则

    在邮件列表和讨论区中有很多与REST和Web API相关的讨论,下面仅是我个人对这些问题的一些见解,并没有绝对的真理,InnoQ的首席顾问Oliver Wolf在GOTO Berlin大会上开始自己的 ...

  7. RESTful API 设计最佳实践

    背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...

  8. 我所理解的RESTful Web API [设计篇]

    <我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...

  9. 从英文变形规则计算到Restful Api设计

    ➠更多技术干货请戳:听云博客 一天在研究Restful API设计,命名的时候我总是很纠结,我相信大多数人也有这种感觉,不是说想不出来某个单词怎么写的问题,像我这种没事背单词背到13000词量的人也要 ...

随机推荐

  1. iOS 关于请求参数在cookie里面

    一.首先了解一下什么cookie cookie是在客户端存储服务器状态的一种机制.web服务器可以通过set-cookie或者set-cookie2 HTTP头部设置cookie. Cookie可以分 ...

  2. Linux服务器之SSH

    SSH 1.ssh是安全的加密协议,用于远程连接linux服务器. 2.ssh默认端口是22,安全协议版本ssh2. 3.ssh服务端主要包含两个服务功能ssh远程连接,sftp服务. 4.linux ...

  3. 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数

    1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K ...

  4. 【CF1015E】Stars Drawing(贪心)

    题意:给定一个n×m大小的字符矩阵,仅由‘.’和‘*’组成,询问这个图可否划分为一些由‘*’组成的十字形状,这些十字之间可以有重叠, 如果存在方案则输出每个十字中心坐标与边长度,无解输出-1 n,m& ...

  5. NOI2001食物链

    描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人 ...

  6. 树莓派个人实测 Q&A(最新修改使用Manjaro连接远程桌面) (二)

    以下内容使用和http://www.eeboard.com/bbs/thread-5191-1-1.html所在的帖子一样的风格,不过原作者是window下的操作,本人的都是在manjaro linu ...

  7. Ubuntu FireFox的“后退”按钮与Backspace键

    我们都知道,大部分的网页浏览器和窗口管理器的“后退”按钮是和Backspace键关联的,这样会极大的方便并加快我们浏览时的翻页速度(我一直是左手 放在键盘上按快捷键,右手鼠标的姿势找文件和看网页的,省 ...

  8. hdu 5475(打破固定思维OR线段树)

    An easy problem Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  9. JavaScript变量提升和函数声明预解析

    1.首先理解函数作用域 在JavaScript中,变量的定义并不是以代码块作为作用域的,而是以函数作用作用域的.也就是说,如果变量是在某个函数中定义的,那么它在函数以外的地方是不可见的.而如果该变量是 ...

  10. HDU 1022 Train Problem I[给出两个长n的串,入栈和出栈顺序,判断入栈顺序是否可以匹配出栈顺序]

    Train Problem I 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 As the new term comes, the Ignatius Train Sta ...