libcloud代码研究(二)——云服务封装

对Ali OSS和百度云存储的封装
     先在libcloud.storage.provider文件中添加Ali OSS provider和Baidu provider,在DRIVERS中添加如下代码:
          Provider.ALI_OSS:
          ('libcloud.storage.drivers.ali_oss','OSSStorageDriver'),
          Provider.BAIDU:
          ('libcloud.storage.drivers.baidu','BCSStorageDriver')
 
     然后,在libcloud.storage.drivers中编辑文件ali_oss.py和baidu.py,在其中分别定义相应的Response、Connection和对应的StorageDriver类即可。
     Ali OSS 接口规范清晰,完全依照Amazon S3式规范,故可以直接继承S3相应类实现。具体方法可参照google storage封装实现。
     相反,百度云存储的接口规范就不那么清晰了,它更像是S3和CloudFiles两种风格的杂糅,返回信息格式为JSON,认证方式却是请求签名,逻辑结构也是Bucket + Object。
     对百度云存储(BCS)访问接口的封装,BCSResponse类直接继承自JsonResponse,其中重定义success()函数即可,BCSRawResponse类直接继承自BCSResponse和RawResponse。BCSConnection类继承自ConnectionUserAndKey,其中依照BCS签名算法(http://developer.baidu.com/wiki/index.php?title=docs/cplat/bcs/access/signed-url)定义签名计算函数_calculate_signature(),并重定义pre_connect_hook()、connect()和request()函数。BCSStorageDriver类继承自StorageDriver,参数设置中注意将支持分块编码设为False,即不支持。在对诸多RESTful风格接口封装过程中,可参照CloudFiles代码,但要注意操作成功和失败BCS返回的状态码和CloudFiles截然不同,并且有时仅凭状态码无法判断具体错误原因,还需要借助返回error信息。封装过程中越来越感觉BCS不成熟(http://developer.baidu.com/wiki/index.php?title=docs/cplat/stor/api#.E7.AD.BE.E5.90.8D.E7.AE.97.E6.B3.95)。
 
  今天刚刚发现,百度也仿照阿里云,对外发布了多种云服务,其中对象存储服务名为BOS。下一步考虑封装BOS,替换掉我认为极不成熟的BCS。
原文地址:https://www.cnblogs.com/qiyukun/p/4754163.html