Wann sollte ich eine Ausnahme auslösen, anstatt einen Fehler in PHP zurückzugeben?

8

Ich arbeite an einer API-Wrapper-Klasse, die ich als erste erstellt habe. Zum größten Teil war es nicht zu schwierig. Ich komme zu dem Punkt, an dem ich mit dem Potenzial von Fehlern umgehen muss, die von der API zurückgegeben werden, egal wie verwirrt ich darüber bin, wie ich mit ihnen umgehen sollte.

Eine externe Datei ruft die API-Klasse auf, zB findVenueByLocationID($locationID); Diese Funktion erstellt dann die URL und die Methode des API-Aufrufs (POST, GET, DELETE usw.) und leitet sie an eine Funktion namens makeCall weiter.

MakeCall erstellt die vollständige URL, sendet die Anforderung an den Dienst und gibt das resultierende XML zurück. Wenn die API einen Fehler zurückgibt, wird sie im XML-Code zurückgegeben. Die URL wird mit der Funktion file_get_contents () aufgerufen. Die API hat eine festgelegte Anzahl von Fehlercodes, die im XML zurückgegeben werden.

Wie ich es verstehe, sollte ich Folgendes während der Funktion makeCall tun:

  • Bevor das XML zurückgegeben wird, prüfen Sie, ob es einen Fehlercode enthält, und wenn dies der Fall ist, übergeben Sie das an eine Fehlerbehandlungsklasse, um den Fehler zu beheben. (Fehlermeldung zur Client-Version melden und zurückgeben)
  • Fügen Sie einen try catch um die Funktion file_get_contents () hinzu, um Verbindungsfehler zu erkennen, dh nicht auf den Server zugreifen zu können?

Ist das der beste Weg, Dinge zu tun? Sollte ich einen Versuch, um den Anruf zu makeCall und nicht in ihr um file_get_contents hinzufügen fangen? Soll ich für jeden Fehler, der vom XML zurückgegeben wird, eine Ausnahme auslösen und sie mit einer Fehlerklasse behandeln?

Die Art von Antwort, nach der ich suche, sollte auch eine Verknüpfung zu einer Ressource enthalten, in der einige bewährte Methoden zur Fehlerbehandlung mit API-Wrappern oder solchen Dingen erläutert werden.

Vielen Dank im Voraus für Ihre Zeit und Ihre Antworten.

BEARBEITEN: Nach dem Gespräch mit unserem CTO sind Fehler in PHP in der aktuellen Version Ausnahmen, und ich sollte Ausnahmen auslösen und den Umgang mit den Ausnahmen dem Aufrufer überlassen. Denken Sie daran, dass ich eine Wrapper-Klasse für eine API implementiere. Gedanken?

    
Relequestual 18.05.2011, 15:03
quelle

1 Antwort

3

Sie sollten zuerst den Unterschied zwischen Ausnahmen und Fehlern kennen: Fehler passieren, Ausnahmen sind außergewöhnlich.

Zum Beispiel bekommt ein Benutzer, der ein falsches Passwort eingibt (kann sich nicht einloggen) einen Fehler. Wenn die Datenbank während der Überprüfung des Kennworts nicht verfügbar ist, erhalten Sie eine Ausnahme (und hoffentlich fehlerfreie Behandlung dieser Ausnahme).

Wenn Sie also XML von einem Dritten erhalten, erwarten Sie wahrscheinlich, dass es gültig ist. Aber es könnte Fehler geben. Wenn die API Ihnen einen Fehler meldet (Standort nicht gefunden), wird es wahrscheinlich auch ein Fehler auf Ihrer Seite sein. Nur in besonderen Fällen (Sie haben einen Ort fest programmiert, von dem Sie sicher wissen, dass er immer da ist), kann dies eine Ausnahme sein.

Die trivialsten Ausnahmen sind die Verbindungsfehler: Dann ist definitiv etwas nicht in Ordnung. Die andere einfache Sache sind Fehler in der API, die Sie erwarten können, wie "keine neuen Informationen" (nur als Beispiel): Dies ist ein interner Fehler. Und irgendwo müssen Sie eine Linie zeichnen, aber in den meisten Fällen ist es klar, was außergewöhnlich ist und was nur ein Fehler ist, der auftreten kann.

    
Nanne 18.05.2011, 16:41
quelle