Construyendo la API REST más Simple Posible
Introducción
Las APIs REST están en todas partes — sin ellas, los sitios web serían mucho más aburridos. Son lo que integra el frontend y el backend de un sitio web, y hoy construiremos una nosotros mismos — en menos de cinco minutos.
Definiendo una API REST
Una API REST — abreviatura de interfaz de programa de aplicación de transferencia de estado representacional — es lo que permite que diferentes lenguajes de programación y partes de una aplicación se comuniquen entre sí. De forma nativa, estos lenguajes no podrían hablarse entre sí, ya que no pueden entender el código del otro. Esto sería una gran pérdida, ya que algunos lenguajes de programación funcionan mejor en diferentes campos o están orientados a trabajos específicos — por ejemplo, nunca usarías JavaScript para aprendizaje automático. Sin embargo, Python es el lenguaje preferido para esto — y es ahí donde las APIs REST muestran su valor.
En esencia, estas APIs envían información hacia arriba y hacia abajo en un servidor, información que puede ser decodificada y enviada al cliente. El punto fuerte de este tipo de API es que funciona extremadamente bien para bases de datos — hay cuatro fundamentales métodos HTTP que se pueden utilizar.
- GET — obtiene datos del servidor
- POST — crea un registro en el servidor
- PUT/PATCH — actualiza un registro en el servidor
- DELETE — elimina un registro existente en el servidor
Estos se pueden recordar con el acrónimo CRUD (crear, leer, actualizar y eliminar).
Resumen de Herramientas utilizadas
Para crear nuestra API REST, vamos a necesitar instalar algunos prerrequisitos (entraremos en eso en la siguiente sección). Antes de empezar, sin embargo, echemos un vistazo rápido a las herramientas que realmente vamos a utilizar.
En primer lugar, para la parte backend de nuestra API — la parte que maneja la base de datos, las solicitudes entrantes y modifica los datos — usaremos Python, y una impresionante biblioteca llamada Flask. No te preocupes si no estás muy familiarizado con Python — el código será corto y bien explicado. Aparte de esta biblioteca, ¡realmente no necesitaremos nada más en el lado del backend!
Una alternativa popular a Flask, para los interesados, es Django. Sin embargo, esto es un paso adelante respecto a Flask y a menudo es mucho más complicado, así que nos quedaremos con Flask para esta publicación.
Para la parte frontend de nuestra API RESTful, usaremos JavaScript para modificar una página HTML que el usuario ve — dando prueba visual de que nuestra API funciona. Asimismo, no te preocupes si no sabes JavaScript — ¡el código va a ser incluso más simple que el backend!
Requisitos + Instalación
Requisitos
Python >= 3.4
Flask == 1.1.2
- Un navegador web
Comencemos con la configuración. Si aún no tienes Python, descárgalo aquí.
Pasemos a nuestra primera instalación real — Flask. Si tienes una versión de Python mayor o igual a 3.4 (puedes verificarlo con python3 -V
en tu terminal), entonces estás listo para el siguiente paso. Si no, vas a necesitar instalar pip
o actualizar tu Python a una versión más moderna — las instrucciones están en su sitio web aquí.
Una vez que tengas Flask instalado, puedes escribir python3 -m pip install Flask
en cualquier lugar de tu terminal, y después de uno o dos minutos tendrás la biblioteca Flask instalada. ¡Adelante!
Construyendo el Backend
Vamos a empezar construyendo el backend — esto es lo que el cliente no ve, y la parte de la aplicación que realiza el trabajo pesado y maneja las solicitudes HTTP. Lo construiremos con Python y Flask.
En primer lugar, vamos a necesitar importar nuestra biblioteca. Crea un nuevo archivo, nombrándolo como quieras — solo asegúrate de que termine con una .py
extensión para que sea reconocido como un archivo Python. Yo nombraré el mío app.py
.
Luego podemos empezar importando Flask a continuación.
desde flask import Flask
Después necesitamos inicializar nuestra aplicación web Flask.
app = Flask(__name__)
A continuación, vamos a crear una rutade Flask, que es esencialmente la URL a la que el usuario tiene que ir para poder acceder al contenido. Crearemos una ruta en /hello
, para que el usuario pueda ir a esa URL con el fin de acceder a los datos allí. Podemos crear esta ruta usando un decorador — esencialmente una función que envuelve a otra función.
Los decoradores podrían ser todo un post en sí mismos, pero en esencia hacen algo, ejecutan la función que "decoran", y luego continúan haciendo algo — básicamente envolviendo algunas instrucciones alrededor de otra función.
Con Python, podemos especificar un decorador usando el símbolo "@". Vamos a bajar unas líneas y configurar nuestro decorador de ruta Flask.
@app.ruta("/hello", methods=["GET"])
El código anterior configura una ruta de aplicación en la página de inicio y admite GET
solicitudes (para que JavaScript pueda acceder a los datos). Pasemos a crear la función real que se ejecutará cuando el usuario vaya allí. En la línea directamente debajo del decorador, escriba el siguiente código (o puede saltar a el código completo y copiar todo el código de una vez).
def hello(): # you can name this anything you want
return {"response": "Hello from Python!"}
La función que configuramos anteriormente está devolviendo datos en forma de JSON — un acrónimo de JavaScript Object Notation, y un lenguaje que puede ser leído por la mayoría de los otros lenguajes de programación principales. Envía datos en forma de un objeto, uno con un nombre de "response" y un valor de "Hello from Python" — algo similar a un diccionario de Python.
Por último, necesitamos preparar la aplicación para que se ejecute. Podemos hacer esto agregando — al final del archivo — una app.run()
función.
if __name__ == "__main__":
app.run(debug = True)
app.run()
significa que la aplicación se ejecutará cuando ejecutemos el código desde la línea de comandos, y estamos configurando debug
a True
para que podamos ver todo lo que sucede y detectar cualquier error potencial.
Y eso es todo para el backend y Python. ¡Estamos listos para empezar con el frontend simple ahora — después de solo 7 líneas de código! Necesitaremos modificar este archivo un poco para poder servir los archivos JavaScript y HTML, pero eso serán solo unas pocas líneas extra de código. Tú puedes intenta ejecutar esto ya, abriendo tu terminal, navegando al directorio que contiene tu archivo Python actual, y escribiendo python3 my-file-name.py
.
Si lo haces, tendrás algo de información impresa en tu consola, diciendo que el servidor está corriendo en localhost:5000. Si vas a http://localhost:5000/hello, ¡ya podrás ver el JSON allí! Se verá justo como lo enviamos (aunque estará en formato JSON). Deberías ver algo como lo siguiente:
{"response": "Hello from Python!"}
Sin embargo, aún vamos a agregar algo de JavaScript y HTML para que los datos sean obtenidos manualmente, ya que a menudo estas APIs REST están destinadas a ser utilizadas por la aplicación, no visualizadas directamente por el usuario.
Configurando el Frontend
Usaremos JavaScript para acceder a la API y un HTML super simple para crear una página de índice que el usuario pueda ver. Empecemos.
Primero, vamos a crear una carpeta llamada templates
en el mismo directorio que nuestro archivo Python, y dentro de ella, un archivo llamado index.html
. Este es el archivo que va a ser renderizado por Python cuando un usuario accede a nuestro sitio web localhost. No entraré en los detalles tediosos del index.html
contenido del archivo — es solo un archivo simple con un encabezado y espacio para que JavaScript inyecte código.
lang="en">
charset="UTF-8">
name="viewport" content="width=device-width, initial-scale=1.0">
REST API Sandbox
Data from Python below!
id="fromJS">