Validando parámetros JSON en Flask

Validando parámetros JSON en Flask

Validar la existencia y validez de parámetros en una API es una de esas tareas que se complican cuando se utiliza un tipo de dato complejo como lo es JSON. Acá te muestro como simplificar esta validación utilizando un plugin y el tipo adecuado de dato para recibir un parámetro JSON de forma nativa en Flask.

El heavy lifting lo hará el plugin flask_parameter_validation, el cual lo instalamos mediante pip de la siguiente manera:

pip install flask_parameter_validation

Una vez tenemos nuestro plugin instalado lo importamos a nuestro servidor Flask de la siguiente manera:

from flask_parameter_validation import ValidateParameters, Json

Finalmente, en nuestro endpoint lo agregamos de la siguiente manera:

@app.route('/mi/endpoint', methods=['POST'])
@ValidateParameters()
def mi_funcion(
    data: List[dict] = Json()
):
    print(data)
    return jsonify(message="JSON recibido")

Luego de declarar la ruta de nuestro endpoint, inmediatamente inyectamos la función @ValidateParameters(), que no sólo nos asegurará que los parámetros requeridos sean suministrados, sino que adicionalmente validará el tipo de dato declarado versus el tipo de dato suministrado.

En este caso estoy declarando en mi función un array de objetos JSON, que en Python se traduce como un listado de tipo dict. Si lo vemos desde el lado de quien genera la petición a nuestra API, el cuerpo de la petición contiene un JSON que se ve así:

Acá únicament evemos el mensaje que nos retorna la API, JSON recibido, pero si vemos la consola de nuestro servidor Flask, vemos que el contenido de nuestra petición se escribió en consola gracias al comando  print(data):