对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. PCB Winform中的WebBrowser扩展拖放(拖拽)功能 实现方法

    我们在Winform支持网页通常增加WebBrowser控件实现,相当于内嵌浏览器浏览网页使用, 而此WebBrowser默认情况是文件拖入功能是不支持的, 如何才能支持呢.在这里介绍如何实现方法 一 ...

  2. 9.22 NOIP模拟题

    吉林省信息学奥赛 2017 冬令营                                                                                    ...

  3. http通讯基础

    1 . 一个网页包括 JS  CSS Html 2 . 状态码:200  正常   302  临时重定向 (类似呼叫转移) 304  未修改,客户端缓存的信息是最新的,无需到服务器重新获取 403  ...

  4. 你真的知道GET和POST两种基本请求方法的区别吗?

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

  5. jmeter中beanshell断言的使用

    简单使用beanshell的内容,进行测试内容的判断 这里通过断言内容,修改if的条件,达到发送警报邮件的功能 beanshell 代码如下:     SampleResult 等效于 prev lo ...

  6. 对于民科吧s5_or吧友自增树的复杂度计算

    原帖 自增树如s5_or所说,是一种思想像Splay的数据结构,每个节点维护一个堆权值,每当询问一个节点时,堆权值++,并返回时维护堆权值为堆的性质.这个树从旋转次数上比Splay小是肯定的,因为Sp ...

  7. const修饰规则 及其 用法

    const指针和指向const变量的指针,在写法上容易让人混淆,记住一个规则:从左至右,依次结合,const就近结合. 比如,int * const p: 1.int * (const p):变量p经 ...

  8. [转]Linux finger命令

    转自:http://os.51cto.com/art/201003/186354.htm Linux finger命令是系统管理员的必备命令之一,他可以清楚的告诉管理员有多少用户在同时使用他所管理的L ...

  9. C#图片辅助类,形成缩略图

    完善一下别人的方法,成自己好用的工具 using System.Drawing; using System.Drawing.Imaging; namespace GXNUQzzx.Tools.Util ...

  10. 实现X*N

    #include<iostream> using namespace std; double foo(int n,double x) { if(1==n) { return x; } el ...