@StevenFisherが正しいです。 409 Conflictが正しい応答です。
現在のリソースの状態である と競合するため、要求を完了できませんでした。このコードは、 のユーザーが競合を解決できる可能性があり、 が要求を再送信することが予想される状況でのみ許可されます。レスポンス本体は、ユーザが衝突の原因を認識するのに十分な情報を に含めるべきです(SHOULD)。 応答エンティティには、ユーザーまたはユーザーエージェントが問題を解決するのに十分な情報が含まれていることが理想的です。ただし、 は可能でない可能性があり、必須ではありません。例えば
、ハイパーメディア制御に従い、ユーザ名「Skylar Saveland」を持つユーザーを作成しようとして
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>
次のように彼らは、ユーザーが作成できることをクライアントに伝えるかもしれない/上GET可能性があります
で
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>
同様に、パスワードなしでユーザーを作成しようとはする可能性があります
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>
か、例えば複数のエラーを持っているかもしれませんが、
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>
注:適切なmedia type will need to be createdハイパーメディアコントロールの構造を説明しますこれは、上記と一緒に行くために(エラーを含むフォームの属性)と様々な要素名(例えば、ユーザー、ユーザー名、パスワードなど)の意味を定義します。
私は409、 "Conflict"に行きます。しかし、私はそれが「正しい」方法であると主張するつもりはない。 :) –