[TYPO3-german] Caching von Webserviceantworten

Stephan Schuler Stephan.Schuler at netlogix.de
Mon Aug 14 18:24:21 CEST 2017


Hallo Fabian.

>  Aber wie mache ich es dann? Ich muss ja irgendwie aus der XML-Antwort meine Objekte basteln, über die ich dann im Fluid Template iteriere und die Tabellen zusammensetze.

Das ist genau der Punkt. Du wirst also erst in einem „findAll()“ alle Objekte aus der Datenbank holen. Dann lässt Du Dir über den SOAP-Request alle XMLe geben. Jetzt kannst Du in einer geschachtelten Schleife über beide drüber iterieren und prüfen welche zu aktualisieren sind, welche neu zu erstellen und welche zu löschen. Das kostet Dich natürlich erstens ganz massiv RAM. Und zweitens musst Du das reine Synchronisations-Hilfsmittel „tstamp“ als Property Deines Models mappen – obwohl der tstamp überhaupt nichts mit Deiner Domäne zu tun hat. Der gehört da also schlicht nicht hin. Du bläst damit Deine Domäne also mit „Kram“ auf.

Dann kommt alles mit Repository->add(), Repository->update() oder Repository->delete() in die Datenbank, und unter Umständen musst Du dann ein „persistAll()“ aufrufen damit ein anschließender Filter-Query auch wirklich die aktualisierten Daten aus der Datenbank bekommt. Ohne das persistAll() werden die Persistenzoperationen durchgeführt, *nachdem* die Action erfolgreich durchlaufen wurde. Ein „findByIrgendwas()“ innerhalb der Action wenn in den ersten Zeilen der Action neue Daten in die Datenbank gekommen sind wird diese neuen Daten sonst nicht finden.

Wenn Du jetzt noch „updateoptimiert“ z.B. ein Plugin hast das nur die Daten von 2017 haben möchte, ein weiteres Plugin das nur die Daten einer bestimmten Kategorie aber dafür zeitunabhängig haben möchte und ein drittes Plugin das alle Daten sortiert nach Titel dafür mit Pagination anzeigen soll. Dann tust Du Dir schon schwer, wirklich sinnvoll auf Basis einer solchen Teilmenge zu ermitteln, welche deiner lokalen Daten gelöscht werden sollen oder welche neu sind. Das heißt Du musst für jede Plugin-Filter-Teilmenge sowohl den Extbase-Query als auch die SOAP-Anfrage so hin optimieren, dass sie die exakt identischen Werte liefern. Andernfalls legst Du Daten an die es schon gibt (wenn sie von Deinem Extbse-Query ausgefiltert wurden aber über SOAP kommen) oder löchst Daten die Du eigentlich noch brauchst (wenn der Extbase-Query zu lasch war und mehr Datenliefert als Du anzeigen möchtest).

Sobald Du jetzt die Logik was eigentlich wirklich angezeigt werden soll noch den Redakteur überlässt. Denk wieder an News. Filter nach Kategorie, mehrere Kategorien AND- oder OR-Verknüpft, Kategoriefilter negiert, absteigend oder aufsteigend sortiert, beschränkt auf Datum. All diese Optionen kann der Redakteur im News-Plugin selbst wählen.
Und jetzt bau das mal als SOAP-Anfrage nach, damit sie im Frontend zum Synchronisationszeitram zu 100% auf den vom Redakteur gewählte Extbase-Filter-Query passt.

⇨ Sync zur Laufzeit erzeugt einen wahnsinnigen Kraut-und-Rüben-Code, bläst Dein Model auf und kostet RAM im Web-Request.

> Leider liefert der Webservice kein Änderungsdatum o.Ä. an dem ich entscheiden könnte, ob aktualisieren, nicht aktualisieren oder löschen. Bleibt also nichts Anderes übrig als lokal zu entscheiden mittels timestamp, oder?

Wenn Dir der SOAP-Request keine Verändungsinformationen gibt, also weder eine Objekt-Version noch ein Änderungsdatum, dann kannst Du überhaupt nichts entscheiden. Dann musst Du wohl oder übel das Objekt speichern wenn Du es bekommst.

> Da hast du natürlich recht. Ich werde also die getrennte Lösung per Scheduler vorziehen.

Ich würde wirklich genau einen einzigen Sync-Durchlauf per Scheduler machen der das komplette Model lokal aufbaut. Anschließend kannst Du in Deinem lokalen Model noch filtern und sortieren wie Du lustig bist. Kein Filter, keine Sortierung.
Der Scheduler-Durchlauf muss auch überhaupt nicht mit Extbase arbeiten. Mindestens die Datenmanipulation kann – gerade wenn es möglicherweise viele Daten sind – auch einfach durch den DataHandler passieren.

Beste Grüße,


Stephan Schuler
Web-Entwickler | netlogix Web Solutions

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Web: websolutions.netlogix.de



----------------------------
Neu: Wir sind Amazon Web Services Partner. Mehr erfahren:
https://websolutions.netlogix.de/technologie/amazon-web-services-aws
----------------------------




netlogix GmbH & Co. KG
IT-Services | IT-Training | Web Solutions
Neuwieder Straße 10 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Web: http://www.netlogix.de

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Matthias Schmidt





More information about the TYPO3-german mailing list