0

我写了一个网站来显示我们 api 的状态。

  • 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 上施加负载(不太可能但仍然可能)

可能的解决方案:

/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 回答