リソースが作成されたと仮定しますが、リソースをプルしようとすると (データベースからのクエリ) 失敗します
その場合、リソースは作成されていません。あったように見えただけです。これは確かにサーバー側のエラーであるため、5xx コードです。
障害を引き起こしたユーザー指定のパラメーターがない限り、その場合は 4xx コードになります。
更新: または、私が誤解していて、作成に問題がなく、リソース ID が返された後、その後の有効なGET
クエリでリソースが見つからなかった場合、その場合、サーバー コードに何か問題があります。以前に 5xx エラーを発行する必要がありました。回避策として、リソースを作成し、リソース作成コードからクエリを発行して、200 を返すか、失敗した場合はクリーンアップ、再試行、または 5xx を返すことが考えられます。しかし、実際にすべきことは、リソースが消失したり、作成されたように見えるだけの原因を調査することです (たとえば、同時実行性の問題、不適切なトランザクション管理、キャッシュなど)。
複雑なシナリオ
REST サービスはリソースの作成を要求し、サーバーはその要求を受け入れます。サーバー自体がリクエストをバックエンド、たとえばデータベースにルーティングし、データベースは (サーバーに) 「OK」とリソース ID を返します。次に、念のため、サーバーは をチェックし、リソース ID を要求します。データベースは「そのようなリソースはありません」と応答します。
この場合、サーバーは良心的に 200 コードとリソース ID をクライアントに返すことができません。これは、クライアントがそのリソース ID を使用しようとすると問題が発生すると疑う十分な理由がある場合ではありません。また、後でエラーを検出するのははるかに難しい場合があります。クライアントがメールを送信したか、その ID に関連する複雑なアクションを実行した可能性があります。
したがって、500 が返されるか、サーバーが状況の修正を試みて、必要に応じて可能な限り次の 1 つまたは複数を適用することができます。
- しばらく待って (クライアントはまだ待機中です!)、リソースの再表示を確認します。
- キャッシュをフラッシュするか、データベースを刺激してリソースを消費させてください
- リソースを無効にする
- リソースを削除します (明らかに存在しない場合でも)
- エラーをログに記録し、詳細を管理者に送信します
- 機能するまで、リソースの作成を指定された回数繰り返します (大きすぎないか、一時的な問題が自己サービス拒否に陥る可能性があります)。
合理的かつ許容できる (クライアントによる) 時間内に状況が修正された場合、作業リソースはコード 200 で返されます。
もちろん、上記のすべてが実際に起こった理由を調査して修正する必要があります。おそらく、一部の「孤立した」リソースをデータベースから定期的にパージする必要があるかもしれません (常に厄介な提案です)。