基于安全和性能视角的图片加载接口设计(相册与网盘服务)

背景

移动端app, 对于图片的加载是必不可少的一个需求之一,在我们开发的app中可能对于图片的资源有一定的安全需求,图片的地址是需要app业务服务这边做过签名等机制才允许访问使用,基于这个我们使用阿里云oss的签名方式来使用,服务端将签好名的地址直接图给客户端,即可加载成功,但是这样在客户端场景中使用上还是有一些比较难受的痛点。

1.客户端需要关心图片签名地址的失效时间。
2.图片地址在每次重新获取时,都是不一样的,因此客户端无法做一层本地cache
3.客户端需要不断的去获取新地址,然后再发起加载图片的动作,增加了部分网络消耗

解决方案

简单的流程图
基于安全和性能视角的图片加载接口设计(相册与网盘服务)

我们上传成功后,每个图片都有对应的id
1.通过上边这个流程下来,我们对外提供一个获取缩略图的接口,此接口客户端通过拼接id即可调用,客户端就可以成功加载图片。
2.接口本身是有权限token机制控制,这块需要客户端传递,统一登录获取的,过期可以统一处理。
3.通过这种方式,生成的图片加载地址,同一个图片是不会变的,因此客户端也可以进行cache,大大提升了客户端的加载速度。
4.后端也可以做到对请求的信息的统计,中间可以做很多安全的事情,如对热点数据的统一处理,也可以做一些流量限制的事情。

改造后的对比:

1.开发复杂度上,几乎对于客户端开发同学来说,什么都不需要关心了,只需要关心拼接地址即可。
2.对于客户端来说请求一次即可,并且有了cache,大大降低了流量损耗,提升了近30%的加载效率。
3.节省了图片列表接口返回信息的大小,因为原先的url还是比较长的,列表页返回的response相对多一些。

不足之处

目前的接口仍有不足之处,首先接口必须通过header方式将鉴权信息传进来才可使用, 这个导致前端网页标签方式加载图片无法使用。

上一篇:NumPy Essentials 带注释源码 五、NumPy 中的线性代数


下一篇:书籍:掌握Python的网络和安全 PySpark SQL Recipes_ With HiveQL, Dataframe and Graphframes - 2019.pdf