Construir una API REST en Flask
Ahora, construyamos una API REST en Flask utilizando la base de datos SQLite example.db
que creamos anteriormente.
En el archivo app.py
, agrega el siguiente código para importar los módulos necesarios:
from flask import Flask, jsonify, request
import sqlite3
Agrega el siguiente código para crear la aplicación Flask:
## Create the Flask application
app = Flask(__name__)
Ahora, definamos los endpoints para nuestra API REST:
Endpoint para recuperar todos los usuarios
## Endpoint to retrieve all users
@app.route('/users', methods=['GET'])
def get_users():
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to retrieve all users
cursor.execute('SELECT * FROM users')
users = cursor.fetchall()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return the users as JSON
return jsonify(users)
En este código, primero nos conectamos a la base de datos SQLite utilizando el método connect()
. Luego, creamos un objeto cursor para ejecutar declaraciones SQL utilizando el método cursor()
. A continuación, ejecutamos la consulta SQL para recuperar todos los usuarios de la tabla "users" utilizando el método execute()
. Finalmente, cerramos el cursor y la conexión a la base de datos utilizando el método close()
y devolvemos los usuarios como JSON utilizando el método jsonify()
.
Endpoint para recuperar un usuario específico por ID
## Endpoint to retrieve a specific user by ID
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to retrieve the user by ID
cursor.execute('SELECT * FROM users WHERE id =?', (user_id,))
user = cursor.fetchone()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Check if the user exists
if user:
return jsonify(user)
else:
return jsonify({'message': 'User not found'}), 404
Este endpoint es similar al anterior, excepto que recupera un usuario específico por ID en lugar de todos los usuarios. Utilizamos el método fetchone()
para recuperar un solo usuario de la tabla "users".
Endpoint para crear un nuevo usuario
## Endpoint to create a new user
@app.route('/users', methods=['POST'])
def create_user():
## Get the user data from the request body
data = request.get_json()
name = data['name']
email = data['email']
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to insert a new user
cursor.execute('INSERT INTO users (name, email) VALUES (?,?)', (name, email))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User created successfully'})
Este endpoint se utiliza para crear un nuevo usuario en la tabla "users". Utilizamos el método get_json()
para obtener los datos del usuario del cuerpo de la solicitud. Luego, utilizamos el método execute()
para insertar el nuevo usuario en la tabla "users".
Endpoint para actualizar un usuario existente
## Endpoint to update an existing user
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
## Get the updated user data from the request body
data = request.get_json()
name = data['name']
email = data['email']
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to update the user
cursor.execute('UPDATE users SET name =?, email =? WHERE id =?', (name, email, user_id))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User updated successfully'})
Este endpoint se utiliza para actualizar un usuario existente en la tabla "users". Utilizamos el método get_json()
para obtener los datos actualizados del usuario del cuerpo de la solicitud. Luego, utilizamos el método execute()
para actualizar el usuario en la tabla "users".
Endpoint para eliminar un usuario
## Endpoint to delete a user
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
## Connect to the database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
## Execute the SQL query to delete the user
cursor.execute('DELETE FROM users WHERE id =?', (user_id,))
conn.commit()
## Close the cursor and the database connection
cursor.close()
conn.close()
## Return a success message
return jsonify({'message': 'User deleted successfully'})
Este endpoint se utiliza para eliminar un usuario de la tabla "users". Utilizamos el método execute()
para eliminar el usuario de la tabla "users".
Finalmente, agreguemos el siguiente código para ejecutar la aplicación Flask:
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8080)