前天收到了来自Google Storage的注册邀请信,这才想起来自己在半年之前申请过这玩意儿,无奈当时限制美国境内的开发者申请使用,而且申请周期很长,几个月过去了都没有反应,自己就把这件事给忘了。现在来的虽然有点晚,但是有总比没有强。迟来了,但是自己不能又迟一步,冰泉在初步尝试后第一时间给大家来介绍一下。
先来说说Google Storage吧!从名称上就知道是Google提供的一个数据存储服务,具体说来是Google利用“云”技术提供的一个给应用程序开发人员使用的数据存储服务,数据种类不做限制,而且大小只要未超过用户限额即可。目前Google提供给开发着的配额是100G,每月流量300G,如果大小超标的话服务会停止,直至开发者删除文件或者花钱购买空间,流量同样如此,有点类似与Google App Engine的限制。但是超过100G级别的这种免费配额在任何其他服务商是不可能见到的,作为Google云计算的主要竞争对手Amazon的S3服务却没有这么豪气,只提供了短时间的体验时间。是不是心动了?现在就开始来介绍一下冰泉的使用体验!
Google Storage的域名绑定问题
作为给应用开发人员的服务来讲,自定义域名是自己作品的一个展现,也是一个开放性的特征。虽然在google的各大服务中,自定义域名是标配,Google Storage也不例外。那么如何进行绑定呢?下面来讲一讲具体步骤
首先登录Google Storage manager(Google Storage manager是Google Storage的在线管理UI)https://sandbox.google.com/storage/m/如下图
在这里冰泉已经添加了taiku.net的域名,
如果要添加新的域名需要在顶级域名中
1,在Google webmastershttps://www.google.com/webmasters/verification/
中按照提示验证你对该域名的所有权;
2,在Google Storage中添加名为你自己需要绑定域名的bucket,如冰泉需要绑定的是file.taiku.net则新建file.taiku.net的bucket,注意不带http://;
3,在域名控制面板中添加对于域名的cname记录到 c.commondatastorage.googleapis.com;
4,等待记录生效。
这里给大家一个绑定后的效果
http://file.taiku.net/Matlab%E5%BC%95%E6%93%8E%E8%B0%83%E7%94%A8.doc
Google Storage的管理方式
Google 提供了基于Web的管理工具Google Storage manager和基于客户端的命令行工具gsutil,,但是Google Storage manager不支持IE,并且功能有限,不能改变,不能批量改变授权等,命令行工具gsutil也不能运行在windows平台上,而且操作不是很方便,但是值得高兴的是许多开发者已经开发了基于Google Storage API的管理工具,包括windows,MAC等系统。
- Boto: a Python interface to GS and S3
- CloudBerry: a file manager for Windows
- Cyberduck: a browser for Mac
- Dasein Cloud: an open source Java API
- Data Nucleus: JDO/JPA plug in
- Gladinet: maps network drives and provides AFS support
- gstore: a Ruby client library
- SharpGs: a C# library
下面来补一张冰泉现在使用的CloudBerry界面
Google Storage的API及实例
Google所称的“RESTful interface”并非是指"you can program with the API restfully",no!no!no!验证部分可以把人搞疯掉(下面的演示代码大部分都是为了验证)
这里的"RESTful"指的是一种设计风格(虽然不是一种标准,但是这样理解可能更容易些),因此在开篇我就直接引用了单词“RESTful”。
GS API的实现依赖标准的HTTP方法,诸如如DELETE, GET, HEAD, 还有 PUT,熟悉web service的话应该很容易上手。
废话不多说,下面来看看这个RESTful的API到底是个什么东西。
上文提到了一个概念“用户存储的任何数据(文件)都所属于某个Bucket之下”。
一个用户可以有多个Bucket,但是Bucket的命名是严格限制的。
说到这里Bucket的概念跟Windows里的驱动器盘符就很相似了,要对GS内的数据进行操作(除了创建一个Bucket)首先要知道这个数据的所在的Bucket
因此我们先从列出所有的Bucket开始。
Google的文档告诉我们使用GET Service可以获取所有的Buckets
因此我们按照Google的要求发送一个符合条件的HTTP请求即可。
这个请求有如下头域(header)
- Authorization 验证字符串
- Content-Length HTTP请求内容的长度
- Date HTTP请求的日期
- Host Google Storage服务器的URI
每个header都是必须的
Authorization 这个问题最复杂,等下说
Content-Length 在此例中应该为0,因为发送的HTTP请求只包含若干header,body部分为空
Date 请求发送的日期,看起来很简单但是设置这个Date还真是耗了我不少时间(见代码注释)
Host 确实很简单,Google有提供,一串URI就行了
这就是全部了,发送一个包含这些headers的请求然后等着Google的回应就行了。
从服务器返回的response是一个XML文档,包含所请求的信息,本例中如下图所示:

可以看到,所有Buckets的信息都在里面了,取得了这个XML文档之后进行解析就能得到我们想要的
文章有点长啊!