2 Stimmen

Kann Google App Engine für den "Check for Updated" und den Download von Binärdateien als Webdienst verwendet werden?

Ich bin ein Google App Engine Neuling und wäre für jede Hilfe dankbar. Ich habe eine iPhone-App, die Daten aus einer lokal auf dem Gerät gespeicherten sqlite-DB bezieht.

Ich möchte einen Google App Engine-Webdienst einrichten, mit dem mein iPhone-Client kommuniziert und überprüft, ob es eine neuere Version der sqlite-Datenbank gibt, die heruntergeladen werden muss.

Der iPhone-Client greift also mit einer Art Versionsnummer/Zeitstempel auf den Webdienst zu und wenn eine neuere Datei vorhanden ist, benachrichtigt die App Engine den Client, der dann die neue Datenbank zum Herunterladen anfordert, die die App Engine bereitstellt.

Ist es möglich, einen Webdienst in der Google App Engine einzurichten, um dies zu tun? Könnte mich jemand bitte auf Beispielcode/Tutorials verweisen?

Vielen Dank

5voto

Drew Sears Punkte 12732

Was ich tun würde, ist die SQLite-DB als komprimierten Blob im Datenspeicher zu belassen. Verwenden Sie den SHA1-Hash als Etag. Der Client sendet eine GET-Anfrage mit dem Etag-Header, und der Server antwortet entweder mit einem 304 Not Modified oder einem 200 und den Blob-Inhalten im Antwortkörper.

Es gibt eine spezielle API für Blobs, die Blobstore API genannt wird, aber um sie zu verwenden, müssen Sie die Abrechnung aktiviert haben. Ohne Aktivierung der Abrechnung können Sie immer noch leicht Blobs bereitstellen, sind jedoch auf 10 MB pro Anfrage, Antwort und Einheitsgröße begrenzt. Wenn Ihre komprimierte Datenbank größer ist als das, könnten Sie theoretisch den Download in mehrere Anfragen aufteilen, da Sie sowohl den Client- als auch den Servercode kontrollieren. Ein benutzerdefinierter Blob-Handler, der nur den Datenspeicher verwendet, könnte so aussehen:

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'] = 'was/auch/immer'
    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())

0voto

Joseph Salisbury Punkte 1897

Dies ist mit App Engine problemlos möglich, vorausgesetzt, dass Sie HTTP-Anfragen senden.

Meiner Meinung nach sind der beste Code und die besten Tutorials die offiziellen Google App Engine-Dokumente. Alles, was Sie benötigen, finden Sie dort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X