2010-06-25 16 views
8

Siamo nel mezzo di una discussione in corso su come gestire le eccezioni REST.Come gestire le eccezioni REST?

Risposta Tipo di contenuto: JSON

Due soluzioni che abbiamo:

  1. gettare tutti i non controllati come risposta JSON eccezioni.
  2. Invia richiesta codice di risposta non valido.

Argomenti:

  • quando è un errore, perché ritorno JSON? Basta inviare un codice di risposta non valido.

Contatore Argomento:

  • Codice di risposta sono troppo tecnico per gestire per gli sviluppatori normali.

Che dire?

+0

Mi chiedo perché i codici di risposta sono troppo tecnici. Se devi/puoi intraprendere azioni correttive dovresti dipendere dal codice di risposta (o da qualsiasi altro codice di errore all'interno del json) e non dalle stringhe di errore leggibili dall'utente –

+0

Ci occupiamo di tutti i tipi di client. Quindi non vogliamo assumere che gli sviluppatori con i clienti siano abbastanza abili da comprendere i codici di risposta. Sono stati i pensieri di poche persone e anche i miei. Se guardano a lui, possono capire l'errore. –

+0

Uno dei principali vantaggi di REST è l'uniformità delle interfacce. Quindi quando si dice che abbiamo una API REST, il client anticipa automaticamente l'elenco delle risorse e le operazioni GET POST POST DELETE e allo stesso modo conosce i codici di errore che può immaginare. Le stringhe di errore sarebbero sicuramente utili per il tuo client (sviluppatori) per il debug. Ma il codice che scrivono contro la tua API * dovrebbe * intraprendere azioni basate sui codici e non sulle stringhe. –

risposta

13

Per una API JSON che ho sviluppato di recente, faccio entrambe le cose. Rispondo sempre con un JSON valido (beh, assumendo che risponda per niente). Se rilevo una richiesta non valida, utilizzo lo stato 400. Se rilevo un errore del server (che non credo sia causato da una richiesta non valida), utilizzo uno stato 5xx. L'oggetto JSON contiene una chiave speciale impostata solo per gli errori, con un valore stringa.

Penso che questa sia una buona soluzione che rispetti i principi REST e possa essere utilizzata in più modi. La stessa soluzione è utilizzata da altre API JSON, come Yahoo Search. Prova http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&output=json.

+1

+1: con un utilizzo RESTful di HTTP è assolutamente necessario sfruttare i codici di risposta HTTP.Ulteriori informazioni possono essere restituite nella rappresentazione. –

+0

Ho appena visto questa risposta negli articoli "correlati" di SO. E anche se è una vecchia risposta, è evidente che si sta ancora rivelando. Credo che ci sia un * lotto * in più per una buona gestione degli errori rispetto al semplice utilizzo dei codici di stato HTTP (che è comunque un buon inizio!). Vedi http://soabits.blogspot.dk/2013/05/error-handling-considerations-and-best.html per una discussione approfondita. –

5

Utilizzare i codici di errore come per HTTP. Quindi 50 * per ogni eccezione dovuta a qualche problema interno. E 40 * per argomenti negativi. Evitare di utilizzare i propri codici definiti per quanto possibile. L'idea è di avere un'interfaccia "uniforme".

In generale. 204 per il successo senza inviare alcun contenuto 200 per il successo con una rappresentazione json della risorsa E se non è un'operazione riuscita, restituire il codice di risposta appropriato. Puoi scegliere di restituire facoltativamente un json. Per semplificare le cose puoi avere un formato comune (json) per tutte le risposte di errore.

http://en.wikipedia.org/wiki/REST è necessario leggere prima di congelare le specifiche API.

+0

"201 per il successo senza inviare alcun contenuto." 201 viene creato, quindi dovrebbe essere usato solo quando "una nuova risorsa [è] creata", non per un successo generale. Potresti pensare a 204, "Nessun contenuto" –

+0

oops! destra. grazie per la correzione! –

Problemi correlati