我是Google App Engine的新手,非常感谢任何帮助。我有一个iPhone应用程序,它从设备上的sqlite db存储localling中获取数据。
我想设置一个我的iPhone客户端会与之交谈的Google App Engine网络服务,并检查是否需要下载更新版本的sqlite数据库。
因此,iPhone客户端使用某种版本号/时间戳访问Web服务,如果有更新的文件,App Engine将通知客户端,然后客户端将请求新数据库下载App Engine将提供的服务器。
是否可以在Google App Engine中设置网络服务来执行此操作?有人能指出我的任何示例代码/教程吗?
非常感谢
答案 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。你需要的一切都在那里。