js SDK 设计指南(转载)

js SDK 设计指南

http://blog.csdn.net/hel613/article/details/51680611 git flow 分支模型 版本发布管理 文档生成

jsSDK 工程构建
单元测试

1:设计规范

2:了解实现细节

3:编写mock环境

4:编码

整个jssdk的设计有一下几个核心问题:

  • 代码如何被使用页面接入
  • 如何实现跨域通信
  • 如何实现优雅api的设计
  • 公共资源的使用
  • 代码组件化

代码如何被使用页面接入

这个问题涉及到几个小问题需要讨论:

  • 命名空间. 动态的命名空间,在url中带上namespace=xxx
  • 样式冲突
  • 版本维护
  • appid等参数的传入

命名空间

动态的命名空间,在url中带上namespace=xxx

样式冲突

利用sass、less这些预编译语言很容易

例如下面的代码:

$name: avUI;

.#{$name}__dialog{

@include reset();

.#{$name}__dialog__header{

    color: white;

}

} 怎样制作高质量的更新日志?

指导原则

  • 记住日志是写给人的,而非机器。
  • 每个版本都应该有独立的入口。
  • 同类改动应该分组放置。
  • 版本与章节应该相互对应。
  • 新版本在前,旧版本在后。
  • 应包括每个版本的发布日期。
  • 注明是否遵守语义化版本格式.

变动类型

  • Added 新添加的功能。
  • Changed 对现有功能的变更。
  • Deprecated 已经不建议使用,准备很快移除的功能。
  • Removed 已经移除的功能。
  • Fixed 对bug的修复
  • Security 对安全的改进

如何减少维护更新日志的精力?

在文档最上方提供** Unreleased **区块以记录即将发布的更新内容。

这样有两大意义:

  • 大家可以知道在未来版本中可能会有哪些变更
  • 在发布新版本时,可以直接将Unreleased区块中的内容移动至新发 布版本的描述区块就可以了

有很糟糕的更新日志吗?

当然有,下面就是一些糟糕的方式。

使用git日志

使用git日志作为更新日志是个非常糟糕的方式:git日志充满各种无意义的信息, 如合并提交、语焉不详的提交标题、文档更新等。

提交的目的是记录源码的演化。 一些项目会清理提交记录,一些则不会。

更新日志的目的则是记录重要的变更以供最终受众阅读,而记录范围通常涵盖多次提交。

无视即将弃用功能

当从一个版本升级至另一个时,人们应清楚(尽管痛苦)的知道哪些部分将出现问题。 应该允许先升级至一个列出哪些功能将会被弃用的版本,待去掉那些不再支持的部分后, 再升级至把那些弃用功能真正移除的版本。

即使其他什么都不做,也要在更新日志中列出derecations,removals以及其他重大变动。

易混淆的日期格式

在美国,人们将月份写在日期的起始(06-02-2012对应2012年6月2日), 与此同时世界上其他地方的很多人将至写作2 June 2012,并拥有不同发音。 2012-06-02从大到小的排列符合逻辑,并不与其他日期格式相混淆,而且还 符合ISO标准。因此,推荐在更新日志中采用使用此种日期格式。

常见问题

是否有一个标准化的更新日志格式?

并没有。虽然GNU提供了更新日志样式指引,以及那个仅有两段长的GNU NEWS文件“指南”, 但两者均远远不够。

此项目意在提供一个 更好的更新日志惯例 所有点子都来自于在开源社区中对优秀实例的观察与记录。

对于所有建设性批评、讨论及建议,我们都非常 欢迎。

更新日志文件应被如何命名?

可以叫做CHANGELOG.md。 一些项目也使用 HISTORY、NEWS或RELEASES。

当然,你可以认为更新日志的名字并不是什么要紧事,但是为什么要为难那些仅仅是 想看到都有哪些重大变更的最终用户呢?

对于GitHub发布呢?

这是个非常好的倡议。Releases可通过手动添加发布日志或将带 有注释的git标签信息抓取后转换的方式,将简单的git标签(如一个叫v1.0.0的标签) 转换为信息丰富的发布日志。

GitHub发布会创建一个非便携、仅可在GitHub环境下显示的更新日志。尽管会花费更 多时间,但将之处理成更新日志格式是完全可能的。

现行版本的GitHub发布不像哪些典型的大写文件(README, CONTRIBUTING, etc.),仍可以认为是不利于最终用户探索的。 另一个小问题则是界面并不提供不同版本间commit日志的链接。

更新日志可以被自动识别吗?

非常困难,因为有各种不同的文件格式和命名。

Vandamme 是一个Ruby程序,由 Gemnasium 团队制作,可以解析多种 (但绝对不是全部)开源库的更新日志。

