La risposta RESTful restituisce sempre un 404 e un contenuto vuoto quando è previsto un array ma il risultato è vuoto?

2

Ho lavorato con Ruby on Rails e RESTful api prima e ora con framework Django Rest . Per questa domanda, diciamo che consideriamo solo il caso di JSON ma non di XML. Sembra che quando ci aspettiamo un array come risultato, se il risultato è 1 o superiore, possiamo tranquillamente recuperare un array con il contenuto corretto, ma se il risultato è 0, non otteniamo un array vuoto - in realtà restituirà un codice di stato HTTP 404 con contenuto di risposta vuoto?

Questo è sempre il caso delle risorse RESTful, ed è vero che se non definiamo la nostra API come REST o risorsa, allora possiamo fare tutto ciò che vogliamo (e restituire un array vuoto)?

In un certo senso, penso che se si tratta di programmazione matematica o funzionale, penserei che se una funzione restituisce un set o un array quando il numero di elementi è 1 o superiore, ma restituisce un valore nullo o genera un'eccezione , invece di restituire un set vuoto o un array vuoto, penso che sia un comportamento un po 'strano. E nel caso della ricorsione, un tale comportamento di solito non funziona, quindi mi chiedo se un comportamento che è più "matematicamente corretto" possa essere un comportamento migliore. Ma questa domanda riguarda RESTful ... se la sua definizione è che dovrebbe essere 404 con un contenuto di risposta vuoto ma non può essere altrimenti.

    
posta 太極者無極而生 05.03.2016 - 06:11
fonte

2 risposte

7

Hai ragione, il comportamento è davvero strano. Un null e un array vuoto sono, semanticamente, due cose diverse.

  • Un array vuoto indica esattamente questo: l'array esiste ma al momento non contiene elementi, dati i parametri di query.

  • Un HTTP 404 indica, d'altra parte, che non c'è alcuna matrice; per qualche ragione, non ha senso avere un array lì.

Immagina un'applicazione di tipo Flickr con utenti, foto e commenti. Immagina che solo gli utenti a pagamento possano caricare le foto, ma tutti gli utenti possono commentare. Se l'utente 123 non ha un abbonamento a pagamento e non ha ancora pubblicato alcun commento:

  • La query /user/123/comments fornirebbe una matrice vuota, ma:

  • La query /user/123/photos può risultare in HTTP 404 per indicare che l'utente non ha alcuna foto.

    Un'altra possibilità è di restituire un array vuoto, che è semanticamente corretto. Perderà l'aspetto "questo utente non deve avere alcuna foto", ma potrebbe non essere troppo importante: se il cliente ha bisogno di sapere se l'utente 123 può avere foto, la query simile a /account/123/status potrebbe essere utilizzato per restituire valori come paid o free .

risposta data 05.03.2016 - 08:25
fonte
1

Non dimenticare che gli errori 4xx sono errori del client, secondo le specifiche HTTP. Si tratta davvero di voler dire al cliente che la sua richiesta era sbagliata, o vuoi dire che non hai nulla per quella richiesta.

    
risposta data 06.03.2016 - 01:19
fonte

Leggi altre domande sui tag