【问题标题】:Setting post parameters in Sinatra with data from an API使用来自 API 的数据在 Sinatra 中设置发布参数
【发布时间】:2014-01-08 16:19:45
【问题描述】:

我想要一个 GET 路由来查询 API 以收集数据,然后重定向到带有该数据的 POST 以保存到数据库。例如:

get '/query/twitter/company/:name' do
    get_number_of_tweets_for_day( params[:name] )
end

POST '/company/tweets/' do
    company.tweets.create(:date => time_now, :count => num_tweets)
end

如何从 GET 路由中的函数返回的数据中设置参数,并将它们传递给 POST 路由,以便我可以保存到 DB?

【问题讨论】:

    标签: ruby api sinatra sqlite3-ruby


    【解决方案1】:

    您的代码有两个完全独立的端点,它们在不同的 API 请求中调用。您可以将其设为单个 POST 请求,即:

    post '/company/:name/tweets/' do
      num_tweets = get_number_of_tweets_for_day( params[:name] )
      company.tweets.create(:date => time_now, :count => num_tweets)
    end
    

    作为替代方案,为了在后续请求之间持久化数据,您通常会使用会话:

    enable :sessions
    
    get '/query/twitter/company/:name' do
      session['num_tweets'] = get_number_of_tweets_for_day( params[:name] )
    end
    
    post '/company/tweets/' do
      company.tweets.create(:date => time_now, :count => session['num_tweets'])
    end
    

    从 GET 到 POST 的重定向是不可能的,因为浏览器会在重定向后保持请求方法相同。您也必须将您的第一条路线设为 POST。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2013-12-06
      • 2017-11-23
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2019-01-26
      相关资源
      最近更新 更多