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 *