So che questa è una domanda abbastanza comune, ma non ho trovato una risposta che mi soddisfi.HTTP 200 o 404 per la lista vuota?
Ho utilizzato il framework di restituzione django per un po 'di tempo, ma questo è per lo più irrilevante rispetto all'esempio fornito. Il suo comportamento predefinito è quello di restituire un HTTP 200 con una risorsa lista vuota quando si accede a una rotta con una lista vuota di elementi. Es .: se avessimo una rotta come /articles/
per accedere a un elenco di articoli, ma non conteneva elementi che otterremmo una risposta simile al seguente JSON:
{"count":0, "next":null, "previous":null, "items": []}
Che è perfettamente bene. Abbiamo trovato la risorsa che cercavamo in/articles /, semplicemente non ci sono elementi in essa contenuti.
Se si accede al percorso /articles/?page=1
, otteniamo esattamente la stessa risposta.
Fin qui tutto bene. Ora proviamo ad accedere a /articles/?page=2
e il codice di risposta cambia. Ora ottieni un 404
come se non fosse possibile trovare la risorsa con un messaggio di errore che diceva che la pagina non contiene risultati. Che è lo stesso caso di? Page = 1 ...
Sono stato perfettamente d'accordo con questo comportamento, ma oggi ho iniziato a mettere in discussione questo progetto. In che modo la custodia ?page=1
è diversa da ?page=2
? Inoltre, come si può sapere se la richiesta è "valida" quando si invia una richiesta HEAD? Valido nel senso di contenere qualsiasi risultato.
Questo potrebbe essere utile in casi come il filtraggio di un elenco per verificare la disponibilità di un determinato campo (ad esempio, emissione di una richiesta HEAD
a /users/?username=ted
).
- Una risposta di 200 significherebbe chiaramente che la richiesta è stata capita e gli articoli sono stati trovati.
- A 404 significherebbe la richiesta è stata registrata, ma sono articoli sono stati trovati in quella posizione/URI (AFAIK query parametri sono anche parte della URI)
- Nel caso la richiesta non può essere compreso un 400 sarebbe ritornato per gli errori sintattici e 422 per gli errori semantici.
È un buon design? Perché la maggior parte delle persone sembra non essere d'accordo e quali sono gli svantaggi?
IMHO 200 è migliore perché 404 non consente di distinguere tra * nessun API distribuito * e * elenco vuoto *. –
Non è concettualmente lo stesso? Non ci sono risorse in quella posizione. Un cliente non dovrebbe (in teoria) preoccuparsi degli endpoint in una corretta implementazione del riposo, quindi la differenza non dovrebbe avere importanza (di nuovo, in teoria, sotto una corretta pausa di riposo). –
Il modo in cui lo vedo: '/ articles /' è la lista di tutti gli articoli; anche se è vuoto, esiste ancora. E sulla maggior parte dei siti, anche una lista vuota ha una pagina uno, per dirti che non ci sono risultati. –