web-dev-qa-db-ja.com

REST APIの警告は重大なエラーではないため

REST APIがあり、DELETEなどの一部のエントリではPOSTまたはPUTですが、エラーを返す可能性がある検証ルールがあります。

クリティカルではないエラーのような新しいタイプのエラーが必要です。通常の方法でエラーが発生するはずですが、「警告の抑制」フラグが送信された場合は、アクションに進む必要があります。そのようなユーザーに、「このステータスを変更してもよろしいですか、まだ完了していません」と尋ねることができます。

質問:これらのタイプのエラーのベストプラクティスはありますか?

二次質問

  • 私が使用できるような動作のHTTPセマンティクスはありますか?
  • 私はまだ従うRESTアイデア(私にはそれが私に見えるように見えます)-私はそれをステートレスに保ちます
9
user237329

Httpには警告結果コードはなく、成功(200)またはエラー(400、500)を返します。私が知っている唯一のことは、あなたが望むものに類似している可能性があります-コード401 'unauthorized'のようなものです-これは完全な失敗ですが、ほとんどのクライアントが資格情報との接続を自動的に再試行します。

REST APIの場合、リクエストのステータスと結果の処理方法をサーバーに通知する必要があります。クライアントが完了していない場合はPUTを送信できず、エラーが発生する場合があります。それは持っています-サーバーは正しい結果コードを送り返すためにこの情報を知る必要があります。

そのため、リクエストに「警告を抑制する」フラグを送信できます。フラグが設定されていない場合、サーバーは409エラーコード(または類似のコード)を返し、設定されている場合は200コードを返します。ステータスの変更が送信された後、ユーザーに「このステータスを変更しますか」と尋ねることはできません。

ユーザーがコースのステータスを変更できるかどうかをサーバーに要求し、その後適切な要求を続けることができます。

4
gbjbaanb

ユーザーが通常のエラー処理をオーバーライドできるようにする場合は、拡張HTTPヘッダーの追加情報を含む200 SUCCESSステータスを返すことを検討できます。たとえば、次を返すことができます

X-APP-STATUS: 422 Unprocessable entity
X-APP-SOURCE: Invalid ID 'fo0'

これにより、クライアント側のコードに、ユーザーに警告するか、自分で修正アクションを実行するために必要な情報が提供されます。

0
TMN