Google automatic translate

ILE-RPG para desarrollo de servicios Web

Despues de leer el artículo publicado en help400 de febrero de 2004 sobre los servicios web , me preguntaba si era posible desarrollar un cliente de servicio web, utilizando ILE-RPG. Buscando con Google vi que hay cientos de servicios web y que incluso Google tiene su propio servicio web que permite realizar búsquedas mediante mensajes SOAP (basado en XML) desde nuestros programas.

Me descargé los ejemplos que proporciona Google y por supuesto, entre estos no se incluía ninguno en ILE-RPG.

Este artículo es una sencilla muestra de cómo desarrollar un servicio Web en ILE-RPG utilizando el lenguaje XML y el protocolo SOAP.

Qué son los servicios Web

Los servicios Web permiten a aplicaciones compartir información y ejecutar funciones de estas independientemente de cómo se hayan creado, cuál sea el sistema operativo o plataforma donde se ejecuten.

Los servicios web se comunican utilizando el protocolo HTTP, de igual forma que nosotros accedemos a una página web.

Qué es SOAP

SOAP (Protocolo de acceso a objetos simple, Simple Object Access Protocol) es un protocolo ligero, simple y entensible, basado en XML que permite el intercambio de información en un entorno distribuido descentralizado.

La API de Google

El buscador Google incluye la posibilidad de poder realizar búsquedas en sus más de 4 billones de páginas web desde nuestros propios programas mediante el uso de Google Web APIs.

Es necesario crear una cuenta en Google para obtener una clave de licencia, que nos permitirá realizar 1.000 peticiones de búsquedas por día. Dicha clave de licencia debe incluirse junto a cada petición de consulta que realizemos.

Cómo funciona

La utilidad se compone del programa ILE-RPG GOOGLE1 que realiza una peticion POST HTTP al servidor SOAP de GOOGLE.

Para realizar un POST utilizo el procedimiento http_url_post, que forma parte del programa de servicio HTTPAPIR4 de la libreria LIBHTTP de Scott Klement.

Los parámetros del procedimiento http_url_post son:

c                   eval      rc = http_url_post(                    
c 'http://api.google.com/search/beta2' :
c %addr(data) :
c 1600 :
c '/doGoogleSearchResponse.xml' :
c 10 :
c 'Mozilla/5.0 (X11; U; OS400)' :
c 'text/xml' :
c 'urn:GoogleSearchAction' )

Ejemplo del mensaje SOAP que se envia al servidor SOAP de Google, en el que debemos indicar el argumento de búsqueda <b> y la clave de Google <key>.

<?xml version='1.0' encoding='UTF-8'?> 
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/1999/XMLSchema"> 
 <SOAP-ENV:Body> 
 <ns1:doGoogleSearch xmlns:ns1="urn:GoogleSearch" 
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
 <key xsi:type="xsd:string">00000000000000000000000000000000</key> 
 <q xsi:type="xsd:string">argumento de busqueda</q> 
 <start xsi:type="xsd:int">0</start> 
 <maxResults xsi:type="xsd:int">10</maxResults> 
 <filter xsi:type="xsd:boolean">true</filter> 
 <restrict xsi:type="xsd:string"></restrict> 
 <safeSearch xsi:type="xsd:boolean">false</safeSearch> 
 <lr xsi:type="xsd:string"></lr> 
 <ie xsi:type="xsd:string">latin1</ie> 
 <oe xsi:type="xsd:string">latin1</oe> 
 </ns1:doGoogleSearch> 
 </SOAP-ENV:Body> 
 </SOAP-ENV:Envelope>

Uso del mandato GOOGLE (recordar indicar la clave proporcionada por Google).

GOOGLE SEARCH('argumento de busqueda')
KEY('00000000000000000000000000000000')

Para compilar todo esto

Instalar y compilar previamente la libreria HTTPLIB de Scott Klement, que se encarga de toda la comunicación mediante Sockets entre sistemas y proporciona las funciones para los métodos GET y POST de HTTP.

Es necesario disponer de compilador ILE-RPG en versión V4R4.

Los mandatos necesarios para compilar esta utilidad son:

CRTBNDRPG PGM(biblioteca/GOOGLE1) SRCFILE(biblioteca/QRPGLESRC) SRCMBR(GOOGLE1)


CRTCMD CMD(biblioteca/GOOGLE) PGM(*LIBL/GOOGLE1) SRCFILE(biblioteca/QCMDSRC)

Notas adicionales

Google Web APIs es un servicio gratuito beta y está disponible sólo para usos no comerciales.