如何写SDK用JavaScript

JavaScript015

如何写SDK用JavaScript,第1张

首先,sdk是为开发者提供一套具有相应功能的包(package)。是一组功能的集合。

要求一般如下:

1、尽量不要依赖第三方库,如jquery。当然,如果你要实现即时通讯的sdk,那么可以适当引用socket.io这个lib。但是不能把整个socketio都装进去,因为你是sdk,需要考虑代码体积、执行效率和内存等问题。只能说在不必要的情况下尽量避免引用第三方库。

2、可以让其它包管理工具方便的引入。

3、健壮性,尽量要少暴露全局变量。如假设你的sdk有个全局变量a,其他人也用了这个变量名a。那么是不是你的sdk就会崩溃。

4、动态加载。加入你的sdk内部需要引用其它的一些库。那么可以尝试使用动态加载。这样不仅可以减少包的体积,还可以增加执行效率。

5、sdk在浏览器中的兼容性的问题。

6、易用性,这个就涉及到API的设计,以及如何调用的问题。

7、快速响应。如果你发布的sdk有bug,那么得立马修补bug。怎么让所有的用户尽快使用你修改后的sdk。

大概就这么多,当然还与其它很多需要注意的地方。这里就不一一列举了

场景:

    在实际开发中,需要将后端接口封装成sdk,可供前端直接调用,接口可实现页面跳转等

实际运用:

    实际开发中,前端项目时基于node的项目,需要重新封装一层后端接口,并实现页面的可配置化跳转。

    实际调试中,注意node版本,版本不同,差异很大。我本地试的v8.9.4版本

    1.node中获取请求参数两种方式:

        req.body获取post请求参数,req.query获取get请求参数,req.params获取get请求参数,url中直接拼接参数的那种,如 http://localhost:8080/1

req.params["id"]获取的就是1

    2.sdk提供post和get两种方式,需要校验origin &referer

    其中origin是post方式独有的,origin显示页面的来源,包含协议和domain(根域地址),不包含具体的路径地址,不会包含用户的敏感信息,相比referer更安全,可防止CSRF攻击,一般存在于CORS跨域的请求中,response中可查看到Access-Control-Allow-Origin

    referer存在于get和post请求中,告知服务请求方的原始资源的URI,包括协议+根域+参数,因为参数可能包含些敏感信息,可能会导致信息泄露

    因此在模拟测试post请求时,而且需要origin时,并且需要测试页面跳转时,可模拟表单请求的方式来进行测试

    在模拟get请求时可通过a标签,设置好href为调用地址即可

    3.因为是登录的场景,需要写入登录状态,而且涉及到B端账户和C端账户的关联关系,因此需要将登录态写入到cookie中,而且因为有页面的跳转,因此要做到cookie的跨域传递(一般是根域情况下,默认跳转的时候自动传递过去)

    node在设置cookie的时候可通过以下方式来设置:

    单个cookie:

    res.setHeader("set-cookie", `aticket=${aticket}path=/HttpOnlyDomain=${domain}expires=${expires}`)

    多个cookie设置:

    res.setHeader("set-cookie", [`aticket=${aticket}path=/HttpOnlyDomain=${domain}expires=${expires1}`,`bticket=${bticket}path=/HttpOnlyDomain=${domain}expires=${expires2}`])

    默认在跳转的时候,根域相同的情况下,cookie是可以传递过去的。如果是不同的根域,就需要自己写一层代理,将cookie写入到目标域中即可。

    4.跳转的时候url设置时,需将url通过encodeURIComponent进行编码,然后通过decodeURIComponent即可