【问题标题】:creating an object from a post request in ruby从 ruby​​ 中的 post 请求创建对象
【发布时间】:2011-10-02 10:05:50
【问题描述】:

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

还有一些基本的 Rails 和 Web 请求。

假设我有 Rails 程序 A 和 B。我希望 A 发送一个发布请求,该请求基本上包含一个 JSON 格式的对象(不是必需的,但计划中的),B 接收它并将其转换为我想要的对象。所以这至少是我的计划或概念,我希望得到一些反馈。

所以现在专注于 B。

这样的网址

127.0.0.1:8080/接收

会链接到类似的东西

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 的问题是我如何在 post 请求中发送 @myJsonHash。还是那件事真的很愚蠢,我误解了要求?

【问题讨论】:

  • 不要让 stringParams 混淆。那是传递的字符串,而不是发送到的目标 URL。
  • offtopic:实例变量的驼峰式案例在 Ruby/Rails 中是不好的做法。使用@my_json_hash 而不是@myJsonHash。
  • @keymone 不错。在这方面,我的高级开发人员一直很阴暗。他只是希望它保持一致

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


【解决方案1】:

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

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

小心跨站发帖,你应该实施某种身份验证。

【讨论】:

  • 参数。那是从 URL 自动传入的?谢谢
  • 是的,您可以自动获取它们
  • @apeneadiving 我离得不远。如果没有包含 JSON 位的完整示例代码,我不应该发布这个问题。你的回答是正确的。我应该用零碎的东西编辑这个问题还是重新开始?
  • 最佳做法是接受答案并创建更精确的问题
  • 我已将问题分为 A 和 B。问题确实说有 2 个部分,但我将开始另一个线程
【解决方案2】:

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

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

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

最好先解释一下应用程序应该如何发送 post 请求

看看这个宝石:httparty

允许您以最少的代码发送各种请求:

class BParty
  include HTTParty

  base 'http://b'

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

现在向 B 应用程序发送 post 请求就像

BParty.pass(object)      

就是这样。现在在应用程序 B 端,您只需要这样做:

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

希望对您有所帮助,如果我打错字,请不要踢我 - 所有代码都是从头开始的,没有经过测试

【讨论】:

    猜你喜欢
    • 2022-09-28
    • 2020-08-01
    • 1970-01-01
    • 2021-08-01
    • 2021-03-23
    • 2019-08-05
    • 1970-01-01
    • 2019-01-10
    • 2023-03-28
    相关资源
    最近更新 更多