問題タブ [idempotent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
106 参照

http - URL、ヘッダー、および本文に基づいてべき等 POST をキャッシュ可能にするにはどうすればよいですか?

/searchエンドポイントを公開する Web サービスを考えてみましょう。そのエンドポイントでのすべての操作は、べき等であるため、GET メソッドの適切な候補になります。ただし、検索パラメーターが複雑なため、URL が非常に長くなり、クライアント、プロキシ、またはサーバーでさえ (RFC でハード制限が指定されていないにもかかわらず) 適切に処理されない場合があります。

したがって、唯一の代替手段は、POST を使用して、要求の本文で検索基準を渡すことです。応答が現在キャッシュ可能ではないという事実がなければ、大したことではありません。URL、一部のヘッダー (受け入れ)、および完全な応答に基づいてキャッシュ可能性を定義することはできません。body (実際の検索基準がある場所)。

HTTP/1.1 にはこの点が欠けており、問題に対する洗練されたシンプルな解決策がないと考えるのは正しいでしょうか?

ありがとう

0 投票する
3 に答える
2484 参照

rest - べき等な方法でリソースの名前を変更する方法は?

次のように、会社の名前を変更する API を実装しました。

会社の新しい URI: を指すヘッダーで返さHTTP 301れます。Location/companies/B

If-Matchヘッダーの有無にかかわらず、この操作を冪等にするにはどうすればよいですか?

  1. ヘッダーなしIf-Match: ユーザーが存在しない会社の名前を変更しようとすると、サーバーが返されることを期待しますがHTTP 404、正当な名前変更操作はべき等ではないため、そうすることができません (最初に返さ301れ、最初に返され、404後続の呼び出しで)。失敗した名前変更 (会社が存在しない) と既に行われた名前変更をクライアントが区別できるようにしたいので、これは問題です。

  2. If-Matchヘッダーあり: 会社が会社名に依存している場合、ETag前提条件が成り立たなくなるため、その後の名前変更操作は失敗します。繰り返しますが、これにより、実際には既に実行されている操作が失敗したように見えます。

0 投票する
1 に答える
549 参照

domain-driven-design - CQRSで要約/レポートを処理するには?

私はホテル予約プロジェクトに取り組んでいます。新しい機能では、顧客がホテルについてコメントできる必要があります。各コメントには評価があります (0 --> 5)。ホテルの検索ページでは、各ホテルの平均評価が表示されます。

コメントの追加は非常に簡単で、CommentAddedEvent を発行できます。

クエリ側では、このイベントでコメント行が保持されます。

しかし、ホテルの平均評価を表示する方法が遅くなりました。考えられる解決策は次のとおりです。

a) データベース統合

検索ホテルのクエリ側では、sql 関数を使用して平均を取得します。

これは簡単に見えますが、テストにより多くの労力がかかり、パフォーマンスの問題が発生する可能性があると考えています。

b) 平均を計算する EventHandler

CommentAddedEvent をサブスクライブするイベント ハンドラーを追加し、平均を計算します。

テストは簡単ですが、このソリューションはべき等ではないようです。イベント ハンドラーは、何かが失敗したときに重複したイベントを処理する場合があります。

c) スケジュールされたタスク

スケジュールされたタスクを追加し、各ホテルのコメントをまとめます。しかし、これは、最後のタスク以降にコメントされていない一部のホテルにとっては非効率的です。

d) イベント ハンドラーが混在するスケジュールされたタスク

イベント ハンドラーを使用して、最後のタスク以降にコメントされたホテルをマークします。

また、カウントが 0 より大きいホテルに基づいてサマリー タスクをスケジュールします。

ソリューション D は冪等であり、より効果的です。私たちが作ったいくつかの欠陥やその他の解決策はありますか?

0 投票する
1 に答える
710 参照

filter - AngularDart カスタム フィルター call() メソッドはべき等である必要がありますか?

Angular Dart チュートリアルの主な実行例は、レシピ ブック アプリですフィルターとサービスに関する第 5 章の最後にある演習では、"レシピに記載されている [各材料の] すべての量を乗算する [カスタム] フィルターを作成し、"ユーザーが 2 倍、3 倍、または"レシピを 4 倍にします。」たとえば、「小麦粉 1/2 カップ」の材料は、2 倍にすると「小麦粉 1 カップ」になります。

私はそのようなカスタム フィルターを作成しました: s のリスト( aと aIngredientで構成される) を受け取り、新しい s の新しいリスト(数量を増やしたもの) を返しますが、次のエラーが発生します。quantitydescriptionIngredient

