Cómo crear una aplicación RESTful API en Python usando Flask

Tabla de Contenidos

En este artículo aprenderemos a crear una aplicación RESTful API en Python utilizando el framework Flask.

En este artículo aprenderemos a crear una aplicación RESTful API en Python utilizando el framework Flask.

¿Por qué crear una aplicación RESTful API con Python?

Python es uno de los lenguajes más populares del momento, usándose tanto para automatizaciones de tareas, big data, inteligencia artificial, y, como veremos en este artículo, también para crear aplicaciones web.
También es considerado uno de los lenguajes de programación más fáciles de aprender, por lo que acaba siendo el camino natural para principiantes que quieren entrar en el mundo de la programación.

El framework Flask

Flask es un micro framework diseñado para crear aplicaciones web en Python de forma fácil.

Si además, queremos amplicar la funcionalidad de nuestra API, con el framework Flask somos libres de elegir las extensiones que mejor se adapten a nuestro proyecto, pudiendo añadir funcionalidades como autenticación, validación de formularios, conexión a bases de datos, entre otras.  Y lo mejor de todo, todos son completamente funcionales y muy fáciles de integrar.
Flask framework python

Flask es un micro framework diseñado para crear aplicaciones web en Python de forma fácil.

Si además, queremos amplicar la funcionalidad de nuestra API, con el framework Flask somos libres de elegir las extensiones que mejor se adapten a nuestro proyecto, pudiendo añadir funcionalidades como autenticación, validación de formularios, conexión a bases de datos, entre otras.  Y lo mejor de todo, todos son completamente funcionales y muy fáciles de integrar.

Creando un entorno virtual

Recomendamos crear siempre un entorno virtual para nuevas aplicaciones, para que así las librerías y módulos que se instalen no interfieran con otras versiones ya existentes en nuestro sistema operativo.

Aquí puedes encontrar un link para la documentación oficial del lenguaje Python, donde conocerás más detalles sobre los entornos virtuales en Python.

En el ejemplo siguiente creamos el directorio venv donde guardaremos los archivos de nuestro entorno virtual.  Es bastante común llamarlo venv, que viene del inglés virtual environment.

				
					python3 -m venv venv
				
			

No olvide activar de nuevo el ambiente virtual con el comando:

				
					source venv/bin/activate
				
			

Si todo funciona bien, deberías ver el prefijo (venv) antes de tu nombre de usuario en el prompt de comandos.

Estructura de directorios

A diferencia de otros frameworks, con Flask eres libre de organizar el código fuente de la manera que mejor se adapte a tus necesidades.
En este artículo dividiremos nuestra aplicación en 3 partes principales: rutas, recursos y una tercera parte de componentes comunes a la aplicación.

				
					api
|-- __init__.py
|-- app.py
|-- common
|   |-- __init__.py
|   |-- util.py
|-- resources
    |-- __init__.py
    |-- user.py
				
			

Así podemos crear la estructura de directorios:

				
					mkdir -p api/{resources,common}
				
			

Instalando la estructura Flask-RESTful

				
					pip install Flask-RESTful
				
			
La extensión Flask-RESTful instala automáticamente el framework Flask.
Para comprobar que nuestro entorno está funcionando correctamente, crearemos el siguiente archivo en api/app.py
				
					from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)
				
			

A continuación ejecutaremos el siguiente comando, dentro del directorio api, para iniciar nuestra aplicación:

				
					flask --app main run
				
			

Si todo funciona según lo esperado, deberíamos ver algo parecido a:

				
					(venv) fabio@mackbook api % python app.py
 * Serving Flask app 'app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 114-087-278
				
			

Y si abrimos una nueva pestaña en nuestro navegador apuntando a http://127.0.0.1:5000

local host

Ejemplo completo

Admite CRUD (acciones de creación, lectura, actualización y borrado).
Archivo api/app.py
 
				
					from flask import Flask
from flask_restful import Api
from resources.user import User, UserList

app = Flask(__name__)
api = Api(app)

api.add_resource(UserList, '/users')
api.add_resource(User, '/users/<user_id>')

if __name__ == '__main__':
    app.run(debug=True)
				
			

Archivo api/resources/user.py

				
					from flask_restful import abort, request, Resource

USERS = {
    'usuario1': {'nome': 'Joao'},
    'usuario2': {'nome': 'Maria'},
}

def abort_if_user_doesnt_exist(user_id):
    if user_id not in USERS:
        abort(404, message="Usuário {} não existe.".format(user_id))

class User(Resource):
    def get(self, user_id):
        abort_if_user_doesnt_exist(user_id)
        return USERS[user_id]

    def delete(self, user_id):
        abort_if_user_doesnt_exist(user_id)
        del USERS[user_id]
        return '', 204

    def put(self, user_id):
        json_data = request.get_json()
        USERS[user_id] = json_data
        return json_data, 201

class UserList(Resource):
    def get(self):
        return USERS

    def post(self):
        json_data = request.get_json()
        user_id = int(max(USERS.keys()).lstrip('usuario')) + 1
        user_id = 'usuario%i' % user_id
        USERS[user_id] = json_data
        return USERS[user_id], 201
				
			

A continuación ejecutaremos nuestra aplicación de nuevo para probar todas las acciones compatibles:

				
					python api/app.py
				
			
Listamos todos los usuarios:
				
					curl localhost:5000/users
{
    "usuario1": {
        "nome": "Joao"
    },
    "usuario2": {
        "nome": "Maria"
    }
}
				
			
Filtramos los usuarios por su id:
				
					curl localhost:5000/users/usuario2
{
    "nome": "Maria"
}
				
			
Creamos un usuario nuevo:
				
					curl -H 'Content-Type: application/json' -X POST -d '{"nome": "Pedro"}' localhost:5000/users
{
    "nome": "Pedro"
}
				
			
Actualizamos un usuario:
				
					curl -H 'Content-Type: application/json' -X PUT -d '{"nome": "Ana"}' localhost:5000/users/usuario2
{
    "nome": "Ana"
}
				
			
Borramos un usuario:
				
					curl -H 'Content-Type: application/json' -X DELETE localhost:5000/users/usuario1

				
			
Listamos todos los usuarios, comprobando que el usuario 1 ya no existe en nuestra aplicación.
				
					curl localhost:5000/users
{
    "usuario2": {
        "nome": "Ana"
    },
    "usuario3": {
        "nome": "Pedro"
    }
}
				
			

Resumen

Esto concluye este artículo sobre cómo crear una aplicación RESTful API en Python usando el framework Flask.
Aquí podrás encontrar una lista de extensiones y librerías útiles para poder enriquecer tu nueva API:
Y aquí podrás encontrar el repositorio con el código usado en este artículo.

¡No te pierdas nuestros eventos GRATIS con los mentores top!

Te enviaremos los detalles de la sesión, qué mentores van a participar y cuál será la temática. ¡No te los pierdas!

SUBSCRIBETE A LA LISTA

OTROS POSTS

Más artículos