Antes que nada, aqui te dejo el link por si deseas clonar directamente el repositorio de Github.
Desarollando nuestra API
Para este tutorial vamos a utilizar principalmente el “Mini”-Framework Flask y algunas extenciones del mismo. Para la instalación de todos los paquetes me gustaria dejarte dos opciones:
- Instalar los siguientes paquetes con el comando
pip install x-paquete
- flask
- flask_restful
- flask_sqlalchemy
- Descargar el el archivo
requirements.txt
e instalar todo de una vez con el comandopip install -r requirements.txt
La primera opcion nos permite ir familiarizandonos poco a poco con las herramientas que vamos utilizando a lo largo de este tutorial y la segunda nos agiliza el trabajo.
¿Cuál usar? Depende de…
…ti
Estructura de nuestra API
Vamos a explicar de manera súper básica la estructura de nuestra API. Para mayor informacion te invito a visitar la documentacion oficial de FlaskRESTful.
1. from flask import Flask
2. from flask_restful import Api, Resource, marshal_with, fields
3. from flask_sqlalchemy import SQLAlchemy
4. app = Flask(__name__)
5. api = Api(app)
6. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///Players.db'
7. db = SQLAlchemy(app)
En las lineas uno, dos y tres importamos Flask, algunas clases desde flask_restful y SQLAlchemy, que será la encargada de realizar las conexiones con nuestra base de datos. Depués, de la linea cuatro a siete realizamos la configuracion de nuestra aplicacion y establecemos una conexion a través de sqlite
con nuestra base de datos.
class Players(db.Model):
__tablename__ = "players"
id = db.Column(db.Integer, primary_key=True)
region = db.Column(db.String, nullable=False)
name = db.Column(db.String, nullable=False)
puuid = db.Column(db.String, nullable=False)
resource_fields = {
'id':fields.Integer,
'region':fields.String,
'name':fields.String,
'puuid':fields.String
}
Aquí primero creamos la clase Players
que será la encargada de manejar la “extructura” de nuestra base de datos. Como podemos ver, creamos una tabla llamada players
y cuatro columnas. Por último creamos un diccionario llamado resource_fields
para serializar nuestra informacion de tal manera que podamos mostrarla en formato JSON. (¿Qué es JSON?)
class Player(Resource):
@marshal_with(resource_fields)
def get(self, name):
result = Players.query.filter_by(name=name).first()
return result
api.add_resource(Player, "/<string:name>")
if __name__ == "__main__":
app.run(host='0.0.0.0')
Por último, creamos la clase Player que organizará los datos de nuestra base de datos de la forma en que le especificamos en nuestro diccionario resource_fields
. Luego definimos una función get que tomará como argumantos self y el nombre del jugador del cual queremos conocer la información. Con estos datos hacemos un query
a nuestra base de datos, diciéndole que nos muestre el primer el primer jugador llamado name
.
api.add_resource(Player, "/<string:name>")
es una de las partes fundamentales de nuestro código, pues es aquí donde especificamos la ruta a la cual se hará la request, o dicho de otra forma, es aquí donde definimos nuestro Endpoint. En este caso sería simplemente a la ruta de inicio, es decir:
https://0.0.0.0:8000/Bluegod
Por último, la parte de if __name__ == "__main__":
sencillamente evita que se ejecute la aplicación cuando es importada por otro script y en la parte de app.run(host='0.0.0.0')
podriamos añadirle debug=True
para que cada que realizamos un cambio y tenemos nuestra aplicación corriendo este cambio se aplica inmediatamente después de guardar, esto ayuda mucho cuando estamos testeando o añadiendo nuevas funciones, pero se recomienda quitarlo a la hora de hacer deploy de nuestra App.
Y… ya, eso sería todo, si hemos seguido correctamente todos los pasos hasta aquí deberiamos tener nuestra API funcionando. ¡Vamos a probarla!
¡Excelente! Sí funciona.
Eso es todo por hoy. Si tienes alguna inquietud no dudes en dejármela en los comentario.
¡Gracias por leer!