atitit.api设计 方法 指南 手册 v2 q929.docx

atitit.api设计原则与方法

1. 归一化(锤子钉子理论)1

1.1. 链式方法2

1.2. 规则5:建立返回值类型2

1.3. 参数接收 JSON 对象2

1.4. 参数默认值2

1.5. 命名参数 support by map2

1.6.  处理类型 类型自动转换4

1.7.  处理 undefined null  empty5

1.8. .使用结构化语法5

1.9. 设置和获取操作,可以合二为一;方法越多,文档可能越难写 jq.val()5

2. 扩展性5

2.1. 回调(callbacks)5

2.2. 事件(events)5

3. 处理错误 throw friendly ex6

4. 同时俩个方法返回null和ex6

5. 可预测性 兼容性6

5.1. 编写SPI尤为重要6

6. 反面例子 反模式6

7. 参考7

1. 归一化(锤子钉子理论)

2. 避免使用长参数列表

· 三个或三个以内的参数是最完美的

· 长参数列表是有害的,程序员容易出错,并且程序在编译、运行时会表现不好

· 缩短参数的两种方法:Break up method、创建参数助手类

作者::  ★(attilax)>>>   绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

2.1. 链式方法

2.2. 规则5:建立返回值类型

当涉及到返回值类型时,你应该创建一致的、正规的API,下面提供一套设置规则(你可能会对下面的规则存在异议):

当方法返回一个单独的对象,但并没有对象被发现时,应该返回null。

当方法返回多个对象,但并没有对象被发现时,应该返回空List、Set、Map、array等,而不是null。

方法应该抛异常以防万一

对于上面的1、2条,最好的实践应该是:

抛出ObjectNotFoundExceptions当没有对象被发现时

不要返回null,一般以throw ex 尾号。。除非专门一个XXretNull的方法.. Null方便的if判断..

2.3. 参数接收 JSON 对象

与其接收一堆参数,不如接收一个 JSON 对象:

2.4. 参数默认值

参数最好有默认值,通过 jQuery.extend() , _.extend() 和 Protoype 的 Object.extend,可以覆盖预设的默认值。

2.5. 命名参数 support by map

接收 map 映射参数,回调或者序列化的属性名,不仅让你的 API 更干净,而且使用起来更舒服、高效。

jQuery 的  css()  方法可以给 DOM 元素设置样式:

JavaScript

1

2

3

4

5

jQuery("#some-selector")

.css("background", "red")

.css("color", "white")

.css("font-weight", "bold")

.css("padding", 10);

这个方法可以接受一个 JSON 对象:

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

jQuery("#some-selector").css({

"background" : "red",

"color" : "white",

"font-weight" : "bold",

"padding" : 10

});

// 通过传一个 map 映射绑定事件

jQuery("#some-selector").on({

"click" : myClickHandler,

"keyup" : myKeyupHandler,

"change" : myChangeHandler

});

// 为多个事件绑定同一个处理函数

jQuery("#some-selector").on("click keyup change", myEventHandler);

2.6.  处理类型 类型自动转换

定义方法的时候,需要决定它可以接收什么样的参数。我们不清楚人们如何使用我们的代码,但可以更有远见,考虑支持哪些参数类型。

// 修改后的代码

DateInterval.prototype.days = function(start, end) {

if (!(start instanceof Date)) {

start = new Date(start);

}

if (!(end instanceof Date)) {

end = new Date(end);

}

return Math.floor((end.getTime() - start.getTime()) / 86400000);

};

加了短短的 6 行代码,我们的方法强大到可以接收  Date 对象,数字的时间戳,甚至像 Sat Sep 08 2012 15:34:35 GMT+0200 (CEST)  这样的字符串。

2.7.  处理 undefined null  empty

为了使你的 API 更健壮,需要鉴别是否真

2.8. .使用结构化语法

使用结构化的API语法:用thing.action或thing.property代替do_action_with_thing。语法将自然而然地适应模块化的方法,其中每个模块是一个类。

2.9. 设置和获取操作,可以合二为一;方法越多,文档可能越难写 jq.val()

3. 扩展性

3.1. 回调(callbacks)

通过回调, API 用户可以覆盖你的某一部分代码。把一些需要自定义的功能开放成可配置的回调函数,允许 API 用户轻松覆盖你的默认代码。

API 接口一旦接收回调,确保在文档中加以说明,并提供代码示例。

3.2. 事件(events)

事件接口最好见名知意,可以自由选择事件名字,避免与原生事件 重名。

4. 处理错误 throw friendly ex

不是所有的错误都对开发者调试代码有用

5. 同时俩个方法返回null和ex 

Ex对大部分情况有用,单判断场合代码太多。Null则有用。。

对于类库开发者,最好俩个都提供即可。工用户select

6. 可预测性 兼容性

好的 API 具有可预测性,开发者可以根据例子推断它的用法。

Modernizr’s 特性检测 是个例子:

a) 它使用的属性名完全与 HTML5、CSS 概念和 API 相匹配

6.1. 9. 更多的属性,更少的方法

6.2. 编写SPI尤为重要

· Service Provider Interface即服务提供商接口,插件服务支持多种实现,例如Java Cryptography Extension (JCE);

· 发布之前编写多个插件;

· “三次原则”(“The Rule of Threes”):指的是当某个功能第三次出现时,才进行"抽象化"

7. 反面例子 反模式

十大最差实践

1. 错误处理不完善或者比较差

2. Rest API忽视HTTP规则

3. 暴露原始底层数据模型

4. 安全复杂性

5. 意外和非法发布

6. 缺乏开发经验

7. 期待一个MVC架构带给你一个伟大的API

8. 假设你构建API,用户就会被引进来(Assume if you build it they will come)

9. 技术支持不充分

10. 文档不给力

8. 参考

优秀API设计的十大原则 - 51CTO.COM.html

设计优秀API的五大规则-CSDN.NET.html

JavaScript API 设计原则 - WEB前端 - 伯乐在线.html

atitit.api设计原则 准则  v2 q929

Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】-CSDN.NET.html

API设计的十大最差和五大最佳实践-CSDN.NET.html

API设计原则 - jeff技术博客 - 博客频道 - CSDN.NET.html

atitit.api设计 方法 指南 手册 v2 q929.docx的更多相关文章

  1. Atitit s2018.6 s6 doc list on com pc.docx Atitit s2018.6 s6 doc list on com pc.docx  Aitit algo fix 算法系列补充.docx Atiitt 兼容性提示的艺术 attilax总结.docx Atitit 应用程序容器化总结 v2 s66.docx Atitit file cms api

    Atitit s2018.6 s6  doc list on com pc.docx Atitit s2018.6 s6  doc list on com pc.docx  Aitit algo fi ...

  2. Atitit. Api 设计 原则 ---归一化

    Atitit. Api 设计 原则 ---归一化 1.1. 叫做归一化1 1.2. 归一化的实例:一切对象都可以序列化/toString  通过接口实现1 1.3. 泛文件概念.2 1.4. 游戏行业 ...

  3. atitit.架构设计---方法调用结果使用异常还是返回值

    atitit.架构设计---方法调用结果使用异常还是返回值 1. 应该返回BOOL类型还是异常 1 2. 最终会有四种状况,抛出异常.返回特殊值.阻塞.超时 1 3. 异常的优缺点点 1 4. jav ...

  4. SoC嵌入式软件架构设计之六:API设计方法

    在嵌入式系统中,驱动都是以API的方式提供给应用进行调用.这里介绍嵌入式系统的API设计和管理方法. 驱动在系统中会按模块进行分类,比如按键驱动.LCD驱动.文件系统.card驱动.I2C驱动等等:每 ...

  5. RESTful API设计方法

    1.如果已经开始逐步的接触到了RESTful API设计方法的朋友,首先要对HTTP/HTTPS有一个大致的了解,虽然本身和RESTful API没有什么关系.但是对于增加网站的安全性还是十分重要的, ...

  6. HTTP API 设计指南(请求部分)

    为了保证持续和及时的更新,强烈推荐在我的Github上关注该项目,欢迎各位star/fork或者帮助翻译 前言 这篇指南介绍描述了 HTTP+JSON API 的一种设计模式,最初摘录整理自 Hero ...

  7. HTTP API 设计指南(响应部分)

    前言 这篇指南介绍描述了 HTTP+JSON API 的一种设计模式,最初摘录整理自 Heroku 平台的 API 设计指引 Heroku 平台 API 指引. 这篇指南除了详细介绍现有的 API 外 ...

  8. HTTP API 设计指南(结尾)

    前言 这篇指南介绍描述了 HTTP+JSON API 的一种设计模式,最初摘录整理自 Heroku 平台的 API 设计指引 Heroku 平台 API 指引. 这篇指南除了详细介绍现有的 API 外 ...

  9. HTTP API 设计指南(基础部分)

    前言 这篇指南介绍描述了 HTTP+JSON API 的一种设计模式,最初摘录整理自 Heroku 平台的 API 设计指引 Heroku 平台 API 指引. 这篇指南除了详细介绍现有的 API 外 ...

随机推荐

  1. java打包遇到问题java.io.IOException: invalid header field

    问题:java打包时报以下错误 $ jar -cvmf main.txt test.jar Shufile1.class java.io.IOException: invalid header fie ...

  2. 性能检测工具介绍-Linux系统命令行

    本文介绍的关于Linux自带命令进行性能检测的介绍,详细介绍这些linux自带的工具的使用. 一.uptime uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总 ...

  3. DrawingControl控件在Add Page时报故障的问题

    Visio二次开发用到了Drawing Control控件.在控件上添加新页面时,visual编译器报内存保护故障“尝试读取或写入受保护的内存.这通常指示其他内存已损坏.”,这个问题困扰了我很久,最后 ...

  4. 也说面试 - 一个努力的iOS Dev

    你们在金色的余晖中回家,而我却在银色的温柔中,匆匆潜行-----这是我的现状. 今年的招工形式不是很好,难找工作:也难招人.写这篇博客,是为了给各位在找工作的iOS dev 一些参考. 上篇:换坑(去 ...

  5. RHEL 集群(RHCS)配置小记 -- 文档记录

    1.RHEL 6 集群配置官方管理手册 https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/pd ...

  6. DateTools时间插件

    import java.text.DateFormat;import java.text.ParsePosition;import java.text.SimpleDateFormat;import ...

  7. LVM基本概念、管理

    一.传统磁盘管理的问题 当分区大小不够用时无法扩展其大小,只能通过添加磁盘.创建新的分区来扩充空间,但是新添加进来的硬盘是作为独立文件系统存在的,原有的文件系统并未得到扩充,上层应用很多时候只能访问一 ...

  8. SQLServer 脚本测试

    最近在做大数据同步的工作.很少数据需要特殊清洗算法,每次测试,都测试全部数据,浪费时间,可以只测试那些特殊数据即可(切记).

  9. Silverlight 上传文件源代码

    public class FileUploadArgs : EventArgs { public string FileName { get; set; } public Exception Ex { ...

  10. Oracle DB 存储增强

    • 设置Automatic Storage Management (ASM)  快速镜像 再同步 • 使用ASM 首选镜像读取 • 了解可伸缩性和性能增强 • 设置ASM 磁盘组属性 • 使用SYSA ...