Da Twitter heute nicht verfügbar ist, habe ich darüber nachgedacht, wie man Aufrufe einer API am besten behandelt, wenn sie nicht funktioniert. Wenn ich CURL verwende, um ihre API aufzurufen, wie verursache ich, dass das Skript schnell versagt und die Fehler behandelt, um die Anwendung nicht zu verlangsamen?Wie man eine heruntergekommene API elegant behandelt
Antwort
Vielleicht verwenden Sie eine Art Cache, ob Twitter ist nach oben oder unten. Protokollieren Sie ungültige Antworten von der API in einer Datenbank oder serverseitigen Datei. Sobald Sie zwei/drei/einige andere ungültige Antworten in Folge erhalten haben, deaktivieren Sie alle Anfragen an die API für x Zeit.
Nach x Zeit versuchen Sie eine Anfrage, wenn es immer noch inaktiv ist, wieder für x Minuten deaktivieren.
Wenn Ihr Server CRON-Jobs ausführen kann, sollten Sie ein Skript erstellen, das die API alle paar Minuten auf eine gültige Antwort überprüft. Wenn es feststellt, dass es nicht funktioniert, deaktivieren Sie die Anfragen, bis sie wieder verfügbar sind. Zumindest würde in diesem Fall der Server die Tests durchführen, und die Benutzer müssen nicht die Versuchskaninchen sein.
Verwenden curl_setopt
curl_setopt($yourCurlHandle, CURLOPT_CONNECTTIMEOUT, '1'); // 1 second
Wenn Sie curl> = 7.16.2 und PHP> = 5.2.3 gibt es CURLOPT_CONNECTTIMEOUT_MS
Verwenden curl_getinfo die cURL Antwortcode oder Inhaltslänge zu erhalten und überprüfe diese.
$HttpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
Ich habe mich tatsächlich entschieden, mit einer Kombination von zu gehen zurückgegebene Codes und die andere Antwort, einen Chron-Job auszuführen, um den Site-Status zu überprüfen. – Tim
- 1. Wie wird Anmeldetagablauf für einen Ajax-Anruf elegant behandelt?
- 2. Wie man Benutzerregistrierung über API Laravel behandelt
- 3. Wie behandelt man elegant ReturnUrl bei der Verwendung von UrlRewrite in ASP.NET 2.0 WebForms
- 4. Wie man Mariadab elegant herunterfahren kann?
- 5. C++: Wie man dynamische Daten elegant in eine Struktur liest?
- 6. Wie kann man AbandonedMutexException elegant verlassen?
- 7. Wie behandelt man eine Systemwarnmeldung für iOS?
- 8. Wie behandelt man eine Git-Diskontinuität?
- 9. COM: Wie behandelt man eine bestimmte Ausnahme?
- 10. Wie behandelt man Ausnahmen?
- 11. Wie man EOFException behandelt?
- 12. Delphi XE8 behandelt elegant ETetheringException beim Start der Anwendung
- 13. Wie behandelt man System.Data.Entity.Validation.DbEntityValidationException?
- 14. Wie behandelt man nacheinander asynchrone Ergebnisse von API?
- 15. UIManagedDocument - Wie behandelt man UIDocumentStateSavingError?
- 16. Wie behandelt man eine Java-Klasse mit Hunderten von Feldern?
- 17. Wie elegant ich Python-Iteratoren verwenden kann
- 18. Wie behandelt man PHP-Funktionsfehler?
- 19. Wie behandelt man eine 204 Antwort in einer Backbone.js Sammelanfrage
- 20. .NET: Wie man eine JSON Antwort unbekannter Struktur behandelt
- 21. Wie behandelt man das Frontend in Lumen
- 22. java.util.concurrent.CompletionStage - Wie behandelt man Ausnahmen?
- 23. Wie behandelt man Laravel NotFoundHttpException?
- 24. Wie man global time_zone im System behandelt?
- 25. Wie behandelt man findElements Ergebnis?
- 26. Wie man Versprechungen richtig behandelt?
- 27. Wie behandelt die Java Persistance API Binärdaten?
- 28. Wie behandelt man Bilder in Meteor?
- 29. Wie behandelt man Blobdaten in Electron?
- 30. Wie ignoriert man elegant einige Rückgabewerte einer Python-Funktion?
Das einzige Problem ist, dass es nicht in der Lage ist, den Unterschied zwischen einer langsamen Verbindung und einer abgestürzten API zu unterscheiden. –
Würde dies wahr werden, wenn das Zeitlimit überschritten würde? – Tim
Eine fatal langsame Verbindung ist genauso schlimm wie eine heruntergekommene API. Vielleicht sind 3+ Sekunden ein großzügigeres Timeout. – Kekoa