Saltar al contenido principal

Introducción al Marco de Trabajo Web Hug

Hug es un marco de trabajo web en Python diseñado para facilitar y acelerar el desarrollo de APIs. Su objetivo es ser simple, confiable y de alto rendimiento, permitiendo a los desarrolladores construir rápidamente servicios web robustos.

En este tutorial, exploraremos la historia, características y ejemplos de uso del marco de trabajo web Hug.

Historia

Hug fue creado por Timothée Peignier en 2014 como respuesta a la complejidad y la verbosidad de los marcos de trabajo web existentes. El objetivo era proporcionar una forma simple e intuitiva de construir APIs con Python.

Desde su lanzamiento, Hug ha ganado popularidad entre los desarrolladores debido a su facilidad de uso y enfoque en el rendimiento. Se ha convertido en una opción preferida para construir servicios RESTful y microservicios en Python.

Características de Hug

Hug ofrece varias características que lo convierten en un marco de trabajo potente para construir APIs:

1. Fácil de usar

Hug proporciona una API sencilla e intuitiva para definir rutas y manejar solicitudes. Los desarrolladores pueden comenzar rápidamente sin necesidad de aprender conceptos complejos o código boilerplate.

Aquí tienes un ejemplo de un punto de conexión de API simple con Hug:

import hug

@hug.get('/hello')
def hello():
return {'message': '¡Hola, mundo!'}

En este ejemplo, definimos una ruta GET /hello que devuelve una respuesta JSON con el mensaje "¡Hola, mundo!".

2. Documentación automática

Hug genera automáticamente la documentación para tu API basada en el código que escribas. Esto facilita mantener actualizada y accesible la documentación de tu API para otros desarrolladores.

Puedes acceder a la documentación generada automáticamente visitando la ruta /doc de tu API de Hug.

3. Validación de entrada y salida

Hug proporciona soporte incorporado para la validación de entrada y salida, asegurando que los datos pasados a y devueltos desde los puntos finales de tu API tengan el formato esperado.

Aquí tienes un ejemplo de uso de validación de entrada en Hug:

import hug

@hug.get('/greet')
def greet(name: hug.types.text):
return f"¡Hola, {name}!"

En este ejemplo, el parámetro name se define como un tipo text, asegurando que solo se acepten valores de texto. Si se proporciona un valor que no sea de texto, Hug devolverá automáticamente un error de validación.

4. Negociación de contenido

Hug te permite manejar fácilmente diferentes tipos de contenido, como JSON, XML o texto plano, según la solicitud del cliente. Esto te permite construir APIs flexibles que pueden responder con el tipo de contenido apropiado según las necesidades del cliente.

Aquí tienes un ejemplo de negociación de contenido en Hug:

import hug

@hug.get('/data')
def get_data():
data = {'message': '¡Hola, mundo!'}
return hug.output_format(data, 'application/json')

En este ejemplo, definimos una ruta que devuelve datos como JSON utilizando la función hug.output_format. Sin embargo, si el cliente solicita un tipo de contenido diferente, Hug convertirá automáticamente los datos en consecuencia.

5. Soporte de middleware

Hug admite middleware, lo que te permite extender y modificar fácilmente el comportamiento de tu API. Las funciones de middleware se pueden utilizar para realizar acciones antes y después del procesamiento de las solicitudes, como autenticación, registro o manejo de errores.

Aquí tienes un ejemplo de uso de middleware en Hug:

import hug

def log_request_middleware(request, response):
print(f'Solicitud: {request.method} {request.url}')

app = hug.API(__name__)
app.http.add_middleware(log_request_middleware)

@hug.get('/hello')
def hello():
return {'message': '¡Hola, mundo!'}

En este ejemplo, definimos una función de middleware log_request_middleware que registra cada solicitud entrante. Luego, agregamos este middleware a nuestra API de Hug utilizando el método add_middleware.

Ejemplos del Marco de Trabajo Web Hug

Ahora, exploraremos algunos ejemplos prácticos de cómo usar Hug para construir APIs.

Ejemplo 1: API de Tareas Pendientes

Creemos una API simple de tareas pendientes utilizando Hug. Esta API permitirá a los usuarios crear, leer, actualizar y eliminar tareas.

import hug

todos = []

@hug.get('/todos')
def get_todos():
return {'todos': todos}

@hug.post('/todos')
def create_todo(todo: hug.types.text):
todos.append(todo)
return {'message': 'Tarea creada exitosamente.'}

@hug.put('/todos/{id}')
def update_todo(id: hug.types.number, todo: hug.types.text):
if id < len(todos):
todos[id] = todo
return {'message': 'Tarea actualizada exitosamente.'}
else:
return {'message': 'Tarea no encontrada.'}

@hug.delete('/todos/{id}')
def delete_todo(id: hug.types.number):
if id < len(todos):
del todos[id]
return {'message': 'Tarea eliminada exitosamente.'}
else:
return {'message': 'Tarea no encontrada.'}

En este ejemplo, definimos puntos finales para obtener todas las tareas, crear una nueva tarea, actualizar una tarea existente y eliminar una tarea. Las tareas se almacenan en una lista en memoria.

Ejemplo 2: API del Clima

Creemos una API que obtenga el pronóstico del clima para una ubicación determinada utilizando la API de OpenWeatherMap.

import hug
import requests

@hug.get('/weather')
def get_weather(location: hug.types.text):
url = f'http://api.openweathermap.org/data/2.5/weather?q={location}&appid=TU_CLAVE_DE_API'
response = requests.get(url)
data = response.json()
return data['weather'][0]['description']

En este ejemplo, definimos un punto final que toma un parámetro location y obtiene el pronóstico del clima para esa ubicación utilizando la API de OpenWeatherMap. La clave de la API debe ser reemplazada por tu propia clave.

Para obtener más información sobre Hug y sus capacidades, puedes visitar el sitio web oficial.