En aquest tema, aprendrem a crear punts finals RESTful utilitzant Flask. Els punts finals RESTful són essencials per a la creació d'APIs que permeten la comunicació entre diferents aplicacions. A través d'aquests punts finals, podem realitzar operacions CRUD (Crear, Llegir, Actualitzar, Eliminar) sobre els recursos.

Conceptes Clau

Abans de començar amb la implementació, és important entendre alguns conceptes clau:

  • Punt Final (Endpoint): Una URL específica que respon a una sol·licitud HTTP.
  • Recurs: Una entitat que es pot accedir i manipular a través de l'API (per exemple, usuaris, articles, etc.).
  • Mètodes HTTP: Els verbs HTTP (GET, POST, PUT, DELETE) que defineixen l'acció a realitzar sobre el recurs.

Configuració Inicial

Abans de començar, assegura't de tenir Flask instal·lat. Si no ho tens, pots instal·lar-lo utilitzant pip:

pip install Flask

Creació d'una Aplicació Flask Bàsica

Comencem creant una aplicació Flask bàsica. Crea un fitxer anomenat app.py i afegeix el següent codi:

from flask import Flask, jsonify, request

app = Flask(__name__)

# Dades de mostra
articles = [
    {'id': 1, 'title': 'Article 1', 'content': 'Contingut de l\'article 1'},
    {'id': 2, 'title': 'Article 2', 'content': 'Contingut de l\'article 2'}
]

@app.route('/')
def home():
    return "Benvingut a l'API RESTful amb Flask!"

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

Creació de Punts Finals RESTful

  1. Obtenir Tots els Articles (GET)

Afegim un punt final per obtenir tots els articles:

@app.route('/articles', methods=['GET'])
def get_articles():
    return jsonify({'articles': articles})

  1. Obtenir un Article per ID (GET)

Afegim un punt final per obtenir un article específic per ID:

@app.route('/articles/<int:id>', methods=['GET'])
def get_article(id):
    article = next((article for article in articles if article['id'] == id), None)
    if article:
        return jsonify(article)
    else:
        return jsonify({'message': 'Article no trobat'}), 404

  1. Crear un Nou Article (POST)

Afegim un punt final per crear un nou article:

@app.route('/articles', methods=['POST'])
def create_article():
    new_article = {
        'id': articles[-1]['id'] + 1 if articles else 1,
        'title': request.json['title'],
        'content': request.json['content']
    }
    articles.append(new_article)
    return jsonify(new_article), 201

  1. Actualitzar un Article (PUT)

Afegim un punt final per actualitzar un article existent:

@app.route('/articles/<int:id>', methods=['PUT'])
def update_article(id):
    article = next((article for article in articles if article['id'] == id), None)
    if article:
        article['title'] = request.json.get('title', article['title'])
        article['content'] = request.json.get('content', article['content'])
        return jsonify(article)
    else:
        return jsonify({'message': 'Article no trobat'}), 404

  1. Eliminar un Article (DELETE)

Afegim un punt final per eliminar un article:

@app.route('/articles/<int:id>', methods=['DELETE'])
def delete_article(id):
    global articles
    articles = [article for article in articles if article['id'] != id]
    return jsonify({'message': 'Article eliminat'}), 200

Codi Complet

Aquí tens el codi complet de l'aplicació Flask amb els punts finals RESTful:

from flask import Flask, jsonify, request

app = Flask(__name__)

# Dades de mostra
articles = [
    {'id': 1, 'title': 'Article 1', 'content': 'Contingut de l\'article 1'},
    {'id': 2, 'title': 'Article 2', 'content': 'Contingut de l\'article 2'}
]

@app.route('/')
def home():
    return "Benvingut a l'API RESTful amb Flask!"

@app.route('/articles', methods=['GET'])
def get_articles():
    return jsonify({'articles': articles})

@app.route('/articles/<int:id>', methods=['GET'])
def get_article(id):
    article = next((article for article in articles if article['id'] == id), None)
    if article:
        return jsonify(article)
    else:
        return jsonify({'message': 'Article no trobat'}), 404

@app.route('/articles', methods=['POST'])
def create_article():
    new_article = {
        'id': articles[-1]['id'] + 1 if articles else 1,
        'title': request.json['title'],
        'content': request.json['content']
    }
    articles.append(new_article)
    return jsonify(new_article), 201

@app.route('/articles/<int:id>', methods=['PUT'])
def update_article(id):
    article = next((article for article in articles if article['id'] == id), None)
    if article:
        article['title'] = request.json.get('title', article['title'])
        article['content'] = request.json.get('content', article['content'])
        return jsonify(article)
    else:
        return jsonify({'message': 'Article no trobat'}), 404

@app.route('/articles/<int:id>', methods=['DELETE'])
def delete_article(id):
    global articles
    articles = [article for article in articles if article['id'] != id]
    return jsonify({'message': 'Article eliminat'}), 200

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

Exercicis Pràctics

  1. Afegir un Punt Final per Obtenir Articles per Títol:

    • Crea un punt final que permeti obtenir articles filtrats per títol.
  2. Afegir Validació de Dades:

    • Implementa validació per assegurar-te que els camps title i content no estiguin buits quan es creï o actualitzi un article.
  3. Gestió d'Errors:

    • Afegeix gestió d'errors per manejar situacions com sol·licituds mal formades o errors del servidor.

Resum

En aquest tema, hem après a crear punts finals RESTful utilitzant Flask. Hem cobert les operacions bàsiques CRUD i hem vist com gestionar les sol·licituds HTTP per interactuar amb els recursos. Aquests conceptes són fonamentals per a la creació d'APIs robustes i escalables. En el següent tema, explorarem com gestionar dades JSON en les nostres APIs RESTful.

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