Aprenda a crear una API RESTful con Flask y Postgres, lo que permite un intercambio de datos fluido entre su aplicación y los sistemas externos.

Las interfaces de programación de aplicaciones (API) son una parte fundamental de la creación y conexión de diferentes sistemas, lo que permite que sus aplicaciones se comuniquen e intercambien datos con otros servicios.

Si bien el desarrollo de back-end implica más que solo escribir API, también cubre escribir lógica comercial del lado del servidor, diseñar un sistema eficiente arquitecturas y otras funciones clave, siga leyendo para aprender cómo crear una API CRUD REST simple con Flask (un marco ligero de Python) y Postgres base de datos.

Uso de Flask para crear API de back-end

Matraz es un peso ligero marco de Python que proporciona una serie de funciones para simplificar la escritura de API de back-end para clientes web escritas con diferentes tecnologías, como React y Angular.

Puedes encontrar el código fuente de este proyecto en este repositorio GitHub.

instagram viewer

Esta guía lo guiará a través de la escritura de un API REST que implementa las cuatro operaciones CRUD: cree, lea, actualice y elimine para administrar los datos de usuario almacenados en una base de datos de Postgres.

Configurar una base de datos de Postgres

Para empezar, dirígete a ElefanteSQL, una solución de alojamiento de bases de datos basada en la nube que proporciona una plataforma para crear y administrar bases de datos de Postgres en la nube, registrarse e iniciar sesión en la página de información general de su cuenta.

Haga clic en el Crear nueva instancia botón para crear una nueva instancia para su aplicación.

Proporcione el nombre de su instancia y seleccione el plan gratuito y, finalmente, seleccione la región donde se alojará la instancia para finalizar el proceso de configuración.

Una vez creada la instancia, vaya a la página de configuración y copie el URL de la base de datos, lo utilizará para establecer una conexión con la base de datos.

Configurar un servidor Flask

En su terminal, cree una carpeta de proyecto y cambie el directorio actual a esa nueva carpeta.

Antes de instalar Flask, confirme que está ejecutando Python versión 3.6+ en su máquina. Si no, necesita instalar la última Pitón versión.

python --versión

Después, instale entorno virtual, para crear un entorno de desarrollo virtual aislado.

pip instalar virtualenv

A continuación, ejecute el siguiente comando para crear un entorno virtual.

entorno virtual venv

Finalmente, active el entorno virtual.

# En Windows: 
.\venv\Scripts\activar
# En Unix o MacOS:
fuente venv/bin/activar

Instale los paquetes necesarios

En el directorio raíz de la carpeta de su proyecto, cree un requisitos.txt archivo y agregue estos paquetes.

matraz
python-dotenv
psycopg2-binario

A continuación, instale los paquetes.

pip install -r requisitos.txt

El psycopg2-binario es una biblioteca de Python que actúa como un middleware que le permite establecer conexiones con su base de datos de Postgres y realizar varias operaciones de base de datos.

Por último, crea un .env archivo y pegue la URL de su base de datos.

DATABASE_URL= URL de su base de datos

Crear el servidor Flask

Finalmente, crea un app.py archivo en el directorio raíz y agregue el código a continuación.

importar sistema operativo 
importar psicopg2
de dotenv importar carga_dotenv
de matraz importar Frasco, solicitud, jsonify

cargar_dotenv()

app = Frasco (__nombre__)
url = os.getenv("DATABASE_URL")
conexión = psycopg2.connect (url)

@aplicación.get("/")
definitivamentehogar():
devolver"Hola Mundo"

Este código configura una instancia de la aplicación Flask. Luego crea una conexión a la base de datos especificada en la cadena de URL y, por último, configura una ruta de inicio que devuelve una cadena como respuesta.

Crear la API REST que habilita las operaciones CRUD

Ahora, cree la API REST que implementa las cuatro operaciones CRUD.

Crear una tabla de demostración

Cree una tabla de usuario dentro de la base de datos.

En el archivo app.py, agregue el código a continuación.

CREAR_USUARIOS_TABLE = "CREAR TABLA SI NO EXISTE usuarios (id SERIAL PRIMARY KEY, name TEXT);"

con conexión:
con conexión.cursor() como cursor:
cursor.ejecutar (CREATE_USERS_TABLE)

  • Este código crea una nueva tabla PostgreSQL llamada usuarios con dos columnas.
  • Utiliza el método de conexión psycopg2 para establecer la conexión con la base de datos y crea un nuevo objeto de cursor utilizando el conexión.cursor método que se utiliza para ejecutar Consultas SQL.

1. Definir el método POST

Cree la ruta de publicación para agregar datos.

