Implementación de una aplicación Flask en Heroku

    Introducción

    En este tutorial, aprenderá cómo implementar una aplicación Flask en Heroku. ¡La aplicación puede ser tan simple como una aplicación “Hello World” en una plataforma de monitoreo de redes sociales!

    Hoy en día no hay empresa que no cuente con una aplicación web que le ayude a llegar a una mayor audiencia, o que preste sus servicios a través de un portal online.

    Hoy está a punto de aprender cómo crear una API usando Flask como un caso de estudio sobre cómo implementar su aplicación en Heroku.

    Construyendo una API REST con Flask

    En el directorio de su proyecto, comencemos creando un virtualenv:

    $ python -m venv venv/
    

    Y activémoslo con el source mando:

    $ source venv/bin/activate
    

    Entonces, usemos pip para instalar las bibliotecas que vamos a usar – flask para construir la aplicación y gunicorn como nuestro servidor:

    $ pip install flask
    $ pip install gunicorn
    

    Nuestra aplicación va a ser una API simple que recibe un nombre y devuelve un mensaje de bienvenida:

    # app.py
    from flask import Flask, request, jsonify
    app = Flask(__name__)
    
    @app.route('/getmsg/', methods=['GET'])
    def respond():
        # Retrieve the name from url parameter
        name = request.args.get("name", None)
    
        # For debugging
        print(f"got name {name}")
    
        response = {}
    
        # Check if user sent a name at all
        if not name:
            response["ERROR"] = "no name found, please send a name."
        # Check if the user entered a number not a name
        elif str(name).isdigit():
            response["ERROR"] = "name can't be numeric."
        # Now the user entered a valid name
        else:
            response["MESSAGE"] = f"Welcome {name} to our awesome platform!!"
    
        # Return the response in json format
        return jsonify(response)
    
    @app.route('/post/', methods=['POST'])
    def post_something():
        param = request.form.get('name')
        print(param)
        # You can add the test cases you made in the previous function, but in our case here you are just testing the POST functionality
        if param:
            return jsonify({
                "Message": f"Welcome {name} to our awesome platform!!",
                # Add this option to distinct the POST request
                "METHOD" : "POST"
            })
        else:
            return jsonify({
                "ERROR": "no name found, please send a name."
            })
    
    # A welcome message to test our server
    @app.route("https://Pharos.sh.com/")
    def index():
        return "<h1>Welcome to our server !!</h1>"
    
    if __name__ == '__main__':
        # Threaded option to enable multiple instances for multiple user access support
        app.run(threaded=True, port=5000)
    

    Para probar su aplicación localmente, presionemos el http://127.0.0.1:5000/ punto final. Si todo está bien, deberíamos recibir un mensaje de bienvenida:

    También podemos enviar un nombre como parámetro, como http://localhost:5000/getmsg/?name=Mark:

    {"MESSAGE":"Welcome Mark to our awesome platform!!"}
    

    Con nuestra aplicación lista, impleméntela en Heroku.

    Heroku

    Heroku es una de las primeras plataformas en la nube como servicio (PaaS) y admite varios lenguajes: Ruby, Java, Node.js, Scala, Clojure, Python, PHP y Go.

    Lo primero que debemos hacer es definir qué bibliotecas usa nuestra aplicación. De esa manera, Heroku sabe cuáles proporcionarnos, de manera similar a cómo los instalamos localmente cuando desarrollamos la aplicación.

    Para lograr esto, necesitamos crear un requirements.txt archivo con todos los módulos:

    $ pip freeze > requirements.txt
    

    De esta manera terminamos con un requirements.txt archivo que contiene las bibliotecas que estamos usando y sus versiones:

    Click==7.0
    Flask==1.1.1
    gunicorn==19.9.0
    itsdangerous==1.1.0
    Jinja2==2.10.1
    MarkupSafe==1.1.1
    Werkzeug==0.15.6
    

    Nota: Uno de los errores comunes son los requisitos de ortografía, es un verdadero dolor cuando depura su código durante horas y descubre que la aplicación no se ejecuta porque el servidor no descargó los módulos. La única forma de que Heroku conozca los módulos que está utilizando es agregarlos al requirements.txt archivo, así que ten cuidado!

    Para que Heroku pueda ejecutar nuestra aplicación como debería, necesitamos definir un conjunto de procesos / comandos que debería ejecutar de antemano. Estos comandos se encuentran en el Procfile:

    web: gunicorn app:app
    

    los web El comando le dice a Heroku que inicie un servidor web para la aplicación, usando gunicorn. Dado que nuestra aplicación se llama app.py, hemos configurado el app nombre para ser app también.

    Cuenta Heroku

    Ahora, deberíamos crear una cuenta de Heroku.

    Una vez que esté fuera del camino, en el tablero, seleccione Nuevo -> Crear nueva aplicación:

    Elija un nombre para la aplicación y elija una región donde le gustaría alojarla:

    Una vez que se crea la aplicación en Heroku, estamos listos para implementarla en línea.

    Git

    Para cargar nuestro código, usaremos Git. Primero, hagamos un repositorio de git:

    $ git init .
    

    Y ahora, agreguemos nuestros archivos y commit:

    $ git add app.py Procfile requirements.txt
    $ git commit -m "first commit"
    

    Implementar la aplicación en Heroku

    Para finalmente implementar la aplicación, necesitaremos instalar el Heroku CLI con el que ejecutaremos comandos relacionados con Heroku. Iniciemos sesión en nuestra cuenta usando nuestras credenciales ejecutando el comando:

    $ heroku login -i
    

    Alternativamente, podemos iniciar sesión usando el navegador si ejecutamos el comando:

    $ heroku login
    

    En este punto, mientras estamos conectados, debemos agregar nuestro repositorio al remoto:

    $ heroku git:remote -a {your-project-name}
    

    Asegúrese de reemplazar {your-project-name} con el nombre real de su proyecto que seleccionó en el paso anterior.

    Y con eso hecho, carguemos el proyecto enviándolo a Heroku:

    $ git push heroku master
    

    Debería aparecer un registro de progreso extenso en su terminal, que termina con:

    ...
    remote: -----> Discovering process types
    remote:        Procfile declares types -> web
    remote:
    remote: -----> Compressing...
    remote:        Done: 45.1M
    remote: -----> Launching...
    remote:        Released v4
    remote:        https://{your-project-name}.herokuapp.com/ deployed to Heroku
    remote:
    remote: Verifying deploy... done.
    To https://git.heroku.com/{your-project-name}.git
       ae85864..4e63b46  master -> master
    

    ¡Felicitaciones, ha cargado con éxito su primera aplicación web en Heroku! Ahora es el momento de probar y verificar nuestra API.

    Probando la API

    En el registro que se ha mostrado en la consola encontrará un enlace para su aplicación https://{your-project-name}.herokuapp.com/, este enlace también se puede encontrar en la pestaña Configuración, en la sección Dominios y certificados:

    Visitando el enlace, podemos llegar a nuestra aplicación, que ahora está online y es pública:

    En caso de que hubiera algún error, puede acceder a los registros y solucionar problemas desde allí:

    Puede probar manualmente su aplicación en el navegador, escribiendo la URL y agregando la ruta para el /getmsg/ ruta. Sin embargo, dado que las aplicaciones tienden a volverse cada vez más complejas, se recomienda utilizar herramientas como Cartero.

    Ahora probemos el GET solicitud a nuestra aplicación con un name parámetro:

    Ahora probemos una URL que no esté vinculada a ninguna función, como por ejemplo /newurl, con una solicitud GET:

    Como se esperaba, nuestra aplicación Flask devolvió una respuesta 404.

    Nota: Puede cambiar la vista de la salida desde Bonita, Crudoy Avance, que le muestra cómo se vería la salida en su navegador.

    Ahora probemos un POST solicitud:

    Además, veamos qué sucede si omitimos por completo el name parámetro:

    {"ERROR":"no name found, please send a name."}
    

    Probamos nuestra aplicación y confirmamos que todo funciona bien. Para ver el historial de su servidor y las solicitudes que se hicieron, puede verificar los registros de su sitio a través de Heroku:

    Puedes ver aquí el POST solicitud que hicimos a nuestra página /post/.

    Además, puede ver el historial de creación de la aplicación. Además, si hay algún problema durante la construcción, puede encontrarlo en la página de registro.

    Conclusión

    En este artículo mostramos un ejemplo simple de cómo construir nuestra primera API simple en Heroku usando el micro-framework Flask. El proceso de desarrollo sigue siendo el mismo a medida que continúa creando su aplicación.

    Heroku ofrece un plan gratuito y planes para estudiantes. El plan gratuito es limitado, pero funciona bastante bien para una aplicación inicial, un POC o un proyecto simple, por ejemplo. Sin embargo, si desea escalar su aplicación, entonces querrá considerar uno de los planes que están disponibles en el sitio desde aquí.

    Para obtener más información sobre Heroku, puede consultar Heroku manual en sí.

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *