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


9

DELETE、POST、またはPUTなどの一部のentpoindに対して、エラーを返す可能性のある検証ルールがあるREST APIを持っています。

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

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

二次質問

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

このような警告をユーザーに表示するかどうかはどのように決定しますか?APIエンドポイントを呼び出してアプリケーションのステータスを確認してから、そのようなダイアログをユーザーに提示し、ユーザーが応答するまでUIをブロックします。次に、実際の呼び出しを行います。これもREST APIでモデル化する必要があります。エンドポイントを追加して、特定のタスクを実行するために保存するかどうかを確認します。このようにして、すべてのAPIユーザーは「プリフライト」チェックを行い、決定をユーザーに委任することもできます。HTTPステータスコードのアプローチはrm /file、ファイルを削除中に読み取り専用であることを「警告」するようなものです。
try-catch-finally

これは、ビジネスがプロトコルステータスコードと重複している場合に発生します。いずれかの方法。独自の「HTTPステータスコード」を使用しようとしましたか?Twitterができれば、あなたも。たとえば、6xxとしましょう。とにかくこれまで私が知っているように、4xxの場合でも、メッセージを応答の本文に追加できます(この範囲はあなたのケースで適用されます)。
ライヴ

最後に409 CONFLICT、警告応答に使用し ました。この方法では、クライアントは、それが「= 1力」exttraパラメータと同じエンドポイントと身体との通話を強制できることを指示されている
user237329

回答:


4

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

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

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

サーバーにリクエストを出して、ユーザーがコースのステータスを変更できるかどうかを尋ね、その後適切なリクエストを続けることができます。


私がそれを行うのが正しいことであるとは決して言いませんが、3xxコードは、クライアントが続行することを決定する可能性がある通知または警告コードのようなものと見なされる可能性があります。そうは言っても、アクションを実行するか実行しないかのどちらかであり、返された本文またはヘッダーに追加情報を含む応答を返す可能性があります。
Archimedix

0

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

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

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


2
「失敗しました」という応答は好きではありませんでした:-)
gbjbaanb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.