API REST: quale codice HTTP deve essere restituito quando la risorsa non è in uno stato richiesto per completare l'operazione?

6

La nostra API accetta richieste PUT per cambiare lo stato delle risorse. Pensa a questo come una macchina statale. Il client può specificare lo stato di destinazione della risorsa tramite la richiesta PUT ma è possibile che la risorsa non sia in uno stato da dove può raggiungere lo stato di destinazione specificato dal client. Quale codice HTTP dovremmo restituire in questa istanza? Sto pensando a 409 Conflict con più dettagli nel corpo della risposta usando un errore strutturato che descrive cosa è andato storto.

Qualcuno l'ha provato e l'ha modellato in modo diverso?

    
posta Suhas 09.05.2016 - 11:19
fonte

1 risposta

5

Penso che 409 sia una buona scelta se lo stato in conflitto è stato raggiunto da un altro client che invia un PUT, ad esempio

  1. A fa un GET
  2. B fa un GET
  3. B fa un PUT
  4. Lo stato
  5. ora è diverso
  6. A prova a fare un PUT ma il nuovo stato non è possibile quindi A ottiene un 409.

Funziona solo se il server è in grado di determinare la transizione di stato non valido, sia dalle transizioni FSM che sono possibili o da un codice inviato con la richiesta di ordine.

L'altra opzione sarebbe quella di usare PATCH dove si invia un delta, come passare dallo stato 1 allo stato 2 con la richiesta http. Ciò significa che il server può verificare se la risorsa è nello stato 1, altrimenti non può applicare l'aggiornamento. Questo rende questo percorso di errore molto più esplicito per il client.

    
risposta data 09.05.2016 - 11:38
fonte

Leggi altre domande sui tag