Sto creando un'API RESTful che elaborerà una serie di interazioni utente, incluso l'inserimento di ordini utilizzando carte di credito memorizzate.
Nel caso di un ordine andato a buon fine, restituisco un 200 OK e nel caso in cui la richiesta d'ordine non sia valida o non sia valida, restituisco un 400 Bad Request. Ma cosa devo restituire se c'è un problema durante l'effettiva elaborazione dell'ordine?
- Il cliente invia l'ordine al server per una risorsa utente. Se l'utente non esiste, viene restituito 404 Not Found.
- Il formato e le informazioni dell'ordine vengono convalidati. Se non è valido, viene restituito 400 Bad Request.
- L'ordine viene elaborato. Se l'ordine ha esito positivo, viene restituito un 201 Created per l'ordine. Se si verifica un errore imprevisto, viene restituito un errore del server 500.
L'ultimo passaggio è il problema: cosa devo restituire se l'ordine non viene completato per qualsiasi altro motivo? I possibili scenari potrebbero includere:
- Il prodotto è esaurito
- Limite massimo di ordini utente raggiunto
- Errore di transazione con carta di credito (fondi insufficienti, ecc.)
Questo non sembra essere appropriato per un 400 o 500. Semmai potrei vederlo come 400 se non c'è un codice migliore - la richiesta non era valida secondo le regole aziendali. Semplicemente non sembra accurato.
Modifica: ho trovato anche questa discussione esistente sullo stesso argomento. Tutte le risposte sembrano indicare l'utilizzo di codici di stato per questo tipo di violazione, con alcune discussioni sull'uso dell'estensione 400, 409 o 422.