web-dev-qa-db-ja.com

REST APIは、WebSocketがすでに開いているときに使用する必要がありますか?

背景web-socketアプリケーション REST APIを使用する、より一般的なhttpリクエストベースのWebサイトに統合されました。

タスク:そのアプリケーションのデータベースからユーザー履歴を取得する必要があります。この履歴を取得する必要がある場合、アプリケーションはopenであることが前提です。さらに、データベース内の履歴の更新/削除/変更をトリガーすることは関係ありません(将来もそうではありません)。

分析:いくつかのオンラインリソースの読み取りに基づいて、REST APIスケーラビリティ、大規模なデータセットのバイナリ形式への変換、およびキャッシングのため)に推奨されるという一般的な考えを得ました while websockets許可サーバーからフロントエンドへの通信と高速化接続を毎回開いたり閉じたりする必要がないため。ただし、私のアプリケーションでは、websocket自体を使用する方が良いように感じます。

  • 追加のhttpリクエストが追加の負荷である間、それはすでに開いています。
  • 送信するデータは基本的にテキストであり、一度に必要なのは履歴全体のごく一部です。
  • 認証されたWebSocketが既に開いているときに、なぜ認証/フィルタリングを再度行うのですか?また、提供する更新/削除メソッドが決して使用されないのに、なぜシリアライザを記述してAPIを定義するのですか?

質問TL、DR WebSocketアプリケーションの単純な関数は、REST APIよりも履歴検索の仕事がうまくいくと思います私の場合では、しかし、私は初心者であり、状況の分析が合理的であるかどうかを確認せずに標準設計に頼りたくありません。

1
vonSchweetz

複雑な質問。

一見すると、そうです、WebSocket接続が開いている場合は、それをすべてに使用する必要があります。

アプリに単一のバックエンドアプリケーションによってすべて提供される機能の限定セットがあり、WebSocketがすでに機能している場合は、これで問題ありません。

しかしながら。 get history APIが別のアプリケーションである場合はどうでしょうか。すべてをマイクロサービスに分割し、リソースを集中的に使用するため、アプリケーションバックエンドよりも多くのボックスでこれを負荷分散しました。

既存のWebSocket接続を介して直接呼び出すことはできません。これはアプリのバックエンドに接続します。そのため、バックエンドにメソッドを追加し、そのAPIを呼び出して結果を返すようにする必要があります。これにより、バックエンドにわずかな負荷と複雑さが追加されます。これは受け入れられますか?そのようなAPIが複数ある場合はどうなりますか?

また、接続が1つしかない場合は、一度に1つのメッセージを送受信するだけです。大きな画像のダウンロード中など、チャットメッセージのフィードを遅らせてもよろしいですか?.

REST=の大きな利点は、HTTPを使用するため、多くのハードネットワーキングの問題がブラウザによって処理されることです。他のプロトコルほど効率的ではありません。しかし簡単

0
Ewan