4 Stimmen

Null zurückgeben oder ein weiteres Mal eine Ausnahme auslösen

Ich habe bereits nach einer Antwort auf diese Frage gesucht und die folgenden Vorschläge gefunden:

  1. Wenn Sie immer erwarten, einen Wert zu finden, dann werfen Sie die Ausnahme, wenn er fehlt. Die Ausnahme würde bedeuten, dass es ein Problem gab. Wenn der Wert fehlen oder vorhanden sein kann und beide Werte für die Anwendungslogik gültig sind, geben Sie null zurück.
  2. Lösen Sie nur dann eine Ausnahme aus, wenn es sich wirklich um einen Fehler handelt. Wenn erwartet wird, dass das Objekt nicht existiert, geben Sie null zurück.

Aber wie soll ich sie in meinem (so beiläufigen) Fall interpretieren: Mein Web-App-Controller erhält eine Anfrage, um Details für einen Benutzer mit einer bestimmten ID anzuzeigen. Controller bittet die Service-Schicht, den Benutzer zu erhalten, und dann der Dienst gibt das Objekt, wenn es gefunden wird. Wenn nicht, wird eine Umleitung zum "Standard"-Standort ausgegeben.

Was sollte ich tun, wenn jemand eine ungültige Benutzerkennung in der Anfrage-URL angibt? Soll ich es als "erwartetes Verhalten" betrachten und null an den Controller zurückgeben, oder soll ich es vielleicht als "Problem oder unerwartetes Verhalten" bezeichnen und damit eine Ausnahme in der Servicemethode auslösen und im Controller abfangen?

Technisch gesehen ist der Unterschied gar nicht so groß, aber ich möchte es richtig machen, indem ich die Standardkonventionen einhalte. Vielen Dank im Voraus für alle Vorschläge.

EDIT: Ich gehe davon aus, dass die von der App generierten URLs gültig und vorhanden sind - wenn der Benutzer darauf klickt, sollte der Benutzer mit einer bestimmten ID gefunden werden. Ich möchte wissen, wie man mit einer Situation umgeht, in der ein Benutzer versucht, eine URL mit einer falschen (nicht vorhandenen) Benutzerkennung aufzurufen, indem er die URL manuell in die Adressleiste des Browsers eingibt.

4voto

Péter Török Punkte 111735

Wenn ich Sie richtig verstehe, kommt die Anfrage mit der Benutzer-ID von einem Client (außerhalb Ihrer Kontrolle). Nach den von Ihnen zitierten Faustregeln ist eine ungültige Benutzereingabe ein durchaus zu erwartender Fall, der keine Ausnahme erfordern würde, sondern eine elegante Behandlung des Nullwerts durch Rückgabe einer entsprechenden Fehlermeldung an den Client.

(OTOH, wenn die Benutzerkennung in der Anfrage automatisch von einer anderen Anwendung generiert wurde / aus der DB usw. kommt, wäre eine ungültige Benutzerkennung unerwartet, so dass eine Ausnahme angemessen wäre).

0voto

Sanjay T. Sharma Punkte 22330

Mein persönlicher Vorschlag wäre, die Fehlerdetails zu protokollieren (IP-Adresse, ungültige Benutzerkennung) und den Benutzer auf eine Fehlerseite umzuleiten, auf der steht, dass ein Fehler aufgetreten ist und die Administratoren benachrichtigt wurden. Klicken Sie auf den Link so-n-so, um zu Ihrer Homepage zurückzukehren usw.

Der Punkt ist, ob Sie eine Ausnahme auslösen oder eine null Stellen Sie einfach sicher, dass der äußerste Filter oder Handler die Details "protokolliert", bevor die Antwort an den Benutzer zurückgegeben wird.

0voto

SyntaxT3rr0r Punkte 26957
What should I do when someone passes invalid user id inside the request URL?

Sie haben zwei Möglichkeiten: die von Ihnen erwähnte "Standardseite" anzeigen oder eine "Nicht gefunden"/404 zurückgeben.

Betreffend null das kommt darauf an. Wenn man bedenkt null für einen Verweis nicht akzeptabel, dann kommentieren Sie es mit @NotNull und die Bemerkung soll sich darum kümmern, das Richtige zu tun, wenn sie eine null Referenz: das heißt, eine (ungeprüfte) Ausnahme auslösen (natürlich müssen Sie mit der erstaunlichen @NotNull-Annotation arbeiten, damit dies funktioniert).

Was Sie weiter oben in der Kette tun, bleibt Ihnen überlassen: Für mich klingt die Rückgabe einer 404 an jemanden, der versucht, Benutzer-IDs zu fälschen, wirklich nahezu optimal.

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