Can someone provide an example for how to post XML using HTTParty and Ruby on Rails?

Mike G picture Mike G · Sep 22, 2010 · Viewed 8.9k times · Source

I need to post some xml to a webservice and I'm trying to use HTTParty. Can someone provide an example as to how I go about doing so?

Here is the format of the XML I need to post:

<Candidate xmlns="com.mysite/2010/10/10" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<FirstName></FirstName>
<LastName></LastName>
<Email></Email>
<Gender></Gender>
</Candidate>

Here is my class so far:

require 'httparty'


class Webservice
  include HTTParty
  format :xml
  base_uri 'mysite.com'
  default_params :authorization => 'xxxxxxx'

  def self.add_candidate(first_name,last_name,email,gender)
    post('/test.xml', :body => "")    
  end  
end

I'm not quite sure how to flesh out add_candidate.

Any help would be appreciated.

Thanks.

Answer

vonconrad picture vonconrad · Sep 23, 2010

You've got two options. HTTParty allows you to post both a string or a hash.

The string version would be:

post('/test.xml', :body => "<Candidate xmlns=\"com.mysite/2010/10/10\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><FirstName>#{first_name}</FirstName><LastName>#{last_name}</LastName><Email>#{email}</Email><Gender>#{gender}</Gender></Candidate>")

Functional, but not pretty. I'd do this instead:

post('/test.xml', :body => {
  :Candidate => {
    :FirstName => first_name,
    :LastName  => last_name,
    :Email     => email,
    :Gender    => gender,
  }
}

Now, I can't say for sure whether the namespaces are required by the endpoint, and if so, whether the hash version will work. If that's the case, you may have to go with doing the body as a string.