2014-01-06 2 views
1

В моем приложении Rails 4 я имею дело с API, который обрабатывает только XML (да, я бы хотел, чтобы это был JSON).Рельсы и запросы XML

Мне нужно сделать запрос POST, и строка XML должна храниться в параметре xmlRequestString.

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

BTW, xml data - буквально просто текстовая строка: в этом нет ничего волшебного. Вы можете сделать текстовую строку, как хотите. –

+0

спасибо большое за это - я буду проверять его сейчас, а затем кредит, если он работает. cheers – tommyd456

+0

Я думаю, он никогда не работал, так как в это время нет кредита ... @ tommyd456 –

Смежные вопросы