Maison  >  Article  >  développement back-end  >  Configuration d'une API REST en Python pour DynamoDB

Configuration d'une API REST en Python pour DynamoDB

Patricia Arquette
Patricia Arquetteoriginal
2024-11-17 20:42:02419parcourir

Dynamo DB est l'offre NoSQL d'AWS dans le vaste ensemble de bases de données gérées en tant que service qu'ils fournissent. Comme la plupart des autres services, il est entièrement sans serveur, flexible et facile à faire évoluer.

Le modèle de données

Comme nous travaillons ici sur NoSQL, il n'y a pas de réelle restriction sur la structure des données. Nous pouvons utiliser des paires clé-valeur comme attributs pour chaque élément dans un tableau. Examinons à nouveau ces mots-clés.

Tableau - terme assez familier, il s'agit essentiellement d'un ensemble de données, en l'occurrence d'éléments. C'est aussi le point de départ du travail avec DynamoDB sur la console.

Item - une entrée dans un tableau. Vous pourriez le considérer comme une ligne dans une base de données équivalente à SQL.

Attribut - Les points de données qui constituent un élément. Il peut contenir des attributs spécifiques à un élément, des métadonnées ou pratiquement tout ce qui peut être associé à un élément.

Vous pourriez considérer un tableau JSON comme l'équivalent d'une table dans DynamoDB. Je suis sûr que les choses deviendront plus claires à mesure que nous créerons notre propre tableau.

Mise en place de la base de données

C'est littéralement un jeu d'enfant de créer une nouvelle table dans DynamoDB à partir de la console AWS. Tout ce dont vous avez besoin est un nom et une clé de partition, qui est dans ce cas votre clé primaire. Cela vous aidera à rechercher des éléments dans le tableau.

Setting up a REST API in Python for DynamoDB

Je crée un tableau pour tous les jeux auxquels j'ai joué, et je les noterai sur 10 :)

Setting up a REST API in Python for DynamoDB

Vous pouvez jouer avec la table directement depuis la console, essayons d'ajouter un nouvel élément pour voir à quoi il ressemble.

Setting up a REST API in Python for DynamoDB

Ma première entrée doit être mon jeu RPG (jeu de rôle) préféré - The Witcher 3. J'ajouterai un nouvel attribut pour notation et ce sera un solide 9,8 de ma part :)

Mise en place d'une API

Bien, il est maintenant temps d'écrire du code Python pour faire tout cela sans l'interface graphique ;)

## app.py
from flask import Flask, jsonify, request
import boto3
from boto3.dynamodb.conditions import Key
import uuid  # Import uuid module for generating UUIDs

app = Flask(__name__)

# Initialize DynamoDB client
dynamodb = boto3.resource('dynamodb', region_name='ap-south-1')  # Replace with your region
## Do keep in mind to save your AWS credentials file in the root directory
table = dynamodb.Table('games')  # Replace with your table name

# Route to get all games
@app.route('/games', methods=['GET'])
def get_games():
    try:
        response = table.scan()
        games = response.get('Items', [])
        return jsonify({'games': games}), 200
    except Exception as e:
        return jsonify({'error': str(e)}), 500

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

La beauté de Python est que vous pouvez configurer une API à part entière en quelques lignes de code seulement. Ce morceau de code est désormais suffisant pour que nous puissions accéder à la table et en récupérer les données. Nous utilisons la fonction scan pour récupérer des éléments de la table de jeux.

Vous pouvez démarrer l'application en utilisant python3 app.py

Setting up a REST API in Python for DynamoDB

Et vous pouvez vous attendre à une réponse qui ressemble à ceci lorsque vous courez pour le point final /games.

Itinéraires pour créer et mettre à jour une entrée

## app.py
from flask import Flask, jsonify, request
import boto3
from boto3.dynamodb.conditions import Key
import uuid  # Import uuid module for generating UUIDs

app = Flask(__name__)

# Initialize DynamoDB client
dynamodb = boto3.resource('dynamodb', region_name='ap-south-1')  # Replace with your region
## Do keep in mind to save your AWS credentials file in the root directory
table = dynamodb.Table('games')  # Replace with your table name

# Route to get all games
@app.route('/games', methods=['GET'])
def get_games():
    try:
        response = table.scan()
        games = response.get('Items', [])
        return jsonify({'games': games}), 200
    except Exception as e:
        return jsonify({'error': str(e)}), 500

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

Ici, nous utilisons put_item pour ajouter un élément au tableau. Pour mettre à jour un enregistrement, nous utilisons la fonction update_item.

Si vous observez attentivement, nous utilisons UpdateExpression où nous spécifions les attributs que nous mettons à jour. Cela nous permet de contrôler exactement quel attribut est modifié et d'éviter les écrasements accidentels.

Setting up a REST API in Python for DynamoDB

Et pour supprimer l'enregistrement, vous pouvez utiliser quelque chose comme ça -

# Route to create a new game
@app.route('/games', methods=['POST'])
def create_game():
    try:
        game_data = request.get_json()
        name = game_data.get('name')
        rating = game_data.get('rating')
        hours = game_data.get('hours', 0)

        # Generate a random UUID for the new game
        id = str(uuid.uuid4())

        if not name or not rating:
            return jsonify({'error': 'Missing required fields'}), 400

        # Store the game in DynamoDB
        table.put_item(Item={'id': id, 'name': name, 'rating': rating, 'hours': hours})

        # Return the created game with the generated UUID
        created_game = {'id': id, 'name': name, 'rating': rating}
        return jsonify({'message': 'Game added successfully', 'game': created_game}), 201
    except Exception as e:
        return jsonify({'error': str(e)}), 500

# Route to update an existing game
@app.route('/games/<int:id>', methods=['PUT'])
def update_game(id):
    try:
        game_data = request.get_json()
        name = game_data.get('name')
        rating = game_data.get('rating')
        hours = game_data.get('hours', 0)

        if not name and not rating:
            return jsonify({'error': 'Nothing to update'}), 400

        update_expression = 'SET '
        expression_attribute_values = {}

        if name:
            update_expression += ' #n = :n,'
            expression_attribute_values[':n'] = name
        if rating:
            update_expression += ' #r = :r,'
            expression_attribute_values[':r'] = rating
        if hours:
            update_expression += ' #h = :h,'
            expression_attribute_values[':h'] = hours

        update_expression = update_expression[:-1]  # remove trailing comma
        response = table.update_item(
            Key={'id': id},
            UpdateExpression=update_expression,
            ExpressionAttributeNames={'#n': 'name', '#r': 'rating', '#h': 'hours'},
            ExpressionAttributeValues=expression_attribute_values,
            ReturnValues='UPDATED_NEW'
        )
        updated_game = response.get('Attributes', {})
        return jsonify(updated_game), 200
    except Exception as e:
        return jsonify({'error': str(e)}), 500

Eh bien, voilà, vous venez de configurer une API REST avec la fonctionnalité CRUD pour DynamoDB en quelques minutes grâce à Python.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn