tommyd456
tommyd456

Reputation: 10673

Rails and XML requests

In my Rails 4 app I am dealing with an API that only handles XML (yes I wish it was JSON too).

I have to make a POST request and the XML string should be stored in a parameter called xmlRequestString.

The XML structure for the POST data is:

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

As I have never even touched XML before could someone show me how I would actually post this data.

Would something like this be a good way of going about it (borrowed from here: 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)

Upvotes: 1

Views: 5472

Answers (1)

Max Williams
Max Williams

Reputation: 32933

You can save this as a template, with instance variables like in a regular html.erb template. Or, you could have it as a method in a model. Either way, you're using something that takes some dynamic data and returns you a text string, that has the xml in it. Then, in your controller, render out the template, or call the method (if you put it in a model) and post it to the 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

Then, in a controller, call the 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)

Upvotes: 2

Related Questions