Maison  >  Article  >  développement back-end  >  Flask-Restless et Flask-SQLAlchemy : meilleures pratiques pour créer des API RESTful dans les applications Web Python

Flask-Restless et Flask-SQLAlchemy : meilleures pratiques pour créer des API RESTful dans les applications Web Python

WBOY
WBOYoriginal
2023-06-17 19:55:35830parcourir

Dans le développement d'applications Web Python, la création d'une API RESTful est un sujet inévitable. L'API RESTful est devenue la norme pour le développement d'applications Web modernes car elle permet des interfaces API légères, évolutives et faciles à maintenir via le protocole HTTP. Il existe deux bibliothèques Python qui méritent d'être mentionnées : Flask-Restless et Flask-SQLAlchemy. Explorons les meilleures pratiques sur la façon de les utiliser pour créer des API RESTful.

Flask-Restless est une puissante bibliothèque Python conçue pour simplifier le développement d'API RESTful. Il utilise les fonctions de routage et de traitement des requêtes fournies par le framework Flask et intègre également SQLAlchemy pour gérer les opérations de base de données. Flask-SQLAlchemy est une extension pour les opérations de base de données dans les applications Flask. Il fournit également de puissantes fonctionnalités ORM pour faciliter l’écriture de code.

Tout d'abord, nous devons définir le modèle de données à afficher. Par exemple, considérons une simple application de blog qui doit implémenter des API pour les publications, les commentaires et les utilisateurs. Nous pouvons définir le modèle de données suivant :

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    body = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comments = db.relationship('Comment', backref='post', lazy='dynamic')

class Comment(db.Model):
    __tablename__ = 'comments'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(140))
    post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    email = db.Column(db.String(120), unique=True)
    posts = db.relationship('Post', backref='user', lazy='dynamic')
    comments = db.relationship('Comment', backref='user', lazy='dynamic')

Ensuite, nous pouvons utiliser Flask-Restless pour créer une API RESTful. Flask-Restless fournit un moyen rapide et simple de créer des API. Pour créer une API, nous devons effectuer les étapes suivantes :

1. Créez une application flask et configurez la base de données.

from flask import Flask
from flask_restless import APIManager
from app.models import db, Post, Comment, User

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['JSON_SORT_KEYS'] = False

db.init_app(app)

2. Créez un gestionnaire d'API et des points de terminaison d'API.

api_manager = APIManager(app, flask_sqlalchemy_db=db)

api_manager.create_api(Post, methods=['GET', 'POST', 'PUT', 'DELETE'])
api_manager.create_api(Comment, methods=['GET', 'POST', 'PUT', 'DELETE'])
api_manager.create_api(User, methods=['GET', 'POST', 'PUT', 'DELETE'])

3. Lancez l'application Flask.

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

Maintenant, nous avons créé une API RESTful de base qui nous permet d'effectuer des opérations CRUD sur les publications, les commentaires et les utilisateurs via les méthodes HTTP GET, POST, PUT et DELETE. Mais ce n'est qu'un exemple basique. Nous devons également implémenter des fonctionnalités supplémentaires telles que le filtrage, le tri et la pagination.

Flask-Restless fournit un ensemble de paramètres pour filtrer les données. Par exemple, nous pouvons utiliser le paramètre "q" pour spécifier les conditions de recherche, le paramètre "page" pour la pagination, le paramètre "sort" pour le tri, etc.

GET /api/posts?q={"filters":[{"name":"title","op":"like","val":"Flask"}]}&sort=-id&page=1

La requête GET ci-dessus sera triée par identifiant dans l'ordre inverse après avoir été renvoyée et ne renverra que la première page de la liste des articles de blog contenant "Flask" dans le titre (insensible à la casse).

De plus, Flask-Restless prend également en charge le paramètre "include_columns" pour sélectionner les colonnes à renvoyer en fonction des besoins, et le paramètre "exclude_columns" pour exclure les colonnes indésirables. Par exemple, la requête GET suivante renverra une liste contenant l'identifiant de l'article, le titre et les informations sur l'auteur, mais aucune information sur le corps.

GET /api/posts?include_columns=id,title,user&exclude_columns=body

Flask-SQLAlchemy fournit également des outils de filtrage de requêtes utiles, tels que equal_to, like, ilike, etc. Ces outils peuvent être utilisés pour créer des requêtes plus complexes.

users = User.query.filter(User.username.ilike('%john%'))

Dans cet exemple, la requête correspondra à tous les utilisateurs dont le nom d'utilisateur contient "john".

Pour résumer, Flask-Restless et Flask-SQLAlchemy sont deux puissantes bibliothèques Python pour créer des API RESTful. En les utilisant en combinaison, nous pouvons développer rapidement et simplement des applications API faciles à maintenir et à étendre. En pratique, nous devons choisir les fonctionnalités les mieux adaptées à notre application en fonction des besoins réels. Mais les fonctionnalités mentionnées ici constituent les meilleures pratiques pour créer des API RESTful.

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