Se vuoi che il controllo di unicità del nome utente venga eseguito come parte della creazione di un account, puoi lasciare che "POST / account" restituisca 409 se esiste già un account per quel nome utente. Vedi la panoramica dei codici di stato HTTP . Nel corpo della risposta, è possibile restituire un messaggio di errore appropriato. Se si dispone di una convenzione per specificare esattamente quale campo non è valido nella risposta all'errore, è possibile utilizzare tale convenzione per indicare che il nome utente sta causando un problema (ad es. Per evidenziare quel campo sullo schermo). Risposta di esempio 409:
{
"message" : "Unable to register new account",
"errorFields" : [
{ "field" : "userName", "message" : "An account with this user name already exists" },
{ "field" : "password", "message" : "Password too weak" }
]
}
Tuttavia, penso piuttosto in una direzione totalmente diversa. In tali situazioni è comune che il client debba verificare esplicitamente un nome utente duplicato prima che tenta di creare un account, ad esempio, non appena l'utente lascia il campo del nome utente. In tal caso, l'app client deve utilizzare il metodo HTTP "HEAD". Vedi le specifiche dei metodi HTTP . Il server restituisce 200 se esiste già un account per quel nome utente e 404 se l'account non esiste.
Supponi / account rappresenta la raccolta di account e / account / xxx rappresenta un account individuale per il nome utente xxx, quindi il client deve eseguire HEAD / accounts / xxx per verificare se l'utente xxx ha già un account. Idealmente, il client non aggiunge semplicemente "/ xxx" a "/ accounts", ma usa un collegamento basato su modello, / accounts / {username}, fornito da un'altra risorsa.
Tuttavia, non inserirò i nomi utente nel percorso. Vorrei utilizzare invece le chiavi tecniche, ad es. / accounts / accountID rappresenta un singolo account, dove accountID è una chiave tecnica. In tal caso, se l'app client deve controllare se il nome utente xxx è già in uso, può eseguire HEAD / accounts? UserName = xxx (ancora una volta, un'altra risorsa dovrebbe fornire un collegamento basato su modelli per farlo).