INSERT_USER_RETURN_ID = "INSERTAR EN usuarios (nombre) VALORES (%s) ID DE RETORNO;"
@app.route("/api/usuario", métodos=["POST"])
definitivamentecrear usuario():
datos = solicitud.get_json()
nombre = datos["nombre"]
con conexión:
con conexión.cursor() como cursor:
cursor.execute (INSERT_USER_RETURN_ID, (nombre,))
id_usuario = cursor.fetchone()[0]
devolver {"identificación": id_usuario, "nombre": nombre, "mensaje": f"Usuario {nombre} creado."}, 201
  • La cadena de consulta SQL define una instrucción SQL que se ejecutará utilizando el cursor.ejecutar método para insertar una nueva fila con el nombre de un usuario en el de los usuarios tabla en la base de datos. Devuelve el ID del usuario recién creado.
  • El crear usuario función toma un nombre como parámetro para almacenar en la base de datos mientras que el cursor.buscar se llama al método para recuperar el ID del usuario recién creado. Finalmente, se devuelve un diccionario que contiene el ID y el nombre del usuario recién creado, junto con un mensaje que indica que el usuario se creó correctamente.

2. Definir el método GET

Defina dos rutas de obtención: una, para recuperar todos los datos de la base de datos, y dos, para recuperar datos específicos de la base de datos en función del ID.

SELECCIONAR_TODOS_USUARIOS = "SELECCIONAR * DE usuarios;"

@app.route("/api/usuario", métodos=["GET"])
definitivamenteget_all_users():
con conexión:
con conexión.cursor() como cursor:
cursor.ejecutar (SELECT_ALL_USERS)
usuarios = cursor.fetchall()
si usuarios:
resultado = []
para usuario en usuarios:
resultado.append({"identificación": usuario[0], "nombre": usuario[1]})
devolver jsonify (resultado)
demás:
devolver jsonify({"error": f"Usuarios no encontrados".}), 404

@app.ruta("/api/usuario/", métodos=["GET"])
definitivamenteobtener_usuario(id_usuario):
con conexión:
con conexión.cursor() como cursor:
cursor.ejecutar("SELECCIONE * DE usuarios DONDE id = %s", (id_usuario,))
usuario = cursor.buscar()
si usuario:
devolver jsonify({"identificación": usuario[0], "nombre": usuario[1]})
demás:
devolver jsonify({"error": f"Usuario con DNI {id_usuario} extraviado."}), 404

  • Esta primera ruta API maneja las solicitudes HTTP GET para recuperar a todos los usuarios de la base de datos. Recupera todos los usuarios de la base de datos y devuelve los resultados en formato JSON en la respuesta.
  • Esta segunda ruta API maneja las solicitudes HTTP GET para recuperar datos para un usuario específico de la base de datos. Toma en el identificación de usuario como parámetro, recupera los datos del usuario de la base de datos y devuelve los resultados en formato JSON en la respuesta.

3. Definir el método PUT

Cree la ruta put para actualizar los datos almacenados en la base de datos.

@app.ruta("/api/usuario/", métodos=["PONER"])
definitivamenteactualizar_usuario(id_usuario):
datos = solicitud.get_json()
nombre = datos["nombre"]
con conexión:
con conexión.cursor() como cursor:
cursor.ejecutar (ACTUALIZAR_USUARIO_POR_ID, (nombre, id_usuario))
si cursor.rowcount == 0:
devolver jsonify({"error": f"Usuario con DNI {id_usuario} extraviado."}), 404
devolver jsonify({"identificación": id_usuario, "nombre": nombre, "mensaje": f"Usuario con DNI {id_usuario} actualizado."})
  • El actualizar_usuario La función toma el parámetro ID de usuario como entrada y lo usa para actualizar el nombre del usuario especificado en la base de datos.
  • Si la operación de actualización se realiza correctamente, devuelve un objeto JSON con el ID de usuario actualizado, el nombre y un mensaje de éxito en la respuesta.

4. Definir el método DELETE

Implemente la ruta de eliminación para eliminar los datos almacenados de un usuario específico en la base de datos.

@app.ruta("/api/usuario/", métodos=["ELIMINAR"])
definitivamenteborrar usuario(id_usuario):
con conexión:
con conexión.cursor() como cursor:
cursor.execute (DELETE_USER_BY_ID, (user_id,))
si cursor.rowcount == 0:
devolver jsonify({"error": f"Usuario con DNI {id_usuario} extraviado."}), 404
devolver jsonify({"mensaje": f"Usuario con DNI {id_usuario} borrado".})
  • Esta ruta API maneja la funcionalidad de eliminación de un usuario específico de la base de datos en función de su ID. Si no se encuentra el usuario, devuelve un código de estado 404 con un mensaje de error. Sin embargo, si la operación de eliminación es exitosa, devuelve un objeto JSON con un mensaje de éxito en la respuesta.

Escribir API REST con Flask

Esta guía demuestra cómo usar Flask y Postgres para construir una API CRUD REST simple junto con cómo para establecer una conexión de base de datos y ejecutar diferentes consultas SQL para leer y escribir datos en un base de datos. Ahora puede crear una API REST simple que pueda manejar las cuatro operaciones CRUD requeridas en cualquier aplicación web.

Ya sea que esté creando un blog simple o una aplicación web compleja, Flask y Postgres ofrecen potentes funciones y capacidades necesarias para crear un sistema de back-end sólido. Alternativamente, puede utilizar otras tecnologías como FastAPI y MongoDB para crear API RESTful.