2014-01-06 46 views
1

在我的Rails 4应用程序中,我正在处理只处理XML的API(是的,我希望它也是JSON)。Rails和XML请求

我必须做一个POST请求,并且XML字符串应该存储在一个名为xmlRequestString的参数中。

为POST数据的XML结构为:

<?xml version="1.0" encoding="UTF-8"?> 
<GetProperties> 
    <Auth> 
    <VendorId>UserID</ VendorId> 
    <VendorPassword>Password</VendorPassword> 
    </Auth> 
</GetProperties> 

因为我从来没有碰过XML之前可能有人告诉我我怎么会真的发表了这一数据。

会是这样的一个很好的方式去做它(从这里借:Submitting POST data from the controller in rails to another website)?

require "uri" 
require "net/http" 

xml = 'xml string can go here' 
params = {'xmlRequestString' => xml} 
Net::HTTP.post_form(URI.parse('urlendpoint'),params) 
+0

你可以列出你已经先尝试? – kddeisz

回答

2

您可以将其保存为一个模板,并使用像常规html.erb模板中的实例变量。或者,您可以将其作为模型中的一种方法。无论哪种方式,您都使用了一些需要一些动态数据的东西,并返回一个文本字符串,其中包含xml。然后,在您的控制器中,渲染模板或调用方法(如果将其放入模型中)并将其发布到api。

#Template method of generating xml 
#app/views/properties/get_properties.rxml 
xml.instruct! :xml, :version=>"1.0", :encoding => "UTF-8" 
xml.GetProperties do 
    xml.Auth do 
    xml.VendorId do 
     <%= @user_id %> 
    end 
    xml.VendorPassword do 
     <%= @password %> 
    end 
    end 
end 

然后,控制器,调用API:

@user_id = "foo" 
@password = "bar" 
xml_string = render :template => "properties/get_properties.rxml", :layout => false 
http = Net::HTTP.new("www.the-api-website.com") 
response = http.post("/path/to/call/the/api", xml_string) 
+0

顺便说一句,xml数据实际上只是一个文本字符串:没有什么不可思议的。您可以根据需要设置文本字符串。 –

+0

非常感谢这个 - 我现在会测试它,然后如果它能正常工作,就可以信任你。欢呼声 – tommyd456

+0

我猜它从来没有工作,因为在这个时候没有信用... @ tommyd456 –