En aquest tema, aprendrem com gestionar dades JSON en una aplicació Flask. JSON (JavaScript Object Notation) és un format lleuger d'intercanvi de dades que és fàcil de llegir i escriure per a humans i fàcil de parsejar i generar per a màquines. És àmpliament utilitzat en APIs RESTful per a la comunicació entre el client i el servidor.

Conceptes Clau

  1. JSON: Un format de text per a l'intercanvi de dades.
  2. Serialització: Convertir un objecte Python en una cadena JSON.
  3. Deserialització: Convertir una cadena JSON en un objecte Python.

Serialització de Dades a JSON

Flask proporciona una manera senzilla de serialitzar dades a JSON utilitzant la funció jsonify. Aquesta funció converteix automàticament els objectes Python en JSON.

Exemple de Serialització

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/data', methods=['GET'])
def get_data():
    data = {
        'name': 'John Doe',
        'age': 30,
        'city': 'Barcelona'
    }
    return jsonify(data)

if __name__ == '__main__':
    app.run(debug=True)

Explicació:

  • Importem Flask i jsonify des del paquet flask.
  • Creem una instància de l'aplicació Flask.
  • Definim una ruta /api/data que retorna un diccionari Python serialitzat a JSON utilitzant jsonify.

Deserialització de Dades JSON

Per deserialitzar dades JSON rebudes en una sol·licitud, podem utilitzar el mètode get_json de l'objecte request.

Exemple de Deserialització

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api/data', methods=['POST'])
def receive_data():
    data = request.get_json()
    name = data.get('name')
    age = data.get('age')
    city = data.get('city')
    return jsonify({
        'message': f'Received data for {name} who is {age} years old and lives in {city}.'
    })

if __name__ == '__main__':
    app.run(debug=True)

Explicació:

  • Importem Flask, request i jsonify des del paquet flask.
  • Creem una instància de l'aplicació Flask.
  • Definim una ruta /api/data que accepta sol·licituds POST.
  • Utilitzem request.get_json() per deserialitzar el cos de la sol·licitud JSON en un diccionari Python.
  • Extraiem les dades del diccionari i les utilitzem per crear una resposta JSON.

Exercicis Pràctics

Exercici 1: Serialització

Crea una ruta /api/user que retorni la informació d'un usuari en format JSON. L'usuari ha de tenir els camps username, email i role.

Solució:

@app.route('/api/user', methods=['GET'])
def get_user():
    user = {
        'username': 'johndoe',
        'email': '[email protected]',
        'role': 'admin'
    }
    return jsonify(user)

Exercici 2: Deserialització

Crea una ruta /api/user que accepti una sol·licitud POST amb dades JSON d'un usuari i retorni un missatge confirmant la recepció de les dades.

Solució:

@app.route('/api/user', methods=['POST'])
def receive_user():
    user = request.get_json()
    username = user.get('username')
    email = user.get('email')
    role = user.get('role')
    return jsonify({
        'message': f'Received user {username} with email {email} and role {role}.'
    })

Errors Comuns i Consells

  1. Error de Sintaxi JSON: Assegura't que el JSON enviat en la sol·licitud POST sigui vàlid. Utilitza eines com JSONLint per validar el JSON.
  2. Mètode HTTP Incorrecte: Si la ruta espera una sol·licitud POST, assegura't d'utilitzar el mètode POST en el client.
  3. Claus Inexistents: Utilitza el mètode get dels diccionaris per evitar errors si una clau no existeix.

Conclusió

En aquesta secció, hem après com gestionar dades JSON en una aplicació Flask, incloent la serialització i deserialització de dades. Aquests conceptes són fonamentals per a la creació d'APIs RESTful eficients i robustes. En el següent tema, explorarem com autenticar APIs per assegurar les nostres dades.

Curs de Desenvolupament Web amb Flask

Mòdul 1: Introducció a Flask

Mòdul 2: Conceptes Bàsics de Flask

Mòdul 3: Formularis i Entrada d'Usuari

Mòdul 4: Integració de Bases de Dades

Mòdul 5: Autenticació d'Usuaris

Mòdul 6: Conceptes Avançats de Flask

Mòdul 7: APIs RESTful amb Flask

Mòdul 8: Desplegament i Producció

Mòdul 9: Proves i Millors Pràctiques

Mòdul 10: Extensions i Ecosistema de Flask

© Copyright 2024. Tots els drets reservats