Supponendo di avere un servizio RESTful e risponde sempre in questo formato:
{
"error": {
"code": ...,
"message": ...
}
}
or
{
"data": ...
}
e c'è un metodo come POST /users/me/change-password
.
Quale sarebbe il comportamento corretto e RESTful:
-
Gli errori di logica / convalida aziendale sono dati
- La password è stata modificata (200, errore e dati vuoti)
- L'utente non è autenticato (401, error = 1, empty data}
- Criterio password: la password è già stata utilizzata (200, errore vuoto, dati = 1)
- Criterio password: la password non corrisponde ai requisiti (200, errore vuoto, dati = 2)
- Richiesta conferma SMS-OTP (200, errore vuoto, dati = 3)
- SMS-OTP errato (200, errore vuoto, dati = 4)
- L'utente ha disabilitato la modifica della password (200, errore vuoto, dati = 5)
Sembra corretto poiché errori come "Conferma SMS-OTP richiesta" non sono nemmeno errori del client. Un client non ha fatto nulla di male e si aspetta una risposta "OK".
-
I risultati della logica aziendale / di convalida sono errori
- La password è stata modificata (200, errore e dati vuoti)
- L'utente non è autenticato (401, error = 1, empty data}
- Criterio password: la password è già stata utilizzata (400, errore = 2, dati vuoti)
- Criterio password: la password non corrisponde ai requisiti (400, errore = 3, dati vuoti)
- Richiesta conferma SMS-OTP (400, errore = 4, dati vuoti)
- SMS-OTP errato (400, errore = 5, dati vuoti)
- L'utente ha disabilitato la modifica della password (400, errore = 6, dati vuoti)
Sembra corretto dal momento che lo stato 200 OK suggerisce che la password è stata cambiata correttamente, qualunque sia stata scritta in risposta. Tuttavia, alcuni client come C #
WebClient
non restituiscono nemmeno risposte non OK, ma generano eccezioni.
Le stesse domande sorgono in termini di tutte le richieste di autenticazione. Ad esempio, "username è già occupato" per "accedere" a un errore o dati.