7

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

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

基于此示例,我打算使用 XML 构建器动态生成请求并使用 Net:HTTP 或 HTTParty 发布请求。

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

谢谢你的帮助,

克莱姆

4

1 回答 1

7

这种方法会很好用。

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

例如,如果您的模型(我们将其称为 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//块rescueend并对响应进行处理,但除此之外,一切都非常简单明了。

使用 Builder 制作 XML,然后通过网络发送。

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

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

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

于 2013-07-30T19:09:00.943 回答