2013-11-03 62 views
0

我寫了一個顯示我們api狀態的網站。Ruby/Sinatra/erb:save html fle

  • 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 
  • status.erb與html內容

問題:

1)該API允許每100秒100個請求。當3個人在呼叫api狀態站點時,那麼服務器向每個用戶發出45個請求,以禁止api->服務器100秒,狀態站點無用。

2)我可以發送一個特殊的報頭的問題1,但隨後狀態的網站會被濫用於把負載的API(不可能的,但還是有可能)

可能的解決方案:

/狀態正說明api狀態,但不會調用endpointObject.checkApiStatus()。這個檢查過程應該在後臺每2分鐘自動發生一次,並創建一個html文件。此HTML文件將從apiStatusWebsite2.rb

require 'sinatra' 

get '/status' do 

    send_file 'status.html' 

end 

但如何保存其當前apiStatusWebsite.rb呈現此HTML文件被加載?

+1

爲什麼不只是緩存來自API的響應?無需保存HTML文件。 – iain

+0

thx會嘗試,但你也可以告訴我如何使用sinatra緩存,我是新的。 – user2211703

回答

0

您需要一些方法來保留從API返回的值。使用HTML文件是一種有效的方式,但有更好的選擇。更好的辦法是隻轉儲響應sans HTML,但甚至比將它保存在內存中更好,只有在應用程序關閉或暫時沒有調用時才轉儲它。您不必轉儲到文件,也可以使用數據庫或任何類型的持久性存儲。 There are libraries that will handle or help with this。看看some of these libraries too,然後你就可以更好地瞭解你可能想要嘗試的事情。

此外,考慮緩存從西納特拉的答覆停止擊中API所以很多時候,看到this article that gives a quick intro to caching responses with SinatraCache Control in the Sinatra docs