2013-03-09 8 views
7

Sto scrivendo un'API Restful e devo restituire un messaggio di errore, ma non sono sicuro su quale percorso andare.Lo stato HTTP deve essere utilizzato nelle risposte di errore restful?

Route 1 - HTTP Stato

stato di errore Usa HTTP quando il client invia dati errati

Es: 401 - Non autorizzato, 410 - modello non esiste, 412 - Modello Validaiton errore, ecc

percorso 2 - JSON successo o guasto Errore

L'API restituisce JSON e sto considerando di tornare tutto con l'intestazione http 200, ma poi nel mio JSON gestisce errori e successo

Es: {"status": "errore", "messaggio": "Errore di convalida del modello", "dati": ["nome utente richiesto" , "E-mail utente richiesta"]}

Quale itinerario dovrei andare e perché? Vantaggi e svantaggi.

risposta

12

Sto scrivendo un'API Restful e devo restituire il messaggio di errore ma sono non sicuro su quale percorso andare.

Route 1 - HTTP Stato

stato di errore Usa HTTP quando il client invia dati errati

codici di stato HTTP dovrebbe assolutamente essere utilizzato in qualsiasi implementazione del servizio web la pretesa di essere Riposante. Il principio di base delle specifiche sta sfruttando ed estendendo il Web per supportare completamente il trasferimento dello stato rappresentativo. Per consentire l'interoperabilità con l'infrastruttura Web esistente, un'implementazione REST dovrebbe indicare lo stato delle richieste tramite appropriati codici di stato HTTP. Per esempio:

200 - Ok
201 - i contenuti creati
401 - Unauthorized
403 - Forbidden
500 - Errore del server
501 - non implementato

Quando si risponde con molti di questi stati , è anche consentito dalla specifica HTTP di includere una rappresentazione di entità nel corpo della risposta. Nel caso di risposte "normali", non di errore, questa rappresentazione sarà normalmente dell'entità che viene "gestita" dalla richiesta HTTP. Nel caso di risposte di errore, la rappresentazione, se inclusa, dovrebbe fornire maggiori informazioni sull'errore che si è verificato. È qui che seguiamo la tua opzione 2.

Percorso 2 - JSON successo o guasto Errore

L'API restituisce JSON e sto considerando di tornare tutto con l'header HTTP 200, ma poi nei miei errori maniglia JSON e successo

Non si dovrebbe assolutamente restituire un 200 OK per tutte le risposte. Molti client HTTP ben implementati dipendono dal codice di stato nella risposta per determinare se è riuscito o meno. Rispondere sempre con un valore di 200 OK può far sì che le librerie client di terze parti elaborino erroneamente i dati in arrivo e imponga al cliente l'obbligo di analizzare il corpo della risposta al fine di determinare se si è verificato un errore o meno.

Detto questo, aggiungere ulteriori informazioni sull'errore che si è verificato può essere molto utile, quindi sicuramente prendere in considerazione l'aggiunta al corpo della risposta. Il formato proposto sembra perfetto, anche se per essere sincero l'elemento status è ridondante, presupponendo che si utilizzino i codici di stato HTTP in modo appropriato. Qualcosa di più simile:

{ 
    "message": "Model validation error", 
    "data": [ 
     "user name required", 
     "user email required" 
    ] 
} 
Problemi correlati