LU06h - Erstellen einer RESTful API mit Flask und DAO-Klassen

Nachdem wir unsere DAO-Klassen und Datenmodelle definiert haben, können wir diese nun in einer RESTful API in Flask nutzen. Eine RESTful API ermöglicht es Clients, über HTTP-Methoden mit dem Server zu interagieren. In diesem Beispiel werden wir uns auf die CRUD-Operationen für die ShoppingItem-Ressource konzentrieren.

HTTP-Methoden und ihre Entsprechung in CRUD

Die folgenden HTTP-Methoden werden verwendet, um CRUD-Operationen auszuführen:

Beispiel für eine Flask-API

Nachfolgend finden Sie ein einfaches Beispiel, wie die ShoppingItemDao-Klasse in einer Flask-API verwendet werden kann:

from flask import Flask, request, jsonify
 
app = Flask(__name__)
 
@app.route('/shoppingItems', methods=['GET'])
def get_items():
    items = [vars(item) for item in dao.get_all_items()]
    return jsonify(items), 200
 
@app.route('/shoppingItems/<int:item_id>', methods=['GET'])
def get_item(item_id):
    item = dao.get_item(item_id)
    if item:
        return jsonify(vars(item)), 200
    return jsonify({'error': 'Item not found'}), 404
 
@app.route('/shoppingItems', methods=['POST'])
def add_item():
    data = request.get_json()
    new_item = ShoppingItem(None, data['item_name'], data['quantity'])
    dao.add_item(new_item)
    return jsonify(vars(new_item)), 201
 
@app.route('/shoppingItems/<int:item_id>', methods=['PUT'])
def update_item(item_id):
    data = request.get_json()
    item = dao.get_item(item_id)
    if item:
        item.item_name = data['item_name']
        item.quantity = data['quantity']
        dao.update_item(item)
        return jsonify(vars(item)), 200
    return jsonify({'error': 'Item not found'}), 404
 
@app.route('/shoppingItems/<int:item_id>', methods=['DELETE'])
def delete_item(item_id):
    if dao.delete_item(item_id):
        return jsonify({'success': True}), 200
    return jsonify({'error': 'Item not found'}), 404
 
if __name__ == '__main__':
    dao = ShoppingItemDao('example.db')
    app.run()

HTTP-Statuscodes

In obigem Beispiel werden HTTP-Statuscodes verwendet, um den Erfolg oder Misserfolg einer Operation anzugeben:

Datenaustausch über JSON

In der API verwenden wir JSON (JavaScript Object Notation) für den Datenaustausch. Mit der jsonify-Funktion aus dem Flask-Paket können wir Python-Objekte einfach in JSON umwandeln und als HTTP-Antwort zurückgeben.

In ähnlicher Weise verwenden wir request.get_json() in Flask, um die JSON-Daten aus dem HTTP-Request-Body zu extrahieren.

Dies ermöglicht eine einfache und standardisierte Kommunikation zwischen dem Client und dem Server.


© Kevin Maurizi