2016-10-29 3 views
4

im derzeit auf einer Website arbeiten, die Feder an der Vorderseite an Backend und AngularJS hat und wir hatten über Backend Antworten diskutiert Frontend die Nachricht von Dialogen zu handhaben, und ich habe eine Frage zu stellen:Welcher HTTP-Code sollte von der REST-API zurückgegeben werden?

sagen Lets ich eine API haben:

Und wenn Client eine Anfrage mit ungültigen Parametern wie eine Zeichenfolge erstellen, welcher Antwortcode sollte vom Server zurückgegeben werden? HTTP 400 ungültiger Anfrage- und Antworttext mit einer Nachricht "fromTime und toTime sollte im Timestamp-Format vorliegen" oder HTTP 200 mit derselben Nachricht?

Ich sah einige Google APIs zum Beispiel Oauth, sie geben Code 200 für eine Anfrage mit ungültigem access_token zurück, aber in unserem Projekt sollte es meiner Meinung nach HTTP 400 sein, weil Javascript Erfolgs- und Fehlerrückrufe hat, ist es besser für es Pop nur eine rote Farbe Dialog mit der Nachricht im Inneren anstelle von einem HTTP 200 Code dann noch den Inhalt der Nachricht zu überprüfen?

Alle Anregungen und Meinungen sind willkommen.

Danke!

Antwort

2

Ja, Sie haben Recht, der http-Code sollte 400 in Ihrem Fall sein. Ihre Diskussion hier sollte normalerweise sein, ob Sie 400 oder 422 zurückgeben müssen. Dazu können Sie die akzeptierte Antwort für diese Frage SO überprüfen 400 vs 422 response to POST of data

+0

Danke, aber ich brauche noch mehr Details oder einige Standards zu verstehen. – meobeo173

+0

@ meobeo173 Ich habe meine Antwort bearbeitet, um weitere Details hinzuzufügen. Sie können auch eine ausführlichere Antwort finden, indem Sie dem Link folgen, den ich meiner Antwort hinzugefügt habe. – ettanany

9

Sie sollten einen 400 Fehler für eine ungültige Anforderung zurückgeben. Check out this Referenz.

Der Server kann nicht oder die Anforderung nicht verarbeitet wegen etwas , die wahrgenommen wird, einen Client-Fehler (z.B. ungültige Anfrage Syntax, ungültige Anforderungsnachricht Framing oder täuschende Anfrage routing).

haben Sie einen Blick auf RFC7231#section-6

Ein Client muss die Klasse von jedem Statuscode verstehen, durch die erste Ziffer

angegeben als

und

4xx (Client Error): Die Anfrage enthält schlechte Syntax oder nicht

Bad Syntax etwas sein kann erfüllt werden, wie Sie in Ihrer Frage erwähnt haben (eine Anforderung mit ungültigen Parametern zu machen, wie ein String).

Ich halte diese beiden Referenzen praktisch, wenn ich RESTful APIs bin der Gestaltung, könnte hilfreich sein für Sie auch:

  1. https://httpstatuses.com/
  2. http://www.restapitutorial.com/httpstatuscodes.html
+0

Danke, und ich denke, das ist der Grund von Google in meinem Beispiel – meobeo173

+0

@ Meobeo173 200 Senden für erfolgreiche Umleitung, nicht sicher darüber, aber ich bin mir ziemlich sicher, dass Senden Fehler mit 200 Status ist keine gute Idee. Sie sollten in der Lage sein, Ihre Antwort zu unterscheiden, indem Sie nur den Statuscode betrachten, nicht die Nutzlast IMHO. Weitere Informationen finden Sie auch unter diesem SO-Link: http://stackoverflow.com/questions/27921537/returning-http-200-ok-with-error-within-response-body –

+0

: "HTTP-Statuscodes sind technische Antworten, NICHT Business Logik Antworten "Ich fand dieses Zitat, aber in meiner Situation, um Client-Implementierung zu erleichtern, denke ich, es spielt keine Rolle, einen Fehlercode für gültige technische, aber ungültige Business-Logik-Anfrage zu beantworten? – meobeo173

0

Ich denke, es ist etwas mit dem zu tun hat wie die Parameter verwendet werden. Wenn Sie die Ressource verwenden, sollte ein 404 zurückgegeben werden. Wenn die Daten einfach nicht gültig sind, entscheiden wir uns, einen 409-Status für die Anfrage festzulegen. Es kann wegen fehlender/ungültiger Parameter nicht zu 100% gefüllt werden.

HTTP-Statuscode „409 Conflict“ war für uns ein guter Versuch, weil es Definition erfordern genügend Informationen für den Benutzer zu erkennen die Quelle des Konflikts einzubeziehen.

Referenz: w3.org/Protocols/

Edit: In jedem Fall ist der Statuscode 200 ist hier falsch, da ein Fehler aufgetreten ist. Als Antwort können Sie dann spezifische Informationen wie folgt zurückgeben:

{ 
    "errors": [ 
    { 
    "userMessage": "Sorry, the parameter xxx is not valid", 
    "internalMessage": "Invalid Time", 
    "code": 34, 
    "more info": "http://localhost/" 
    } 
    ] 
} 
+0

Was meinen Sie mit der Verwendung der Parameter? Normalerweise gebe ich 404 nur zurück, wenn die Ressource selbst nicht über URL routingfähig ist (d. H. Ein Client hat einen Aufruf an/user statt an/users getätigt). 409 wäre sinnvoll, wenn etwas mit dem Status der Ressource und nicht mit der URL selbst nicht stimmt. Im OP scheint es, als wäre der Anfrageparameter falsch formatiert, daher wäre eine 400 eher geeignet als 404 oder 409. Dies ist eine gute Seite, die ich als Referenz verwende http://www.restapitutorial.com/httpstatuscodes.html – Derric

Verwandte Themen