企业级API设计

简介: 最近对service的API设计,在team内有些讨论,主要集中在API是足够抽象、通用好呢, 还是具体、易用好? 其实这个是要折衷的,通用的好处是以后更改API的可能性小,但坏处是想要通用,里面的字段就不能定义太死,不定义死,极端的例子是全部用Name/Value Pair,最通用,但client面对这些NV,根本不知道怎么去设值,这样的API很明显是不友好,难用的,而一个好的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的优点及其在企业级应用中的作用
使用API可以帮助开发者快速、高效地构建功能丰富、用户体验良好的应用程序,同时也可以帮助企业和机构提高效率、创造新的商业模式和创新服务。在企业级应用中,使用API可以实现数字化转型、创造新的商业模式和创新服务、提高内部效率以及实现跨部门协作等目标。因此,使用API是当今应用程序开发和企业级应用建设的必备技术之一。
|
XML JSON 前端开发
软件测试|Spring Boot 的 RESTful API 设计与实现
软件测试|Spring Boot 的 RESTful API 设计与实现
143 0
软件测试|Spring Boot 的 RESTful API 设计与实现
|
SQL 安全 Java
微服务API开放授权平台的设计与实现
微服务API开放授权平台的设计与实现
微服务API开放授权平台的设计与实现
|
XML SQL JSON
RESTful API 设计指南
RESTful API 设计指南
280 0
RESTful API 设计指南
|
API 微服务 Java
Netflix 实用 API 设计 (下)
Netflix 实用 API 设计 (下)
246 0
Netflix 实用 API 设计 (下)
|
消息中间件 JSON 缓存
如何设计 API 接口,实现统一格式返回?
如何设计 API 接口,实现统一格式返回?
如何设计 API 接口,实现统一格式返回?
|
算法 前端开发 安全
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
|
JSON 监控 安全
22条API设计的最佳实践
22条API设计的最佳实践
22条API设计的最佳实践
|
分布式计算 安全 API
异步 API 设计之扇入扇出模式
扇出/扇入模式是更高级 API 集成的主要内容。这些应用程序并不总是表现出相同的可用性或性能特征。
异步 API 设计之扇入扇出模式
|
存储 前端开发 Java
一文概览设计Web API 中的细节
一文概览设计Web API 中的细节
177 0