Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra...
Transcript of Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra...
![Page 1: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/1.jpg)
Rails y XML como herramienta de
Integración
obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’ de Creative Commons
![Page 2: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/2.jpg)
» ¿por qué xml?
» ¿por qué rails?
» ¿cómo?
» integración vía REST
![Page 3: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/3.jpg)
» estándar de facto, universal
» legible y flexible
» posibilidad de representar jerarquías
¿por qué xml?
![Page 4: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/4.jpg)
» iteradores cómodos
» consola para pruebas
» métodos y librerías de xml en la distribución
» conversión automática
¿por qué rails?
![Page 5: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/5.jpg)
» método to_xml
» builder
» XMLSimple
» REXML
¿cómo?
generación de xml
interpretaciónde xml
![Page 6: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/6.jpg)
<?xml version="1.0" encoding="UTF-8"?><topic>
<parent-id></parent-id><title>The First Topic</title><author-name>David</author-name><id type="integer">1</id><approved type="boolean">false</approved><replies-count type="integer">0</replies-count><bonus-time type="datetime">2000-01-01T08:28:00+12:00</bonus-time><written-on type="datetime">2003-07-16T09:28:00+1200</written-on><content>Have a nice day</content><author-email-address>[email protected]</author-email-address><last-read type="date">2004-04-15</last-read>
</topic>
xml básicoinstructinstruct
rootroot
attributeattribute texttext elementelement
![Page 7: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/7.jpg)
» xml desde cualquier modelo, con includes de primer nivel
» xml desde cualquier hash, incluso anidadas
» xml desde arrays si todos sus elementos responden a to_xml
método to_xml..
![Page 8: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/8.jpg)
» no soporta atributos
» sustitución de _ por - » :root, :except, :only, :skip_instruct, :include, :indent
..método to_xml.
![Page 9: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/9.jpg)
» permite generar cualquier xml de forma sencilla, con elementos, atributos, namespaces, contenido mixto y cualquier anidamiento
» permite lanzar eventos al estilo SAX
builder..
![Page 10: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/10.jpg)
xm.html do # <html>
xm.head do # <head>
xm.title("History") # <title>History</title>
end # </head>
xm.body do # <body>
xm.comment! "HI" # <!-- HI -->
xm.h1("Header") # <h1>Header</h1>
xm.p("paragraph") # <p>paragraph</p>
end # </body>
end # </html>
..builder..
![Page 11: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/11.jpg)
» Builder::XmlMarkup.new»:target»:indent»:margin
» instruct! (tag=:xml,attrs{})» <?xml version="1.0" encoding="UTF-8"?>
..builder..
![Page 12: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/12.jpg)
» comment!» xm.comment! 'test'
» <!– test -->
» declare!» xm.declare! :DOCTYPE :article :PUBLIC "//OASIS/DTD"
» <!DOCTYPE article PUBLIC "//OASIS/DTD">
» cdata!» xm.cdata! 'test'
» <![CDATA[test]]>
» text!» para texto no escapado puede usarse xm << 'test & >'
..builder..
![Page 13: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/13.jpg)
» method_missing» xm.evento 'conferencia rails'
» <evento>conferencia rails</evento>
» xm.evento 'conferencia',:id=>1,:year=>'2006'» <evento year="2006" id="1">conferencia</evento>
» xm.RAILS :evento, 'conferencia', :year=>'2006'» <RAILS:evento year="2006">conferencia</RAILS:evento>
»tag!
..builder..
![Page 14: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/14.jpg)
» contenido mixto<p class="weblink">visita la web<a href=
"http://www.conferenciarails.org"> conferencia rails</a></p>
xm.p('visita la web ',:class=>'weblink') doxm.a 'conferenciarails',
:href=>'http://www.conferenciarails.org'end
xm.p(:class=>'weblink') doxm.text! 'visita la web'xm.a 'conferencia rails',
:href=>'http://www.conferenciarails.org'end
..builder..
![Page 15: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/15.jpg)
» en vistas rxml, accesible mediante el objeto xml
» para usar partials» en el caller
»render partial=>'partial_name', :locals=>{parent_xml=>xml}
» en el partial»xml = parent_xml unless !parent_xml
..builder.
![Page 16: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/16.jpg)
»mapeo de xml a arrays/hashes ruby de forma sencilla
» depende de rexml. rexml viene con ruby y xmlsimple con rails
» es una adaptación de la librería perl XML::Simple
xmlsimple..
![Page 17: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/17.jpg)
» XmlSimple.xml_in nil|xml_string|filename|IO, args
» XmlSimple.xml_out (hash)
..xmlsimple..
![Page 18: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/18.jpg)
<opt><person firstname="Joe" lastname="Smith"> <email>[email protected]</email> <email>[email protected]</email></person><person firstname="Bob" lastname="Smith"> <email>[email protected]</email></person>
</opt>
{ 'person' => [ { 'email' => [ '[email protected]', '[email protected]' ], 'firstname' => 'Joe', 'lastname' => 'Smith' }, { 'email' => ['[email protected]'], 'firstname' => 'Bob', 'lastname' => 'Smith' }
] }
..xmlsimple..
![Page 19: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/19.jpg)
ForceArray (true|false) | ([lista])
<opt><person><email>[email protected]</email></person>
</opt>
XmlSimple.xml_in (xml,'ForceArray'=>true) {'opt‘=>[{'person' =>[{ 'email' => [ '[email protected]']}]}]}
XmlSimple.xml_in (xml,'ForceArray'=>false){'opt'=>{'person' =>{ 'email' =>'[email protected]'}}}
..xmlsimple..
![Page 20: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/20.jpg)
KeyAttr [lista] | {elemento=>lista}
<opt><user login="grep" fullname="Gary R Epstein" /><user login="stty" fullname="Simon T Tyson" />
</opt>
xml_in (xml, {'KeyAttr' => ‘login' })
{ 'user' => { 'stty' => { 'fullname' => 'Simon T Tyson' }, 'grep' => { 'fullname' => 'Gary R Epstein' } } }
xml_in (xml, {'KeyAttr' => { 'user' => "+login" }})
{ 'user' => { 'stty' => { 'fullname' => 'Simon T Tyson', 'login' => 'stty' }, 'grep' => { 'fullname' => 'Gary R Epstein', 'login' => 'grep' } } }
..xmlsimple..
![Page 21: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/21.jpg)
xml =%q( <opt> <x>text1</x> <y a="2">text2</y> </opt>)
{ 'x' => 'text1', 'y' => { 'a' => '2', 'content' => 'text2' }
ForceContentXmlSimple.xml_in(xml, { 'ForceContent' => true })
{ 'x' => { 'content' => 'text1' }, 'y' => { 'a' => '2', 'content' => 'text2' } }
ContentKeyXmlSimple.xml_in(xml, { 'ContentKey' => 'text' })
{ 'x' => 'text1',
'y' => { 'a' => '2', ‘text' => 'text2' }
..xmlsimple..
![Page 22: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/22.jpg)
» KeepRoot (true|false)
» RootName (xml_out) def:opt
» OutputFile (xml_out)
» SupressEmpty (true|nil|’’) def:[]
» Variables (name=>value) ${}
..xmlsimple..
![Page 23: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/23.jpg)
» XmlDeclaration (true|string)
» KeyToSymbol (true|false)
» NoEscape (true|false)
» NormaliseSpace (0|1|2)»0: sin normalizar»1: normaliza sólo hash keys»2: normaliza todo
..xmlsimple..
![Page 24: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/24.jpg)
» Si queremos usar varias veces los mismos parámetros de inicialización, podemos crear una instancia con las opciones deseadas
my_xml = XmlSimple.new (ForceArray=>true, KeepRoot=>true)
my_xml.xml_in %q(<root><H1>test</H1></root>)
..xmlsimple..
![Page 25: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/25.jpg)
» Si recibimos un request con content-type = “application/xml” se usa xmlsimple dejando una hash en params[:root_name]
»Para otros content-typesActionController::Base.param_parsers[Mime::Type.lookup('application/xml+soap')] = :xml_simple
..xmlsimple.
![Page 26: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/26.jpg)
»parser xml completo.incluído en ruby
»soporte de xpath
»modelos soportados» tree / dom » stream / sax (push)» stream / sax2 (push)» stream / stax (pull)
rexml..
![Page 27: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/27.jpg)
» modelo DOM, con estilo ruby
java:for (Enumeration e=parent.getChildren();
e.hasMoreElements(); ) { Element child = (Element)e.nextElement();
// Do something with child }
rexml:parent.each_child
{ |child| # Do something with child }
..rexml..
![Page 28: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/28.jpg)
» document.root
» element.each
» element.elements » element.attributes
..rexml..
![Page 29: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/29.jpg)
» element
» element.name devuelve el tag» element.next_element» element.previous_element» element.next_sibling» element.previous_sibling» element.root_node
..rexml..
![Page 30: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/30.jpg)
» elements» accesible por index, desde 1» opcionalmente por index,nombre» accesible por nombre. devuelve el primero con ese tag
» each_element_with_attribute» each_element_with_text» elements.to_a
..rexml..
![Page 31: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/31.jpg)
» attributes
» accesible por nombre» each {|key,value|}» to_a ['key=value',…]
..rexml..
![Page 32: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/32.jpg)
» xpath
» REXML::XPath.first (element,expr)
» REXML::XPath.each (element,expr)
» REXML::Xpath.match (element,expr)
..rexml..
![Page 33: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/33.jpg)
» xpath desde elements
» elements.each (xpath_expr)
» elements[xpath_expr]
» elements.to_a (xpath_expr)
..rexml..
![Page 34: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/34.jpg)
» ejemplos con xpath
doc.elements.each('/inventory/section/item')
doc.elements.each('//item[@stock='18'])
doc.elements["//price[text()='14.50']/.."]
..rexml..
![Page 35: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/35.jpg)
» textos
» accesible mediante element.text
» siempre en utf-8
» se sustituyen las entidades tanto XML como definidas en el DTD
..rexml..
![Page 36: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/36.jpg)
» creación / modificación de nodos
» el.add_element 'item'» el.add_element 'item', {'stock'=>'18'}» el.text = '4.95'» el.add_text '4,95'» el.delete_element» el.delete_attribute» el['stock'] = '18'
..rexml..
![Page 37: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/37.jpg)
» streaming parsers
» lanzan eventos mientras se lee el xml
» más rápidos que DOM y con menos consumo de memoria. útiles en documentos grandes
» requieren 'máquina de estados'
..rexml..
![Page 38: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/38.jpg)
» rexml stream parser ~ saxDocument.parse_stream(source, listener)
» métodos REXML::StreamListener» tag_start / tag_end» text / cdata» comment» entity / entitydecl» doctype / doctype_end» attlistdecl / elementdecl» instruction / notationdecl / xmldecl
..rexml..
![Page 39: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/39.jpg)
» sax2 parser
» es como el streaming parser, pero con la posibilidad de filtrar los eventos que se lanzan
» permite escuchar eventos vía listeners o mediante procs
..rexml..
![Page 40: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/40.jpg)
proceso de eventos via procs
require 'rexml/sax2parser' parser = REXML::SAX2Parser.new( File.new(
'documentation.xml' ) )parser.listen( :characters ) {|text| puts text }parser.parse
parser.listen( :characters, %w{ changelog todo } ) {|text| puts text }
parser.listen(%w{ item } ) {|uri,localname,qname,attributes| puts qname}
..rexml..
![Page 41: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/41.jpg)
proceso de eventos via listeners
listener = MySAX2Listener.newparser.listen( listener )item_listener = MySAX2Listener.newparser.listen (%w{item}, item_listener)parser.parse
podemos procesar eventos mediante procs y listeners de forma combinada. Los listeners se procesan másrápidamente, pero necesitamos crear un objeto con losmétodos apropiados
..rexml..
![Page 42: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/42.jpg)
» pull parser ~ stax
» en lugar de escuchar eventos, se piden items y luego se comprueba su tipo
» requiere mantener máquina de estados, pero el código es más legible
..rexml..
![Page 43: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/43.jpg)
» el pull parser en rexml está todavía en estado experimental
parser = PullParser.new( "<a>text<b att='val'/>txet</a>" ) while parser.has_next?
res = parser.next puts res[1]['att'] if res.start_tag? and res[0] == 'b' raise res[1] if res.error?
end
..rexml.
![Page 44: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/44.jpg)
» los servicios web son demasiado complejos para muchos casos
» cuando se realizan consultas, se envía menos información que la que se recibe. podemos exponer la misma api al usuario final y a la máquina
REST: representational state transfer..
![Page 45: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/45.jpg)
» modelo rails = rest resource
» un recurso se identifica con una uri»www.example.com/item/200776
»permite cachear las peticiones ya servidas
..rest..
![Page 46: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/46.jpg)
» rest propone separar las operaciones con resources en tres partes» verbo» nombre» content-type
» a diferencia de XML-RPC, el conjunto de operaciones (verbos) es limitado y hay en su lugar muchos nombres (recursos) diferentes
..rest..
![Page 47: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/47.jpg)
» rest efectúa las operaciones CRUD mediante los verbos HTTP PUT/ GET/ POST/ DELETE
» el content-type puede ser cualquiera, incluso diferente para la entrada y la salida»(ej: url=>xml)
..rest..
![Page 48: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/48.jpg)
if request.post? if params[:id] # update else # no ID # create
elsif request.get? # mostrar el modelo en xml
elsif request.delete? # delete
end
..rest..
para distinguir la operación a realizar
![Page 49: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/49.jpg)
def show_item@item = Item.find(params[:id])respond_to do |accepts|
accepts.htmlaccepts.xml {render :xml=>@item.to_xml}
endend
..rest..
para poder servir al cliente diferentescontent-types según su cabecera Accept:
![Page 50: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/50.jpg)
» delegando en rails para la recepción de parámetros via querystring o xml de forma transparente (usando xmlsimple por debajo) y utilizando el mecanismo respond_to, podemos servir aplicaciones rest en diferentes formatos con el mínimo esfuerzo
..rest.
![Page 51: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/51.jpg)
» las librerías proporcionadas en la distribución estándar de ruby on rails permiten la interpretación y la generación de xml de una forma rápida, sencilla y limpia
» las facilidades de prueba directa en la consola, agilizan el desarrollo
» como resultado, usar rails mejora la productividad cuando tratamos xml
conclusión
![Page 52: Rails y XML como herramienta de Integración · Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’](https://reader034.fdocument.pub/reader034/viewer/2022051207/6038d709e9d4d1600437cd0f/html5/thumbnails/52.jpg)
Rails y XML como herramienta de
Integración
obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’ de Creative Commons