Themes

Créer une API RESTful avec flask en python

Tags de cet article : api;python;restful;flask;FR
24 lectures

Avez-vous déjà eu envie de créer votre propre API ?
Ca tombe bien car c'est le sujet de ce tutoriel ! Nous allons concevoir une API RESTful en utilisant python et son framework flask.
Flask est un framework vous permettant de créer des applications web HTTP en python.
Avant de commencer, assurez-vous d'avoir python et son gestionnaire de paquets pip installé sur votre machine.
Si ce n'est pas le cas, voici un article pour vous expliquer comment faire.
Ensuite, nous allons utiliser pip pour installer le paquet flask, à l'aide de cette commande :
pip3 install flask
Maintenant que python et flask sont installés, nous pouvons passer à la programmation de notre API. Créez un dossier pour votre projet (dans mon cas, une API de gestion de livres).
Dans ce dossier, créez un nouveau fichier nommé app.py et commencez le développement de votre API.
from flask import Flask, jsonify, request

app = Flask(__name__)

# List of all the books available
books = [
    {"id": 1, "title": &quo
t;To Kill a Mockingbird", "author": "Harper Lee"},
    {"id": 2, "title": &quo
t;1984", "author": "George Orwell"},
    {"id": 3, "title": &quo
t;Pride and Prejudice", "author": "Jane Austen"}
]

# Route for the home page
@app.route('/')
def home():
    return "Welcome to the Book API!"

# Route to get all books
@app.route('/api/books/all', methods=['GET'])
def get_books():
    return jsonify(books)

# Route to get a specific book by ID
@app.route('/api/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
    book = next((book for book in books if book['id'] == book_id), None)
    if book:
        return jsonify(book)
    return jsonify({"error": "Book not found"}), 404

# Route to add a new book
@app.route('/api/books/add', methods=['POST'])
def add_book():
    new_book = request.json
    new_book['id'] = len(books) + 1
    books.append(new_book)
    return jsonify(new_book), 201

if __name__ == '__main__':
    app.run(debug=True)
Vous pouvez tester l'API en vous rendant sur http://127.0.0.1:5000 dans votre navigateur. La page devrait afficher Welcome to the Book API.
Vous pouvez également vous rendre sur http://127.0.0.1:5000/api/books pour avoir la liste de l'intégralité des livres.
Bien que cette API soit très basique (pas de gestion de clés d'API, pas de base de données...), c'est un bon exerice pour apprendre flask.
Si vous souhaitez aller plus loin, vous pouvez ajouter un système de gestion de clés d'API en créant une liste des clés autorisées ainsi qu'un fonction vérifiant la clé envoyée.
keys=["c229caab-8593-4ad8-ba63-72a1f4db1bfa"]
def checkKey():
    token=request.headers.get("X-Api-Key")
    if token not in keys: #If token does not exists
        return False
    return True
Vous pouvez maintenant appeller checkKey() au début de chaque fonction de votre programme comme ceci :
@app.route('/api/books/add', methods=['POST'])
def add_book():
    if not checkKey():
        return jsonify({"error" : "Bad Api Key"}), 401
    new_book = request.json
    new_book['id'] = len(books) + 1
    books.append(new_book)
    return jsonify(new_book), 201
Cela aura pour effet de renvoyer une erreur 401 Unauthorized si la clé fournie n'est pas valide (pas dans la liste keys)
Voilà ! C'est tout pour aujourd'hui ! Si vous le souhaitez, vous pouvez tenter d'ajouter un système enregistrant les livres dans une base de données.
Si vous rencontrez des problèmes ou avez des questions, je suis joignable dans les commentaires.