【问题标题】:Generate XML dynamically and post it to a web service in Rails动态生成 XML 并将其发布到 Rails 中的 Web 服务
【发布时间】:2013-07-30 21:45:09
【问题描述】:

我目前正在开发一个 Rails 应用程序,我需要在其中动态地将 XML 请求发送到外部 Web 服务。我以前从来没有这样做过,我有点迷茫。

更准确地说,我需要在订单状态更新时向我的物流合作伙伴发送请求。例如,当订单确认后,我需要发送客户地址、取货地址等数据...

我打算根据this example,使用 XML 构建器动态生成请求并使用 Net:HTTP 或 HTTParty 发布请求。

这是正确的做法吗?如何在控制器外部生成 XML 请求,然后在 HTTParty 或 Net:HTTP 中使用它?

感谢您的帮助,

克莱姆

【问题讨论】:

    标签: ruby-on-rails xml builder httparty net-http


    【解决方案1】:

    这种方法可以正常工作。

    至于如何在需要的地方获取 XML,就像传递任何其他数据一样。您可以使用 Builder 表示,它将根据需要自动转换为 String,或者您可以传递 Builder 对象的字符串化 (to_s) 版本。

    例如,如果您的模型(我们将其称为 OrderStatus)生成 XML 并让您的控制器发布请求是有意义的:

    # Model (order_status.rb)
    def to_xml
      xml = Builder::XmlMarkup.new
      ... # Your code here
      xml
    end
    

     

    # Controller (order_statuses_controller.rb)
    def some_method
      @order_status = OrderStatus.find(:some_criteria)
      ... # Your code here
      http = Net::HTTP.new("www.thewebservicedomain.com")
      response = http.post("/some/path/here", @order_status.to_xml)
    end
    

    您可能希望将 HTTP 调用包装在 begin/rescue/end 块中并对响应执行一些操作,否则这一切都非常简单明了。

    使用 Builder 制作 XML,然后将其发送出去。

    在您的情况下,随着订单的发展,您可能需要发送几个不同的请求;在这种情况下:

    1. 规划您可能的订单状态。
    2. 确定每个州需要发送哪些数据。
    3. 决定如何在模型中表示该状态,以便在状态更改时发送适当的请求。

    我的示例使用一种方法来生成 XML,也许您需要 5 种方法来处理 5 种可能的订单状态。

    【讨论】:

    • 非常感谢您的回答 colnm 并提供有关如何生成 XML 的详细信息!事实上,我需要为不同的状态发送几个不同的请求(用状态机表示),但我想我现在可以处理了!
    猜你喜欢
    • 2011-01-19
    • 2011-04-22
    • 2015-10-17
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2014-04-28
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多