Lathack

Módulos y Servicio web con Python

Módulos y Servicio web con Python 

Introducción

Recordemos que un servicio web, no es más que un programa que nos provee cierta funcionalidad. Con lo cual, nos conectamos o interactuamos, a través del protocolo HTPP como cliente (por ejemplo, desde nuestro navegador). Ejemplo de servicios web pueden ser, cotizaciones en la bolsa, comunicaciones a través de la redes sociales, informes periodísticos (política, empresarial, deportes, etc.). En todos los casos, se necesita de una URL para ingresar. En base a esto, utilizaremos la programación en Python a través de ciertas librerías y módulos, y así, interactuar con un servicio web, extraer información, automatizar pedidos, etc.. como lo suelen hacer ciertas aplicaciones web o mobile.

Es recomendable haber leído y repasado los fundamentos de la web de redes en el nivel básico.

Arquitectura Rest

La Arquitectuea REST (REpresentational State Transfer) es una arquitectura estándar cuya función es facilitar la comunicación entre dos servicios, logrando así, que se entiendan mejor entre ellos. Por lo tanto, a los servicios que cumplen con este diseño se los llama API Rest. En conclusión, dicha función nos permitirá interactuar con un servicio web a través de nuestro cliente (en es caso, Python) y así poder leer, modificar, obtener recursos o códigos de estado.

Veamos un ejemplo:

Imaginemos que tenemos un servicio web cuya función es gestionar los empleados de una empresa. La URL de la misma es http://api.empresa.com/empleados

Al utilizar este recurso podremos agregar, eliminar, actualizar algún dato de un empleado. Sin embargo, recordemos que en una empresa hay muchos tipos de empleados. Entonces también podemos diferenciar distintos cargos como cajeros, administradores, contadores, etc. Para esto, utilizamos unas URL similar a la anterior, para así poder separar y tener mejor ordenada y especificada nuestra información. Estas pueden ser:

  • http://api.empresa.com/cajeros
  • http://api.empresa.com/administradores
  • http://api.empresa.com/contadores

En la Arquitectura Rest, las secciones web anteriores son llamadas “Recursos” (Las cuales estaremos usando en estos temas). Por tanto, si quitamos la primera parte del dominio, tendremos las secciones /cajeros, /administradores y /contadores.

Cabe mencionar, generalmente, que los recursos se encuentran escritos de forma singular (ya veremos por qué sucede esto más adelante), de modo tal que se vería de la siguiente manera:

  • http://api.empresa.com/cajero
  • http://api.empresa.com/administrador
  • http://api.empresa.com/contador
Ejecución de Operaciones

Ya vimos cómo se forman las URL, ahora bien, debemos tener en cuenta que para cualquier operación que ejecutemos, deberemos especificar el método a utilizar (GET, POST, PUT, DELETE). Entonces, simplemente necesitamos un recurso con su respectivo método.

Ejemplos:

Si deseamos obtener una lista de todos los empleados “cajeros” de la empresa, la operación a realizar será:

GET /cajero

En el caso de querer agregar un nuevo contador, haremos:

POST /contador

Si lo que buscamos es modificar o eliminar los datos de un empleado, debemos indicar, además, cuál es dicho empleado. Por lo general, en un recurso cada registro está identificado por un número (id). Entonces si queremos modificar el empleado «administrador» cuyo identificador es el número 9, haremos:

PUT /administrador/9

En caso de querer eliminarlo:

DELETE /administrador/9

Módulo requests

Hemos visto que Python provee varios módulos a través de su librería estándar. Para la comunicación con servicios web tenemos urllib, cuya función es interactuar con direcciones URL y el protocolo HTTP. Sin embargo, el módulo más utilizado para estos casos es requests, ya que, según su comunidad es más potente y sencillo de usar. En caso de no tenerlo instalado, recordemos que podemos hacerlo de la siguiente manera:

pip install requests

Introducción

A continuación, realizaremos nuestra primera petición (requests). Lo primero que haremos será importar el módulo:

import requests

r = requests.get(“https://lathack.com”)

r.status_code

Out:

200

En base a esto podemos sacar las siguientes conclusiones:

  1. En la primera fila hemos importado el módulo requests.
  2. En la segunda fila realizamos una petición a través del método GET a la dirección https://lathack.com. El get() funciona como valor de retorno especificando la respuesta del servidor (cuyo contenido es HTML por tratarse de un sitio web).
  3. Finalmente, la última línea (status_code) es la que nos indicará el código de estado según la operación realizada. En este caso, obtenemos un 200, es decir, que nuestra petición ha sido exitosa.

Veamos otro ejemplo:

import requests

r = requests.get(“https://api.github.com”)

r.json()

Lo que hará la función json() es convertir el resultado de nuestra petición a un formato por diccionarios o listas. Ya que vamos a estar trabajando con servicios web, el método JSON es el más utilizado para estas tareas. También podemos usar r.content para traer el resultado.

En caso de querer tener una salida más «amigable» podemos instalar el módulo pprint y mejorar la legibilidad de texto.

Módulo flask

Si hablamos de usar módulos para hacer uso de un servicio web en Python, debemos tener en cuenta al framework Flask. El mismo está escrito en Python para el desarrollo de aplicaciones web y, la diferencia con otras aplicaciones, es que esta herramienta no posee una capa de abstracción de base de datos, validación de formularios, ni ningún otro componente donde las bibliotecas de terceros proporcionan sus funciones. No obstante, este módulo nos permite usar extensiones que pueden agregar dichas funciones a la aplicación, como si estuvieran implementadas en el propio flask.

Podemos instalarlo de la siguiente manera:

pip install flask

El uso del módulo flask suele ser para situaciones muy puntuales como un servicio web en Python, un formulario, o una página web puede ser una buena opción. Pero cuando el proyecto es más grande, conviene siempre utilizar Django, ya que, es uno de los frameworks más utilizados (escrito en Python) para el desarrollo web hoy en día. Por tanto, si usamos flask para pruebas o poner en práctica nuestros conocimiento, debemos tener en cuenta que el servicio debe estar abierto en todo momento. Los datos son guardados en memoria, asique todas las operaciones que ejecutemos se perderán una vez cerrado el programa.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

uno × 4 =

Lathack
Scroll al inicio