Este documento describe los servicios web SOAP y REST, así como cómo exponer y consumir servicios web desde GeneXus. GeneXus permite crear servicios web SOAP usando procedimientos y componentes de negocio, y consumir servicios web mediante objetos externos. También admite servicios RESTful mediante el tipo de datos HTTPClient y los métodos ToJson/FromJson y ToXML/FromXML.
4. Web Services en GeneXus
• Proveer
• Procedimientos
• Call Protocol SOAP
• Business Components, DataProviders
• Expose as Web Service
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypa
geid?11231
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypa
geid?2282
5. Web Services en GeneXus
• Consumidor
• WSDL Import Wizard
http://wiki.gxtechnical.com/commwiki/servlet/hwikibyp
ageid?6181
6. Definición del consumidor de un Web Service
Objetos Externos
Paso 1: Indicar la URL del Web Service que se quiere utilizar.
7. Definición del consumidor de un Web Service
Objetos Externos
Paso 2: Indicar el nombre que se le dará al External Object, su descripción, carpeta de ubicación y prefijo.
8. Definición del consumidor de un Web Service
Objetos Externos
Paso 3: Una vez descubierto el Web Service, presionamos Import para importarlo.
9. Definición del consumidor de un Web Service
Objetos Externos
Paso 4: Una vez importado el Web Service, vemos el objeto externo y sus propiedades (View/Properties o F4
sobre el Objeto Externo).
10. Definición del consumidor de un Web Service
Objetos Externos
Para conocer la estructura del WS, damos botón derecho sobre el mismo y seleccionamos Open Part /
Structure:
Conocemos los parámetros
11. Definición del consumidor de un Web Service
Objetos Externos
Para consumir el WS definimos una variable basada en el tipo de dato CountryInfoService
y luego invocamos al método CapitalCity:
12. Web Services en GeneXus
Manejo de errores
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?7021
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?7022
13. Web Services
Locations
• Para permitir configurar invocaciones a objetos main GeneXus
en forma remota.
• Se pueden hacer usando el tipo de datos Location de GeneXus o
el archivo location.xml.
• Instancias para configurar los locations:
1.
2.
3.
En tiempo de generación: mediante location.xml
En tiempo de ejecución mediante un archivo: location.xml
En tiempo de ejecución mediante código: utilizando variables tipo
Location
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?6
981
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?6
111
20. RESTful Web Services
Q
u
é
• Sintáxis universal para identificar los recursos
(URI)
E
s
• Definición de una representación del estado
R
• MIME TYPE: XML, Json..
E
S
T • Interfaz Uniforme(GET, POST, PUT, DELETE)
22. R
E
S
T
e
n
G
E
N
E
X
U
S
REST a la luz de GeneXus
• Business Components
• Create (POST), Read (GET),
Update (PUT), Delete
(DELETE)
• Data Providers
• Read (GET)
• Procedures
• POST
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?14573
23. Consumir un servicio REST
• HTTPClient Data Type
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?6932
• Método ToJson / FromJson
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?10670
• Método ToXML / FromXML
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?8789
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?8788
SOA: aplicaciones basadas en servicios.Restful web services: http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?14573HTTP
REST es un estilo de diseño de webservices, y constituye una alternativa a SOAP.Un caso de uso de REST es aquel caso en donde la optimización de tráfico es esencial y parte de la solución. REST brinda la posibilidad de que la informacion sea cacheable, y accesible a cualquier cliente HTTP.
Lo quequeremoshaceresexponerdatos de unaaplicación o lo quevamos a llamar “recursos” o entidades, en la web, con unasalida con un formatoestándar, paraque sea interpretable por un programaqueejecutesobrecualquierplataforma o framework, e inclusosobrecualquiercliente HTTP genérico (inclusodesde un telefonocelular).
Vamos a suponer que lo que quiero es exponer la lista de productos de mi empresa, para que cualquier cliente HTTP pueda acceder a ella.Para invocarlo solo hago un GET al servicio (comopuedenver en la imagen, se trata del header del request HTTP)Luegopodemosver el response HTTP del servicio.Es solamente un HTTP Response, que trae en el cabezal el status code y demas datos, y en el cuerpo la lista de productos, en este caso en formato Json.El mensaje no lleva envelopes (como en el caso de SOAP).La respuestatiene el producId, la descripcion, y una URI queindicadondeobtener el detalle de cadaproducto. Esta URI sirvepara “descubrir” comolocalizarotrosrecursos.
REST es un estilo de arquitectura de software (no es como SOAP un protocolo), es un modelo orientado a recursos que va directo sobre HTTP.Cuando un webservice es Restful?Cuando se van a cumplir una serie de condiciones.Básicamente se va a cumplir que cada URL es la representación de un objeto, al que vamos a llamar recurso. Y cada recurso se representa con una única URI. Cada recurso se asocia a una URI, y cada recurso tienen n representaciones posibles, puede ser XML, Json. Además REST es un modelo cliente servidor sin estado. No se mantiene el estado en el servidor.El estado del recurso viaja en la representación. También en la representación se incluye la referencia a otros recursos relacionados, como vimos en la lista de productos, que estaba la referencia a cada producto en particular.También se caracteriza por tener una interfaz uniforme, es decir, un conjunto de operaciones bien definidas que voy a poder ejecutar sobre los recursos – métodos HTTP GET, POST, PUT, DELETE.
Con frecuencia estas operaciones se equiparan a las operaciones CRUD que se requieren para la persistencia de datos.Dado un recurso, un POST HTTP a su representación se puede equiparar con un create sobre la DB.Un GET HTTP se corresponde a un Read, un PUT HTTP sobre la representación se puede equiparar a un UPDATE sobre la DB, y un DELETE HTTP con un Delete sobre la DB.Bien, hasta aca hemos hablado de que es REST y que podemos resolver con REST.
En GeneXus tenemos la posibilidad de crear automáticamente servicios REST a partir de transacciones que sean Business Components, a partir de Data Providers y procedures.Es decir que el metodoCreate del BC podrá ser accedido mediante el método POST de HTTP, el metodoRead del BC a traves de un GET HTTP, el Update del BC a traves de un PUT HTTP, y el delete a traves del delete HTTP.Los data providers son servicios REST de lectura.http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?14573
Voy a empezar por exponer el recurso “lista de productos” como servicio REST.La manera de crear un servicio REST es muy sencilla, Mi transaccion debe ser Business Component, Y debo especificar la propiedad Expose as webservice – REST del Business Component.
Ws REST quepermite el ingreso de unaorden de compras.