对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. 启用禁用USB接口

    一个小工具,功能有启用禁用外网.USB接口,可由服务端socket长链接进行操控客户端从而达到实现前边的这些功能,这里贴上核心代码,先给上启用禁用USB接口吧,这个方法可随时启用禁用,之前用过一个改u ...

  2. Java系列学习(七)-面向对象

    1.成员变量和局部变量的区别 (1)在类中的位置不同 成员变量:类中 方法外 局部变量:方法中 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 成员变量:随着对象的创 ...

  3. SublimeText学习(二)-基本操作

    1.查看已安装的插件 看到已经安装的插件,看到了在上一篇中安装的Emmet 2.设置主题与字体 方法一: 方法二: 工具栏中 [Preference-浏览程序包]找到[Default文件夹]-用Sub ...

  4. 单例模式在多线程环境下的lazy模式为什么要加两个if(instance==null)

    刚才在看阿寻的博客”C#设计模式学习笔记-单例模式“时,发现了评论里有几个人在问单例模式在多线程环境下为什么lazy模式要加两个if进行判断,评论中的一个哥们剑过不留痕,给他们写了一个demo来告诉他 ...

  5. python--9、并发之多进程应用

    multiprocessing模块 想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Python提供了multiprocessing.  ...

  6. 笔记《精通css》第4章 背景图像,平铺方式,背景定位,圆角框,投影,不透明

    第4章  背景图像,平铺方式,背景定位,圆角框,投影,不透明 1.背景图像 background-image:url() 2.平铺方式 background-repeat:repeat-x repea ...

  7. React Native状态机和应用设计思路

    React Native状态机和应用设计思路 在原生Android开发中:当用户点击“登录”按钮时,从用户名输入框中读取用户输入的用户名,从密码输入框中读取用户输入的密码,然后交给注册模块去处理.但是 ...

  8. 《Java编程的逻辑》第一部分 编程基础与二进制

  9. 移动web——bootstrap模板

    基本概念 1.bootstrap就是在媒体查询技术出现以后才开始出现的 2.此技术使响应式开发变得十分轻松,最大特点就是栅格系统(什么设备上如何显示)以及响应式工具(是否可见) 基本模板 <!D ...

  10. android studio 控件提示大写

    方法一: 在第一行找到File进入找到setting,找到code completion 右侧复选框 选择-->None—->ok 方法二:<item name="andr ...