2016-07-06 3 views
1

をNodejsユースケースである:プロンプトユーザーがAPIを完了する前に警告がここ

ユーザーがAPIを呼び出します。 APIは以前に保存されたものを上書きしていることを発見しました 先に進んで完了するには、「はい、先に進み、上書きする」または「いいえ、上書きしないでください」と言う必要があります。だから基本的に応答を返信し、ユーザーの選択の要求を取得し、 の操作を続行する方法 が必要です。

私の懸念は、以下のとおりです。

  • そうするベストプラクティスは何ですか?
  • 私がサービスを延期し、必要な選択肢として返信する場合。ユーザーが選択した後に同じAPIを起動する必要がありますか?

私はNodejs/ExpressとAngularjsを使用しています。

答えて

0

あなただけのAPIを開発したい場合は、次のいずれかを実行します

  1. をデータが存在するかどうかを確認するために、別のAPIを作成します。

    「canOverwrite」のようなAPIで別のフラグを作成し、データかどうかをAPIを呼び出す前にユーザーに確認:その後、

  2. は、ユーザー

かを確認した後にAPIを続行します存在する場合は上書きすることができます。

HTTPコールの代わりにWebSocketを使用すると、確認の際に柔軟性が得られます(ただし、AngularJSには適用されません)。

+0

データが1つのAPI呼び出し内に存在するかどうかを確認し、クライアント内のデータに基づいて判断を下すことが競合状態であるかどうかを確認します。データが存在するかどうかを変更する他のAPIリクエストとの競合状態を避けるために、チェックしてから上書きロジックを適用することは、サーバー上のアトミック操作である必要があります。 – jfriend00

+0

@j_kは以下のansで指摘されました。検証API間にデータ変更があり、操作apiを続行するとどうなるでしょう –

+0

APIがトランザクションデータを処理する場合は、apiを確認してPai –

1

各APIリクエストは、おそらくステートレスである必要があります。これを行うには、上書きが発生した場合にサーバーが何をすべきかを指示するオプションをAPIに追加します。クライアントは、存在する場合は上書きするか、上書きしないでデータがすでに存在する状態を返すかを指定できます。

次に、ユーザーにプロンプ​​トを表示して上書きを要求する2番目のAPI呼び出しを行うと、クライアント側の責任になります。これはクライアントの動作であり、サーバーのポリシーではありません。

クライアントが最初にdon't overwiteを送信してから、プロンプトが上書きを要求する2番目のAPI呼び出しを行った場合、サーバーは最初からAPI呼び出しを再実行する必要があります。 2番目の要求のパフォーマンスを向上させるために、最初の要求から何かを一時的にキャッシュできるかどうかは実装固有のものです。これは、他のパフォーマンス向上キャッシュと同じように、サーバー上での実装の選択です。

+0

これは私がそれをする方法です。 「上書き」フラグを持たないが実際に上書きされる要求は405を返し、クライアントは「既にデータでなければならず、明示的に上書きするように要求する必要がある」と解釈する。 – jonrsharpe

0

上記の@ jfriend00と同様に、REST APIはステートレスであると考えられます。しかし、あなたはバックエンドnodeJsコードを使ってこれを達成することができます。実際、それは国の錯覚ですが、本当はそうではありません。

ですから、これは単なるデータがデータベースに存在しているかどうかを確認し、UI

にtrueまたはfalseを送信し

  1. /データ/検証

    のような2つのエンドポイントを持っているでしょう

  2. /データ/私は今

    を追加ユーザーがUI上の「上書き」ボタンまたは何かを上書きしてクリックしたい場合は、データを上書きする要求をこのエンドポイントに送信します。

ユーザーが上書きしたくない場合は、追加エンドポイントを呼び出さないでください。

+0

この問題は、検証と追加の間に他の人がデータを追加している可能性があることです。 addエンドポイントは、この場合、正常に動作する必要があります。それが呼び出されている場合は、上書きする必要があるものを想定するだけではありません。これを示唆した他の答えについては、http://stackoverflow.com/questions/38216592/prompt-user-a-warning-before-completing-a-api-nodejs/38216707#comment63856612_38216707も参照してください。 – jonrsharpe

+0

良い点。ベリファイAPIには、指定された時間のようにデータをロックするフラグを設定することができますか?その後の検証呼び出しではlockStateをチェックし、ロックされていれば終了します。そうすれば、競争状態を回避することができます。 – Srijith

+0

だからステートフル?それだけではない。それはうまくいくでしょうが、それほどRESTfulではありません! – jonrsharpe

関連する問題