0

APIのステータスを示すWebサイトを書きました。

  • endpoints.rb は、良いエンドポイントと悪いエンドポイントを含むハッシュを返します
  • apiStatusWebsite.rb は endpoints.rb を使用しており、status.erb をレンダリングします

コード:

require 'sinatra'
require 'endpoints.rb'  


def updateStatus                
    get '/status' do

        endpointObject = Endpoints.new(getApiServerURL("qa"))
        result = endpointObject.checkApiStatus() 

        erb :status, :locals => { :apiData => result} 

    end
end
  • html コンテンツを含む status.erb

問題:

1) API は 100 秒あたり 100 のリクエストを許可します。3 人が API ステータス サイトを呼び出している場合、サーバーはユーザーごとに 45 のリクエストを API に送信します -> サーバーは 100 秒間禁止され、ステータス サイトは役に立たなくなります。

2) 問題 1 の特別なヘッダーを送信できますが、API に負荷をかけるためにステータス サイトが悪用される可能性があります (可能性は低いですが、可能性はあります)。

可能な解決策:

/status は、API のステータスを表示するだけで、呼び出していませんendpointObject.checkApiStatus()。このチェック プロセスは、バックグラウンドで 2 分ごとに自動的に行われ、html ファイルが作成されます。この html ファイルは apiStatusWebsite2.rb からロードされます。

 require 'sinatra'

 get '/status' do

   send_file 'status.html'

 end

しかし、現在の apiStatusWebsite.rb がレンダリングするこの html ファイルを保存する方法は?

4

1 に答える 1

0

API から返される値を永続化する何らかの方法が必要です。HTML ファイルを使用することは有効な方法ですが、より良いオプションがあります。HTML なしの応答のみをダンプすることをお勧めしますが、それよりもさらに良いのは、それをメモリに保持し、アプリが閉じているとき、またはしばらく呼び出しがなかったときにのみダンプすることです。ファイルにダンプする必要もありません。データベースまたは任意の種類の永続ストアを使用できます。これを処理または支援するライブラリがありますこれらのライブラリのいくつかも見てください。

また、Sinatra からの応答をキャッシュして、頻繁に API をヒットしないようにすることを検討してください。Sinatra のドキュメントで Sinatraとキャッシュ コントロールを使用して応答をキャッシュする方法について簡単に紹介しているこの記事を参照してください。

于 2013-11-04T11:05:59.767 に答える