@StevenFisher è corretto. 409 Conflict è la risposta corretta.
Impossibile completare la richiesta a causa di un conflitto con lo stato corrente della risorsa . Questo codice è consentito solo in situazioni in cui si prevede che l'utente potrebbe essere in grado di risolvere il conflitto e inviare nuovamente la richiesta. Il corpo della risposta DOVREBBE includere abbastanza informazioni per l'utente per riconoscere l'origine del conflitto. Idealmente, l'entità di risposta includerebbe informazioni sufficienti per l'utente o l'agente utente per risolvere il problema; tuttavia, ciò potrebbe non essere possibile e non è richiesto.
Per esempio, un GET on/potrebbe dire a un cliente che possono creare gli utenti come segue
HTTP/1.1 200 OK
<users href="/">
<create href="/" method="post">
<username type="xs:token" cardinality="required"/>
<password type="password" cardinality="required"/>
</create>
... other hypermedia controls, like search ...
</users>
A seguito del controllo di ipermedia e cercando di creare un utente con il nome utente "Skylar Saveland" potrebbe comportare in
HTTP/1.1 409 Conflict
<users href="/">
<create href="/" method="post">
<username type="xs:token" cardinality="required"
error="The username 'Skylar Saveland' is already taken. Please select another username"/>
<password type="password" cardinality="required"/>
</create>
... other hypermedia controls, like search ...
</users>
Allo stesso modo, cercando di creare un utente senza una password potrebbe risultare in
HTTP/1.1 409 Conflict
<users href="/">
<create href="/" method="post">
<username type="xs:token" cardinality="required"/>
<password type="password" cardinality="required"
error="A password must be specified"/>
</create>
... other hypermedia controls, like search ...
</users>
o si potrebbe avere più errori, per esempio,
HTTP/1.1 409 Conflict
<users href="/">
<create href="/" method="post">
<username type="xs:token" cardinality="required"
error="The username 'Skylar Saveland' is already taken. Please select another username"/>
<password type="password" cardinality="required"
error="A password must be specified"/>
</create>
... other hypermedia controls, like search ...
</users>
NOTA: Un adeguato media type will need to be created di andare avanti con quanto sopra, che spiegherà la struttura dei controlli ipermediali (compreso l'errore attributi sulle forme) e definire il significato dei vari nomi di elementi (ad es. utenti, nome utente, password, ecc.).
Vorrei andare con 409, "Conflitto". Ma non sto per affermare che è il modo "corretto". :) –