Spark フレームワークを使用して Java で作成された REST API がありますが、現在、リクエスト スレッドで多くの作業が行われているため、リクエストの速度が大幅に低下しています。
リクエストスレッドから必要なすべての作業を行うバックグラウンドワーカー/キューを作成することで、これを解決したいと考えています。サーバーからの応答には、クライアントが必要とするデータ (表示されるデータ) が含まれています。これらの例では、クライアントは Web ブラウザーです。
現在のサイクルはこんな感じ
- クライアントからサーバーへの API リクエスト
- サーバーはブロッキング作業を行います。数秒/分後のサーバーからの応答
- クライアントが応答を受け取ります。応答に必要なすべてのデータがあります
これが私が望むものです
- クライアントからサーバーへの API リクエスト
- サーバーはオフスレッドで動作します
- クライアントはサーバーからほぼ瞬時に応答を受け取りますが、必要なデータがありません。この応答には、実行中の作業の進行状況を確認するために使用できる ID (整数または UUID) が含まれます。
- クライアントは、実行中の作業のステータスを定期的にチェックします。応答には、ステータス (パーセンテージや推定時間など) が含まれます。作業が完了すると、応答には必要なデータも含まれます
このアプローチの嫌いな点は、API が非常に複雑になることです。データを取得したい場合は、2 つの要求を行う必要があります。1 つはブロッキング作業を開始するためのもので、もう 1 つはステータスをチェックするため (およびブロッキング作業の結果を取得するため) です。API が複雑になるだけでなく、バックエンドも複雑になります。
これは効率的ですか、それとも私が達成したいことを実装するためのより良い方法はありますか?