it-swarm.com.de

HTTP-Statuscode für eine teilweise erfolgreiche Anforderung

Ich habe eine Anwendung, die Nachrichten an Benutzer sendet. In einer Post-Anfrage wird eine XML-Zeichenfolge übertragen, die aus allen Benutzern besteht, die diese bestimmte Nachricht erhalten sollen. Wenn einer der Benutzer in der Liste nicht vorhanden ist, gebe ich dem Client die Liste der fehlenden Benutzer zur weiteren Auswertung zurück. 

Nun frage ich mich, was der richtige Statuscode für die Anwendung wäre, der besagt, dass die Anfrage angenommen wurde, aber es gab Dinge, die nicht erledigt werden konnten. 

Das Problem würde vermieden, wenn es nicht erlaubt wäre, fehlende Benutzer in die Liste aufzunehmen. Dann würde der Sendeversuch nur einen 4xx-Fehler erhalten. Es hat jedoch keinen Sinn, die API auf diese Weise zu bilden .. Auf der anderen Seite könnte ich die Fehlerbedingung als rein anwendungsspezifisch betrachten. Aber eine 200 zu senden fühlt sich einfach nicht richtig an. Und es wäre schön, wenn Sie dem Kunden einen Hinweis geben, wann er tief in die Fehlerantwort schauen soll. z.B. um zu vermeiden, dass immer wieder Nachrichten an diese Benutzer gesendet werden

82
Norbert Hartl

Ich habe mich mit einem sehr ähnlichen Problem befasst. In diesem Fall habe ich eine 

207 Multi-Status

Nun, dies ist kein striktes HTTP, es ist Teil der WebDAV-Erweiterung. Wenn Sie auch nicht die Kontrolle über den Client haben, ist dies nicht gut für Sie. Wenn ja, könnten Sie so etwas tun:

   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D='DAV:'>
     <D:response>
       <D:user>user-123</D:user>
       <D:status>success</D:status>
     </D:response>
     <D:response>
       <D:user>user-789</D:user>
       <D:status>failure</D:status>
     </D:response>
   </D:multistatus>

Aber auch hier handelt es sich um eine HTTP-Erweiterung, und Sie müssen auch die Kontrolle über den Client haben.

48
Kylar

Ich hatte das gleiche Problem und habe am Ende zwei verschiedene Lösungen verwendet:

  • Der HTTP-Rückgabecode 202: Accepted zeigt an, dass die Anforderung in Ordnung war. Es kann jedoch nicht garantiert werden, dass alles tatsächlich so lief, wie es sollte.
  • Geben Sie einen normalen 200 in der Antwort zurück, fügen Sie jedoch eine Liste dessen hinzu, was nicht im Antworttext angezeigt wurde.

Die zweite Funktion funktioniert normalerweise am besten, aber die erste ist großartig, wenn Sie faul sind oder eine Warteschlange für die Verarbeitung verwenden.

53
Arne

Was ist mit der Verwendung von 206 Teilinhalten? Ich weiß, 206 handelt mehr von Bereichen, aber was wäre, wenn es eine teilweise erfolgreiche Anforderung anzeigen könnte?

0
Yusuf