代码:
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
问题:
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文件?
答案 0 :(得分:0)
您需要某种方法来保留从API返回的值。使用HTML文件是一种有效的方法,但有更好的选择。更好的方法是只转储没有HTML的响应,但更好的是将它保存在内存中,只在应用程序关闭或没有调用一段时间时转储它。您不必转储到文件,也可以使用数据库或任何类型的持久性存储。 There are libraries that will handle or help with this。看看some of these libraries too,然后您就可以更好地了解您可能想要尝试的事情。
另外,请考虑缓存Sinatra的响应,以便经常停止访问API,请参阅this article that gives a quick intro to caching responses with Sinatra和Cache Control in the Sinatra docs