从ruby中的post请求创建对象

时间:2011-07-10 22:43:24

标签: ruby-on-rails ruby json rest post

这个问题是关于我正在构建的2个rails应用程序。我试图了解Rails和宁静的Web服务。大多数代码都是伪代码但如果需要,我想我可以尝试一些例子。

还会引入一些基本的rails和Web请求。

想象一下,我有一个rails程序A和B.我希望A发送一个post请求,它基本上包含一个用JSON格式化的对象(不是必需但是计划好的)和B来接收它并把它变成我想要的对象。所以至少是我的计划或概念,我希望得到一些反馈。

暂时关注B。

这样的网址

127.0.0.1:8080/receive

会链接到类似

的内容
def recieve (assuming routes are setup correctly)


@object = (this is where im a bit lost. how do i receive it from URL)
@request = UserRequest.new(params[:request])

许多教程似乎专注于发送帖子请求但从未接收或处理它们。有人指出我正确的方向吗?


对于A

我知道如何发送帖子请求

 @stringParams = 'www.stackoverflow.com'
    @hostURL = 'http://127.0.0.1:20000/requests/add'
    #This is a post request that needs to post json to my recieveing crawler
    res = Net::HTTP.post_form(URI.parse(@hostURL),
    {'url' =>  @stringParams})
    #puts res.body

我知道如何从哈希

创建JSON对象
 @myHash = HASH.new
    @myHash =
    {
      "url" => 'www.stackoverflow.com'
       #Assume theres more than one variable
    }

@myJsonHash = @myHash.to_json

所以A的问题是如何在帖子请求中发送@myJsonHash。或者这是一件非常愚蠢的事情,我误解了这些要求吗?

2 个答案:

答案 0 :(得分:2)

您将在参数中接收数据。你应该知道哪些参数包含什么。

def receive
  @object = Object.new({:name => params[:name], :address => params[:address] })
  if @object.save
    #ok
  else
    #error
  end
end

谨防跨站点帖子,您应该实现某种身份验证。

答案 1 :(得分:0)

应用程序A和应用程序B之间存在一层通信:HTTP

HTTP定义请求类型,其中一个是POST

当POST请求到达您的rails应用程序时 - 所有POSTed数据都可以通过控制器中的params方法访问

最好从解释应用程序应如何发送帖子请求开始

看看这个宝石:httparty

允许您使用最少量的代码发送所有类型的请求:

class BParty
  include HTTParty

  base 'http://b'

  def self.pass(object)
    post('/receive', :body => {:object => object.to_json})
  end
end

对B应用程序发布请求现在就像

一样简单
BParty.pass(object)      

就是这样。现在在应用程序B方面,你只需要这样做:

@object = JSON.decode(params[:object])

希望有所帮助,如果我犯了拼写错误,请不要踢我 - 所有代码都来自头部而不进行测试