那些后来撤下的版本怎么办?

因为各种安全/重大bug原因被撤下的版本被标记'YANKED'。 这些版本一般不出现在更新日志里,但建议他们出现。 显示方式应该是:

0.0.5 - 2014-12-13 [YANKED]

[YANKED] 的标签应该非常醒目。 人们应该非常容易就可以注意到他。 并且被方括号所包围也使其更易被程序识别。

是否可以重写更新日志?

版本维护使用“主版本.小版本.补丁号”这种有语义的命名方式管理版本。

v1.0.0
v1.5.0
v2.0.0
这样的版本号让使用者容易在changelog文档中跟综和查找。

添加新特性。对现有功能的变化(改变)。(弃用)once-stable特性在以后的版本中删除。(删除)弃用功能在本版本中删除。(固定的)任何bug修复。[安全]邀请用户升级的漏洞。

版本维护的目的是保证代码最新,功能最全,而不用每次做了升级,通知所有使用的第三方开发者把自己页面的代码挨个更换。两种比较好的方式:

  • 小拖大,动拖静:即第三方引入的js是一个动态的,或者没有缓存没有cdn的,然后由它带出后面的cdn
  • 隔段时间动态创建script

推荐使用「小拖大,动拖静」,后面介绍组件化也要使用这个方式来按需加载代码

小拖大,动拖静

(function(){

.....

var url = '最新版本cdn的地址';

load(url);

}())

隔段时间动态创建****script

(function () {

var s = document.createElement('script');

s.type = 'text/javascript';

var t = +new Date;

t -= %864E5;

s.src = 'http://xxx.com/sdk.js?t='+t;

var x = document.getElementsByTagName('script')[0];

x.parentNode.insertBefore(s, x);

** }**)(); appid等参数的传入

一般在引入sdkjs代码的时候需要加参数或者版本号,比如开放平台需要配置appid,所以url写法是: sdk.js?appid=xxxx&namespace=xxx 。jssdk需要拿到url中的这些参数,方法有以下两种比较通用的:

  • 给script标签增加特殊属性,例如<script src="path/sdk.js?appid=123" id="_jssdk">
  • 使用查找script标签方式:
    //get url args function
    function parserUrl(){
    var scripts = document.getElementsByTagName("script"),
    len = scripts.length,
    url;
    if (len > 0) {
    for (var i = 0; i < len; i++) {
    if (scripts[i].src.indexOf("path/to/sdk.js") !== -1) {
    return scripts[i].src.split("?").pop();
    }
    }
    }
    }

所以appidnamespace这些都可以解析出来如何实现跨域通信

对于不在一个域名下的第三方页面引入的jssdk少不了的是跨域请求,这块移动上可以直接使用postMessage方法,将来可以使用xhr2+CORS,相兼容IE,参考《三水清跨域tag

如何实现优雅api的设计

这里的api指的是开放平台提供的http接口,一般都会有一些标准的规范,比如:

我们设计这个函数接口的时候,应该充分考虑到将来server接口的增加,所以应该做成通用的服务,比如我们设计个sdkjs.api方法,接受四个参数:url\data\callback\method,默认如果data是函数就后面参数自动前提。

api: function(url, data, callback, method) {

var _args = $.toArray(arguments),

    _callback = _args[2] || $.emptyFn;

if (_args.length < 3) {

    throw Error("api arguments length wrong");

}

if (!$.isString(_args[0]) || !$.isObject(_args[1]) || !$.isFunction(_callback)) {

    throw Error("api arguments format error");

}

var _cbid = 0;

if ($.isFunction(_callback)) {

    _cbid = _CallbackManager.add(_callback);

}

//跨域发起请求

xDomain.send("api", {

    url: _args[0],

    data: _args[1],

    method: _args[3] || "get",

    _cbid: _cbid

});

return back;

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 去年有段时间得空,就把谷歌GAE的API权威指南看了一遍,收获颇丰,特别是在自己几乎独立开发了公司的云数据中心之后...
    骑单车的勋爵阅读 20,524评论 0 41
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,849评论 0 5
  • (摄影器材:手机) 几天前,又一场春雪悄悄降临。山巅浮白,山下清寒。我忽然想起远处山脚下的那片杏花,上次路过那里的...
    浣月楼阅读 517评论 8 8
  • 南岸区拍的渝中区,去的三天里没有一天是晴天.................... 这一刻,在重庆。 去重庆,都是...
    王粉荣阅读 396评论 3 4
  • 一把油纸伞醉了整个江南 一声沙扬娜拉温柔了一个国度 一阵达达的马蹄声犯了美丽的错误 丁香一样惆怅的姑娘 永远走不出...
    笑本能的骄傲阅读 341评论 1 4