2012-03-27 16 views
15

Sto implementando un framework API REST e mi chiedo quale sia il comportamento consigliato, quando un client invia un parametro querystring non valido.Framework API REST. Comportamento consigliato per parametro querystring non valido

illustrerò quello che voglio dire con un esempio specifico: dire che ho un gestore API sul/api/contatti/endpoint, e il gestore fornisce un filtro querystring chiamato id, che consente ai clienti di selezionare determinati contatti con gli ID forniti.

Quindi, una richiesta GET o DELETE potrebbe essere /api/contacts/?id=2&id=4&id=lalalala.

Chiaramente, non esiste un contatto con id=lalalala. In questo caso, come dovrebbe comportarsi il server?

  • Ignorare l'valida contatto con id=lalalala, e filtrare solo i contatti sulle ID validi, 2 e 4.

  • rispondere con un codice di errore che indica questo errore. Se sì, quale codice di errore dovrebbe essere fornito?

Grazie in anticipo.

Modifica: Per chiarire; L'obiettivo principale del framework che sviluppo, è quello di avere un comportamento prevedibile e quindi codici di risposta. Per questo motivo, voglio che i client utilizzino un'API costruita su questo framework, per aspettarsi le sorprese meno possibili. Quindi, la domanda è fondamentalmente: l'API dovrebbe restituire un errore in questo caso (e se sì, quale)? Oppure ignora le voci di filtro non valide e filtra solo i parametri querystring corretti?

risposta

10

In seguito alla lettera della legge, la risposta dovrebbe essere una 404 Non trovata. Tuttavia, nessuno si arrabbierà troppo con te se preferisci restituire 400 - cattiva richiesta.

Tuttavia, restituirei sicuramente un codice di stato 4XX. Vuoi che il cliente sappia che hanno fatto un errore.

+0

Darrel, grazie per la risposta. Non sarei d'accordo con te anche se la risposta dovrebbe essere un errore 404, poiché l'endpoint dell'API è corretto e mappa su una risorsa valida (ad esempio/api/contacts /). Un errore 400 avrebbe più senso suppongo :) –

+1

Darrel, hai sicuramente un punto qui. Come inizialmente hai detto, anche se seguendo la lettera della legge la risposta avrebbe potuto essere un errore 404, mi sto appoggiando più verso un errore 400. –

12

Poiché si tratta di una chiamata REST, stiamo parlando di risorse. E ogni volta che abbiamo un filtro sbagliato, dovremmo restituire un codice di errore corretto.

In questo caso vorrei andare per 400 - bad request come la risorsa è stata trovata e mappata correttamente (/api/contacts), ma c'era un problema con la parte query string. Pertanto uno 400 e non uno 404.

Restituisce un 404 se qualcuno ha richiesto /api/contacts-all o qualche risorsa inesistente.

EDIT sulla base dei commenti qui sotto

Accetto al tuo commento. Idealmente un 400 è un problema con la richiesta. Passando da quello, è possibile utilizzare uno 422 Unprocessable Entity. Si prega di guardare il link StackOverflow qui sotto e parla della stessa cosa.

direi che gli sviluppatori di tutto il mondo sarebbe più comodo vedere un 400 di 422 per tali errori logici a causa del fatto che le aziende più grandi stanno usando 400 e non 422.

Riferimenti: Http status codes e 400 for logical error vs malformed request

+1

Ravi, grazie per la risposta. Sono d'accordo sul fatto che un errore 400 ha molto senso. L'unica cosa che mi impedisce di farlo è che restituisco 400 errori quando i dati non validi sono inclusi nel corpo della richiesta (ad esempio nelle richieste PUT/POST), e sembra un po 'contro-intuitivo, ma ragionevole, dando lo stesso risposta in questo caso. –

+1

Dai un'occhiata alla risposta sopra modificata. –

+0

Ravi, grazie. Risposta molto completa e chiara. 422 L'errore sembra essere la risposta più corretta, poiché la richiesta è semanticamente errata. Lo studierò più a fondo e tornerò presto. –

Problemi correlati