API设计困扰
2011-07-23 19:46
148 查看
最近对产品的代码设计之道很迷茫,尤其目前的API设计。记得之前阅读过《Practical.API.Design.Confessions.of.a.Java.Framework.Architect》,对什么样的API才是好API和设计出好API的方法略知一二。但毕竟没有亲身体验过API的设计过程,对为什么要遵循那些规则没有深刻体会。如今,我被不良设计带来的烦恼折磨了,虽不能拼一己之力去改变什么,但至少把问题弄清楚,也是一种负责任的态度。于是,我花了2天时间阅读了《API design for C++》,深化下对一些重要概念的理解。
好API所具有的属性:
Provide a good abstraction
Hide implementation details
Minimally complete
Easy to use
Loosely coupled
Stable, Documented, tested
个人感觉,目前的产品违背了其中的大多数。
Stable, Documented, tested ==> 从目前的使用情况来看,肯定是unstable的;Document是有的,但很晦涩;几乎未作testing。
Loosely coupled ==> 感觉到一定的耦合性,但目前并未暴露出与之相关的严重问题。
Easy to use ==> 困难点在于参数的使用,一些参数由很复杂的结构体来定义,即使你不关心一些参数的设定或者使用默认就好,你也要一步步去设定每一个参数,使用起来相当不方便。
Minimally complete ==> 用户随意的一个需求,都成了一个API承诺。这样API会无限膨胀,不受控。
Hide implementation details ==> C语言程序,并未采用面向对象概念,所以是physical hiding。
Provide a good abstraction ==> 这个做的不好,简单明了的功能当然容易抽象,但一些辅助性的该如何抽象得更好,值得思考。
也许你会找理由说,你有特殊的需求,不能满足这些规则。没错,每个项目都有自己的特殊性,你当然可以违背其中的规则,但在违背之前,最好找到充分的理由,否则你的API设计就偏向了正确的设计之道。如果从设计一开始,你就没考虑到好API应该具有的属性,我建议先扩充一些背景知识,再开始实践,尤其对于那些有长远目标的设计。
好API所具有的属性:
Provide a good abstraction
Hide implementation details
Minimally complete
Easy to use
Loosely coupled
Stable, Documented, tested
个人感觉,目前的产品违背了其中的大多数。
Stable, Documented, tested ==> 从目前的使用情况来看,肯定是unstable的;Document是有的,但很晦涩;几乎未作testing。
Loosely coupled ==> 感觉到一定的耦合性,但目前并未暴露出与之相关的严重问题。
Easy to use ==> 困难点在于参数的使用,一些参数由很复杂的结构体来定义,即使你不关心一些参数的设定或者使用默认就好,你也要一步步去设定每一个参数,使用起来相当不方便。
Minimally complete ==> 用户随意的一个需求,都成了一个API承诺。这样API会无限膨胀,不受控。
Hide implementation details ==> C语言程序,并未采用面向对象概念,所以是physical hiding。
Provide a good abstraction ==> 这个做的不好,简单明了的功能当然容易抽象,但一些辅助性的该如何抽象得更好,值得思考。
也许你会找理由说,你有特殊的需求,不能满足这些规则。没错,每个项目都有自己的特殊性,你当然可以违背其中的规则,但在违背之前,最好找到充分的理由,否则你的API设计就偏向了正确的设计之道。如果从设计一开始,你就没考虑到好API应该具有的属性,我建议先扩充一些背景知识,再开始实践,尤其对于那些有长远目标的设计。
相关文章推荐
- RESTful API 设计指南
- atitit.eclipse有多少api  扩展点,以及扩展点的设计
- 使用 EJB 3.0 Java Persistence API 设计企业应用程序
- RESTful API 设计指南
- API设计小手册(上) — 什么是好的API
- Java互联网架构-如何设计服务接口API限流功能
- SpringBoot使用教程【1】Restful API设计 返回json,xml格式
- Spring Cloud与微服务学习总结(3)——认证鉴权与API权限控制在微服务架构中的设计与实现(一)
- Pair Project: API设计 by Xiao Li and Yishi Xing
- 使用 EJB 3.0 Java Persistence API 设计企业应用程序
- APP服务端API(数据接口)设计应该考虑到的问题
- 基于WIN32 API的串口通讯软件的设计
- Restful API 设计规范
- 组件接口(API)设计指南[5]-最后的思考
- API设计原则学习笔记
- 10个有关RESTful API良好设计的最佳实践
- REST API设计步骤
- RESTful API 设计指南
- RESTful API 设计指南
- 如何设计好的RESTful API之安全性