私の質問は: AngularDart カスタム フィルターcall()メソッドの必須および/または許可された動作は何ですか? たとえば、入力リストから要素を削除 (つまり、フィルター) することは明らかに許可されていますが、新しい要素を追加したり、要素を置き換えたりすることはできますか? Dart angular.core NgFilterのドキュメントには、単に「フィルターは呼び出しメソッドを持つクラスである」と書かれています。詳細は見つかりませんでした。

この AngularJS postへの回答から推定すると、(最終的には?) shouldを繰り返し呼び出してもcall()「同じ結果」が得られるように思われます。もしそうなら、これは合理的な制約になります。

「同じ結果」をもたらすことは、べき等である必要があることを意味する可能性call()がありますが、Dart の場合、そのようなべき等性は、 (オブジェクトの同一性) ではなく (オブジェクトの等価性)に関連する必要があります。問題を説明するために、次の小さな例を使用していくつかのテストを実行しました。==identical()

  • main.dart
  • index.html の抜粋

体を変えるclass A

これにより、すべてのインスタンスがA見なされますが、 main.dart==の 2 番目の実装 ( を含むもの) では、(別のものではありますが) それでもエラーが発生します。call()add(new A())

カスタム フィルターを使用せずにチュートリアルの演習を解決する方法はわかりますが、要求どおりに機能するフィルターを見つけるという課題をあきらめないようにしています。私は Angular を初めて使用するので、AngularDart を使用することにしました。そのため、 のさまざまなフレーバーの効果を説明しcall()たり、 の予想される動作に関するドキュメントを見つけたりするのに役立ちますcall()(または、そのようなカスタム フィルターが単純にできないと思われる場合はお知らせください)。書いてください!) よろしくお願いします。

0 投票する
1 に答える
1346 参照

sql - OrientDB JDBC Driver を使用したべき等でない SQL コマンド

こんにちは。JDBC ドライバーを使用して Plocal Orient DB に接続しているときに問題に直面しています。これが私のコードです:

そしてここに例外スタックがあります。

スレッド「メイン」での例外 com.orientechnologies.orient.core.exception.OCommandExecutionException: com.orientechnologies.orient.core.storage.OStorageEmbedded.executeCommand(OStorageEmbedded.java:90) で非べき等コマンドを実行できません com.orientechnologies.orient .core.storage.OStorageEmbedded.command(OStorageEmbedded.java:85) com.orientechnologies.orient.core.sql.query.OSQLQuery.run(OSQLQuery.java:69) com.orientechnologies.orient.core.sql.query .OSQLSynchQuery.run(OSQLSynchQuery.java:82) com.orientechnologies.orient.core.query.OQueryAbstract.execute(OQueryAbstract.java:29) com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.query(ODatabaseRecordAbstract) .java:505) com.orientechnologies.orient.core.db.ODatabaseRecordWrapperAbstract.query(ODatabaseRecordWrapperAbstract.java:188) com.orientechnologies.orient.jdbc.OrientJdbcPreparedStatement.executeQuery(OrientJdbcPreparedStatement.java:73) で org.octopus.dao.jeudonnees.impl.JdbcJeuDonneesDAO.create(JdbcJeuDonneesDAO.java:39) で org.octopus.dao.jeudonnees org.octopus.tests.tests.main(tests.java:23) の .impl.JdbcJeuDonneesDAO.create(JdbcJeuDonneesDAO.java:1)

Orient JDBC Driver を使用してべき等でないコマンドを実行することはできないようです。ご協力いただきありがとうございます

0 投票する
2 に答える
412 参照

azure - 非トランザクション統合タスク用の Azure ワーカー ロールの複数のインスタンス

サードパーティからデータを取得するために、さまざまなトランスポートを介してサードパーティと統合する必要がある次のプロジェクトがあります。

WCF エンドポイントや Web API Rest エンドポイントなどは問題ありません。

ただし、2 つのシナリオでは、xml を含む自動生成された電子メールを pop3 アカウントから取得するか、外部 SFTP アカウントから xml ファイルを取得する必要があります。

私は今、これらのプロトタイピングを開始しようとしていますが、マルチインスタンスのワーカー ロール環境でこれらの非トランザクション システムを処理する方法について、標準的なプラクティス、パターン、またはガイドラインがあるのではないかと考えています。すなわち

2 人のワーカーが pop アカウントまたは同じ FTP に同時に接続するとどうなりますか。

あるワーカーが FTP からファイルを削除し、別のワーカーがダウンロード中にファイルを削除するとどうなりますか。

アプリケーション側のすべてをデータベースに記録し、すべてを一意に識別できるようにする必要があるため、複製の制御は問題になりません。そのため、if-not-exists-create-else-skip ロジックを労働者ですが、それをより回復力/べき等にするために検討すべきことは他にあるのではないかと思っています。