私の意見では、アプリケーションレベルの問題をクライアントに報告するために200以外のコードを使用するべきではありません。これらのコードは、純粋にHTTPレベルの機能のために予約されています。
200個のコードを返し、アプリケーションレベルのエラーコード/メッセージ/その他をHTTP応答本文に配置するのが賢明です。
ただし、アプリケーションレベルの障害を通信するために500コードを使用するプロトコルが少なくとも1つあります。それはSOAPです。たとえば、SOAP障害メッセージを含むHTTP応答のヘッドは次のとおりです。
HTTP/1.1 500 Internal Server Error
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: nnnn
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:Sender</env:Value>
<env:Subcode>
<env:Value>rpc:BadArguments</env:Value>
</env:Subcode>
</env:Code>
しかし、とにかく、500のHTTPエラーコードが返されるだけでなく、アプリケーションレベル(SOAP)データが何が起こったかについての詳細な情報とともに含まれていることがわかります。
最終的には、プロトコルに200以外のものを使用するかどうかを決定するのはあなた次第です。クライアントの要件によって、エラーを完全に伝達するのに500エラーコードだけで十分かどうかが決まります。その理由は次のとおりです。それで十分であれば、他に何も必要ありません。そうでない場合は、プロトコルを考案するか、SOAPやRESTなどの既存のプロトコルを使用することをお勧めします。