Google App Engine可用于“检查更新”并下载二进制文件Web服务吗?

时间:2010-05-30 15:24:01

标签: iphone google-app-engine

我是Google App Engine的新手,非常感谢任何帮助。我有一个iPhone应用程序,它从设备上的sqlite db存储localling中获取数据。

我想设置一个我的iPhone客户端会与之交谈的Google App Engine网络服务,并检查是否需要下载更新版本的sqlite数据库。

因此,iPhone客户端使用某种版本号/时间戳访问Web服务,如果有更新的文件,App Engine将通知客户端,然后客户端将请求新数据库下载App Engine将提供的服务器。

是否可以在Google App Engine中设置网络服务来执行此操作?有人能指出我的任何示例代码/教程吗?

非常感谢

2 个答案:

答案 0 :(得分:5)

我要做的是将SQLite DB保留为数据存储区中的gzip压缩包。使用SHA1哈希作为etag。客户端使用etag标头执行GET请求,服务器响应304 Not Modified或200以及响应正文中的blob内容。

专门针对blob的API,称为Blobstore API,但要使用它,您需要启用计费。如果不启用计费,您仍然可以轻松地提供blob服务,但每个请求,响应和实体大小限制为10MB。如果您的压缩数据库大于此数据库,您可以将下载分解为多个请求,因为您可以控制客户端和服务器代码。仅使用数据存储区的自定义blob处理程序可能如下所示:

class MyModel(db.Model):
  body = db.BlobProperty()

class MyBlobHandler(webapp.RequestHandler):
  def get(self):
    entity_key = self.request.get("entity_key")
    entity = MyModel.get(entity_key)
    self.response.headers['Content-type'] = 'what/ever'
    self.response.out.write(entity.body)
  def put(self):
    entity = MyModel(body=db.Blob(self.request.body))
    entity.put()
    self.response.out.write(entity.key())

答案 1 :(得分:0)

鉴于您正在发出HTTP请求,这完全可以通过App Engine实现。

在我看来,最好的代码和教程是官方Google App Engine docs。你需要的一切都在那里。