Tutorial: Python + Soap Web Service Daniel Montenegro Cordero
Python - Lenguaje de programación interpretado. - Filosofia código legible. - Permite programación orientada a objetos, imperativa y funcional. - Facilidad de integración con otro lenguajes.
Que hay en Python? Python cuenta con varias librerías open source que permiten la integración con estándares ya definidos y que hacen parte de las nuevas tecnologías web.
Algunas librerías o frameworks.. - Suds - ZSI - Wsdl2py - SoapPy - Soaplib - Flask - enterprise
Flask - enterprise Es un framework basado en Python que provee toda una infraestructura para el soporte de protocolos estándares de la industria. (Soap, Wsdl, Xml). Es una recopilación de librerías que se han desarrollado y que forman una fuerte base de seguridad con una fuerte compatibilidad entre versiones.
Más info... - Desarrollado por Massive Rock Inc. - Hace parte de la continuación del proyecto Flask.
Por qué Flask - enterprise? - Codigo abierto. - Facil instalación. - Pocas líneas de código. - Facil manejo.
Requerimientos - GNU/ Linux (Ubuntu, Debian, etc) - Permisos de instalación. - Editor de texto. - Python 2.7 - SoapUI
Instalación Iniciamos la terminal de linux que estamos utilizando para realizar los pasos de instalación que daremos a continuación. Iniciamos como usuario con permisos de administración.
Instalación Paso 1: Instalar Pip. sudo apt-get install python-pip Paso 2: Usando Pip instalamos el paquete Flask - Enterprise sudo pip install Flask-Enterprise
Consumir servicio web soap Utilizando el servicio web de futbol : http: //footballpool.dataaccess.eu/data/info.wso? WSDL. A continuación haremos un paso a paso de como consumir un servicio web soap utilizando Flask - enterprise.
Usando python Paso previo: Creamos un archivo de extensión.py, lo cual indicará que es un archivo de python. Lo guardamos en una ruta la cual tengamos acceso. Ejemplo: consume.py
consume.py Paso 1: Importamos las librerías from flask import Flask from flaskext.enterprise import Enterprise Paso 2: Definimos una app en Flask app = Flask( name )
Paso 3: Creamos una instancia de la clase Enterprise enterprise = Enterprise(app) Enterprise? Esta clase actúa como controlador de la aplicación, permite hacer los enlaces o las conexiones.
Paso 4: client = enterprise. connect_to_soap_server(url= ) Gracias a la función connect_to_soap_server logramos capturar el wsdl y lo guardamos en una variable client.
Paso 5 : client.service. Request En el ejemplo que tenemos del fútbol podemos hacer lo siguiente: result = client.service.stadiumnames() Aquí ya logramos consumir el web service!!!.
Para poder ver las funciones que provee el servicio web utilizamos la herramienta soapui, donde nos indicará que parámetros necesita el request al web service.
Si la función del servicio web que vamos a consumir requiere de parámetros, añadimos estos al momento de llamar la función. Ejemplo: result = client.service.stadiuminfo( Arena Corinthians )
Result.. Si hacemos print result podremos ver el tipo de dato que nos retorno el web service. Por ejemplo en el de fútbol sería el siguiente:
Como correr nuestro archivo? Mediante la terminal de linux, ejecutamos el siguiente comando: python consume.py A continuación podremos ver el resultado del print.
print result
Si queremos obtener el valor como tal del resultado del request : print result. atributo En el caso del ejemplo retorna una lista de strings, por lo tanto tendríamos que hacer un recorrido sobre result.string[i].
Proveer un servicio web soap Realizamos los pasos del 1 al 3. El servidor que proveera el wsdl va estar corriendo en el mismo python. Creamos un archivo con el nombre que deseemos y con la extensión.py.
server.py Realizaremos 2 funciones básicas que proveerá el servicio web. 1) Obtener la fecha actual. 2) Sumar 2 enteros.
server.py Definimos una clase class DemoService(enterprise.SOAPService): Decimos que va a ser un servicio soap al momento de crear la función y nos permitirá acceder : @enterprise.soap(parametros, returns=tipo)
Tipos - enterprise._sp.integer - enterprise._sp.string - enterprise._sp.array Ejemplo: @enterprise.soap(_returns=enterprise._sp.string) Nota: Va a ser una función que retorna un string al hacer la consulta del web service y no recibe ningún parámetro.
Definimos la función Como cualquier función de python que pertenece a una clase escribimos: def get_suma(self,a,b): return a + b def get_time(self): return ctime() # importamos ctime
Nota: El nombre de las variables que vas a usar en las funciones es de la misma manera como las vas a llamar al momento de consumir el servicio web.
Así queda definido Class DemoService(enterprise.SOAPService): @enterprise.soap(_return=enterprise._sp.string) def get_time(self): return ctime() Donde ctime() es la función que nos retorna la fecha actual, la debemos importar con: from time import ctime
Servidor? if name == main : app.run(host = 127.0.0.1) De la misma manera que en ejemplo de consumir un servicio web guardamos un archivo con extensión.py y lo corremos desde la terminal de linux con el comando: > python serversample.py
Acceder a mi url donde tengo el WSDL http://localhost:5000/_enterprise/soap/?wsdl
Mi servicio web soap esta listo para ser consumido! Gracias!
Bibliografía - http://massive.immersedcode. org/2011/staging/projects/default/python/flaskenterprise/ - http://reddit.com/r/python - https://wiki.python.org/moin/webservices - http://flask.pocoo.org/ - http://pip.readthedocs.org/en/latest/installing.html - https://github.com/maerteijn/soapserver-example