Fallback, wenn die transiente API fehlschlägt

Ich versuche herauszufinden, wie ich ein Problem mit Drittanbieter-APIs (OG, Foursquare, Yelp usw.) am besten lösen kann. Ich verwende die transiente API, um die verschiedenen Daten aufzurufen und zu speichern, um:

  1. Überschreiten Sie keine API-Grenzwerte
  2. Ladegeschwindigkeit erhöhen

Das Problem tritt jedoch auf, wenn ein neuer API-Aufruf aus irgendeinem Grund fehlschlägt. entweder gab es ein Problem mit der Verbindung, oder die API selbst war down (Hallo foursquare). Dies führt zu einem Szenario, in dem Sie keine neuen Daten haben und die alten Daten abgelaufen sind (was im Wesentlichen das Auslösen einer neuen Transiente ist). Wie gehst du mit solchen Situationen um?

Die Lösung, die ich mir vorgenommen habe, ist das Erstellen einer statischen Option innerhalb der Refresh-function, die eine erfolgreiche Antwort speichert oder die letzte erfolgreiche Antwort auf einen Fehler anzeigt, zum Beispiel:

status == 'error' ) { $response = get_option( 'fallback_data' ); } else { update_option( 'fallback_data', $response ); } return $response; } ?> 

Macht das Sinn, oder hat jemand eine elegantere Lösung im Sinn?

Vielen Dank!

Solutions Collecting From Web of "Fallback, wenn die transiente API fehlschlägt"

Mark Jaquith hat eine “TLC-Transienten” -Methode erstellt, die Sie vielleicht nützlich finden. Im Wesentlichen implementiert es eine transiente Schnittstelle, die eine weiche Ablauf- und Hintergrundaktualisierung durchführt.

https://github.com/markjaquith/WP-TLC-Transients

Die Idee ist, dass Sie eine function definieren, um den Aufruf auszuführen, der die Daten erhält, definieren Sie dann die Transiente und übergeben Sie sie als callback. Wenn Sie diesen Aufruf ausführen, erhält er die Daten bei Bedarf und gibt sie zurück, wobei er für den definierten Zeitraum in einem Transienten gespeichert wird. Die “sanfte” Aktualisierung bedeutet, dass die zwischengespeicherten Daten immer sofort zurückgegeben werden und die Aktualisierung im Hintergrund (mit einem wp-cron-Job) nach der Tat erfolgt.

Dies hätte auch den Vorteil, dass immer die “alten” Daten zurückgegeben werden, bis eine erfolgreiche Aktualisierung erfolgt. Die Art, wie dies von seinem Code gehandhabt wird, besteht darin, dass Sie Ihre Callback-function veranlassen, eine Exception auszulösen, wenn das Abrufen der Daten aus irgendeinem Grund nicht erfolgreich ist.

Sie können einen weiteren Transienten bei Erfolg mit einem langen Timeout setzen. Wenn das erste mal abbricht und Sie einen Fehler bekommen, haben Sie Ihre Backup-Transienten. Wenn es einen Erfolg gibt, werden beide Transienten aktualisiert.

Es ist ähnlich wie deine Idee, also denke ich, dass du in beide Richtungen gehen kannst.

Ich tendiere dazu folgendes zu tun:

1) Generieren Sie die Daten für ein Back-End-Ereignis oder einen Zeitplan. Der Transient ist so eingestellt, dass er VIEL länger dauert als der, den ich erwarte, dass er aktualisiert wird. Ich “back-up” auch die Daten mit add_option während add_option die Option nicht add_option einstelle. Wenn der API-Aufruf fehlschlägt, setze ich die Daten nicht erneut und die alten Daten werden nicht berührt.

2) Im Display auf Transienten prüfen. Wenn der Übergang vorhanden ist, zeigen Sie ihn an. Wenn nicht, ziehen Sie es aus der Option, zeigen Sie es an und legen Sie es dann im Cache ab, damit zukünftige Anforderungen aus dem Cache abgerufen werden. Ich benutze diese Methode, weil manchmal in Memcached-Umgebungen die Transienten entfernt werden. Anstatt die schwere Anfrage erneut auszuführen, kann ich die Daten aus der Option ziehen.