Come rispondere con un messaggio di errore quando si effettuano chiamate AJAX

1

Ho un'app che non è stata scritta da me. Se c'è un errore come un ID non valido dato come parametro, vorrei restituire qualcosa del tipo:

(codice 200)

{
    "success": 0,
    "error": "The row could not be found in the database"
}

... ma la persona che ha scritto l'applicazione lo ha fatto in questo modo:

(404 codice)

The row could not be found in the database

Non sono sicuro che il loro uso di un codice 40x sia corretto qui. Capisco che i codici 40x sono per errori del client ma non è quello nel caso in cui il file non possa essere fornito all'utente, non che il file sia stato trovato e restituisca un messaggio di errore dallo script.

Ad ogni modo, il 40x causava il crash di altri JavaScript perché non veniva gestito correttamente in ogni caso. Qual è la migliore procedura / pratica - inserire messaggi di errore nella risposta, restituire come 200 e gestire l'utilizzo di un flag di successo (ad esempio "successo") OPPURE inserire errori nella risposta, restituire come 40x, ma gestire meglio gli errori dal server nello script in modo da non mandare in crash altri JS come quello che sembra accadere in Firefox per me.

Apprezzerebbe molto le opinioni delle persone su questo argomento.

    
posta Martyn 21.10.2014 - 17:24
fonte

1 risposta

6

but isn't that in the case where the file cannot be served to the user, not that the file was found and to return a error message from the script.

In linea di principio la prima parte è giusta, ma "file" è ambiguo. Ti stai sbagliando su cosa significa "file" qui o, più in generale, nel contesto dei servizi web RESTful.

Un servizio Web espone una risorsa all'utente tramite HTTP. Se il client prova a GET una risorsa, tramite AJAX o no, e la risorsa richiesta non è presente, il server dovrebbe generare un errore 404. La risorsa non è il vero file memorizzato sul server (ad esempio ajax.php o qualche script CGI), ma la risorsa a cui il client tenta di accedere, sia essa un'immagine o solo un contenuto testuale.

Wikipedia menziona anche :

A 404 error should not be confused with "server not found" or similar errors, in which a connection to the destination server could not be made at all. A 404 error indicates that the requested resource may be available again in the future; however, the fact does not guarantee the same content.

Un altro esempio di A. Rodriguez, "Servizi web riposanti: le basi." IBM developerWorks (2008):

[This operation has the] effect of renaming the resource from Robert to Bob, and in doing so changes its URI to /users/Bob. In a REST Web service, subsequent requests for the resource using the old URI would generate a standard 404 Not Found error.

L'app di invio AJAX dovrebbe gestire il caso in cui la connessione al server è scaduta o viene generato un errore interno del server (5xx), ma dovrebbe anche essere in grado di gestire il fatto che la risorsa ha provato a recuperare ( ad es. un utente, una registrazione di immagini, ecc.) non è presente in questo momento.

Naturalmente, questo è tutto incentrato sugli approcci RESTful. Non è necessario seguirlo, ma avrebbe senso sfruttare la semantica dei codici di stato HTTP il più possibile, specialmente nel modo in cui lo sviluppatore lo ha fatto, aggiungendo specifici messaggi di errore nel corpo della risposta. Anche l'altro approccio di fornire una risposta quasi standard con un flag success e un messaggio è corretto, ma richiede un accoppiamento più strong di applicazioni front e back end.

    
risposta data 21.10.2014 - 18:07
fonte

Leggi altre domande sui tag