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:

  1. Instalar los siguientes paquetes con el comando pip install x-paquete
  • flask
  • flask_restful
  • flask_sqlalchemy
  1. Descargar el el archivo requirements.txt e instalar todo de una vez con el comando pip 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… YOU-LOR

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!

RESULTADO-JSON

¡Excelente! Sí funciona.

Eso es todo por hoy. Si tienes alguna inquietud no dudes en dejármela en los comentario.

¡Gracias por leer!