Introducci贸n
Contenido
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铆.