对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。

libcloud代码研究(二)——云服务封装的更多相关文章

  1. libcloud代码研究(三)——bugs

    Bug 1:对不可迭代类进行迭代(libcloud.storage.driver.cloudfile line. 141-142)      使用libcloud连接自搭建swift服务,自己在服务器 ...

  2. libcloud代码研究(一)——基本架构

    libcloud是apache下整合多种云服务接口的项目.最近,在研究libcloud代码的同时,将阿里云存储(Ali OSS)和百度云存储用libcloud storage driver规范进行封装 ...

  3. dedecms代码研究二

    dedecms代码研究(2)从index开始现在继续,今天讲的主要是dedecms的入口代码.先打开index.PHP看看里面是什么吧.打开根目录下的index.php嗯映入眼帘的是一个if语句.检查 ...

  4. Sql Server数据库备份脚本以及如何在阿里云云数据库RDS还原数据库(代码源自阿里云)

    今天研究阿里云服务数据库的迁移,备份和还原的时候,在阿里云web后台发现了一个很好用的sql脚本,就默默地偷了过来,它可以支持全量备份,差异备份和日志备份,代码解释也都很清楚,我也尝试着跑了一下,性能 ...

  5. [转]在 Azure 云服务上设计大规模服务的最佳实践

    本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...

  6. 如何在Azure上创建和部署云服务

    Azure 管理门户提供两种方法可用来创建和部署一个云服务:快速创建和自定义创建. 本主题说明如何使用快速创建方法来创建新的云服务,然后使用上传来上载和部署一套在 Azure 的云服务.当您使用此方法 ...

  7. Windows Azure -Azure 网站、云服务和虚拟机的对比

    Azure 网站.云服务和虚拟机对比 概述 Azure提供了几种方法来承载网站: Azure网站.云服务和虚拟机.本文帮助您了解选项和为您的Web应用程序做出正确选择. Azure网站是大多数web应 ...

  8. Bmob移动后端云服务平台--Android从零開始--(二)android高速入门

    Bmob移动后端云服务平台--Android从零開始--(二)android高速入门 上一篇博文我们简介何为Bmob移动后端服务平台,以及其相关功能和优势. 本文将利用Bmob高速实现简单样例,进一步 ...

  9. 【Azure 云服务】在Cloud Service的代码中如何修改IIS Application Pool的配置呢? 比如IdleTimeout, startMode, Recycling.PeriodicRestart.Time等

    什么是 PaaS?Platform as a Service 平台即服务 (PaaS) 是云中的完整开发和部署环境,你可以使用其中资源交付内容,从基于云的简单应用到启用云的复杂企业应用程序皆可.你以即 ...

随机推荐

  1. allonsy

    时间限制 1s 空间限制 512MB 2.1 题目描述 "Allons-y!" 时间还算足够,好好看看题吧. 有一种说法,时间线是扭曲的,会相互交织.(一般在科幻片里比较流行?) ...

  2. POJ 1273 Drainage Ditches 最大流

    这道题用dinic会超时 用E_K就没问题 注意输入数据有重边.POJ1273 dinic的复杂度为O(N*N*M)E_K的复杂度为O(N*M*M)对于这道题,复杂度是相同的. 然而dinic主要依靠 ...

  3. JSP-Runoob:JSP 指令

    ylbtech-JSP-Runoob:JSP 指令 1.返回顶部 1. JSP 指令 JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言. 语法格式如下: <%@ direc ...

  4. Spark SQL读parquet文件及保存

    import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.{Row, SparkSession} im ...

  5. 38. ExtJS学习(四)EditorGrid可编辑表格

    转自:https://blog.csdn.net/qq_30739519/article/details/50865060

  6. Android 数据库

    官方文档:https://developer.android.com/training/basics/data-storage/databases.html#WriteDbRow 原帖:http:// ...

  7. scrapy xpath中提取多个class值

    xpath中没有提供对class的原生查找方法.但是 stackoverflow 看到了一个很有才的回答: This selector should work but will be more eff ...

  8. 【WIP】Ruby CSV文件操作

    创建: 2017/09/30                                                                                       ...

  9. switchhosts+fiddler app抓包

    1.先去switchhosts和fiddler官网下载并安装 2.打开switchhosts,添加要切换的环境(ip地址) 3.打开fiddler,一定要能抓https包 4.查找本地IP地址,cmd ...

  10. PKUSC2017 游记 密码:blog密码

    退役之前,写点破事乐呵乐呵 省选滚大粗   报了PKU和THU的SC  果然THU直接审核不通过... 于是就来到了PKU   滚粗狗就又续命几天. Day1 上午考数学 喜闻乐见啥都不会 出来一对题 ...