2013-07-30 6 views
5

Attualmente sto sviluppando un'app Rails in cui ho bisogno di inviare dinamicamente la richiesta XML a un servizio Web esterno. Non l'ho mai fatto prima e sono un po 'perso.Genera XML in modo dinamico e pubblicalo su un servizio Web in Rails

Più precisamente ho bisogno di inviare richieste al mio partner logistico quando lo stato di un ordine viene aggiornato. Ad esempio, quando un ordine è confermato, devo inviare dati come l'indirizzo del cliente, l'indirizzo di ritiro, ecc ...

Ho inteso utilizzare il generatore XML per generare dinamicamente la richiesta e Rete: HTTP o HTTParty per postare la richiesta, basata su this example.

È il modo giusto per farlo? Come posso generare la richiesta XML al di fuori del controller e quindi utilizzarla in HTTParty o Net: HTTP?

Grazie per il vostro aiuto,

Clem

risposta

6

Questo metodo funziona bene.

Per quanto riguarda come ottenere l'XML dove è necessario, basta passarlo come qualsiasi altro dato. È possibile utilizzare la rappresentazione Builder, che verrà convertita automaticamente in una stringa, a seconda dei casi, oppure è possibile aggirare una versione con stringhe (to_s) dell'oggetto Builder.

Se, ad esempio, ha senso per il proprio modello (che chiameremo OrderStatus) per generare il codice XML, e per il controller di inviare la richiesta:

# 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 

Si consiglia di avvolgere le chiamate HTTP in un blocco begin/rescue/end e fare qualcosa con la risposta, ma altrimenti è tutto abbastanza semplice e diretto.

Creare XML con Builder, quindi inviarlo via cavo.

Nel tuo caso sembra che tu possa aver bisogno di inviare diverse richieste man mano che l'ordine evolve; in tal caso:

  1. Pianifica quali sono i tuoi possibili stati di ordine.
  2. Determinare quali dati devono essere inviati per ogni stato.
  3. Decidere come rappresentare quello stato all'interno dei modelli, in modo da poter inviare la richiesta appropriata quando lo stato cambia.

Nei casi in cui il mio esempio utilizza un metodo per generare XML, forse vorrai 5 metodi per gestire 5 possibili stati di ordine.

+0

Grazie mille per la risposta e per fornire dettagli su come generare l'XML! Infatti, dovrò inviare diverse richieste per i diversi stati (rappresentati con una macchina di stato) ma penso di poterlo gestire ora! – ClemDoum

Problemi correlati