Dans la première partie de cette série de didacticiels en trois parties, nous avons vu comment écrire nous-mêmes des API RESTful en utilisant Flask comme infrastructure Web. L'approche précédente offrait beaucoup de flexibilité mais incluait également l'écriture de nombreux codes qui auraient autrement pu être évités dans des cas plus génériques..
Dans cette partie, nous utiliserons une extension Flask, Flask-Restless, qui génère simplement des API RESTful pour les modèles de base de données définis avec SQLAlchemy. Je prendrai le même exemple d’application que dans la dernière partie de cette série pour conserver le contexte et la continuité.
Tout en continuant avec l'application de la première partie, nous n'avons besoin d'installer qu'une seule dépendance:
$ pip installer Flask-Restless
Flask-Restless
facilite l'ajout d'interfaces d'API RESTful aux modèles écrits avec SQLAlchemy. Tout d'abord, ajoutez le reste APIManager
du flask.ext.restless
extension au fichier de configuration de l'application.
à partir de flask.ext.restless import APIManager manager = APIManager (app, flask_sqlalchemy_db = db)
Le simple ajout des quelques lignes ci-dessus au code existant devrait suffire.
Ce fichier comprend l'essentiel des modifications de la partie précédente. Ci-dessous le fichier complet réécrit.
depuis l'importation de flacon Blueprint depuis le gestionnaire d'importation my_app depuis my_app.catalog.models import Catalogue de produits = Blueprint ('catalogue', __name__) @ catalog.route ('/') @ catalog.route ('/ home') def home (): retour "Bienvenue sur le catalogue Accueil." manager.create_api (Produit, méthodes = ['GET', 'POST'])
La manière dont le code ci-dessus fonctionnerait est assez explicite. Nous venons d'importer le directeur
créé dans un fichier précédent et utilisé pour créer une API pour le Produit
modèle avec la liste les méthodes
. Nous pouvons ajouter plus de méthodes comme EFFACER
, METTRE
, PIÈCE
, etc. au besoin.
Testons cette application en créant des produits et en les listant. Le noeud final créé par cette extension par défaut est http: // localhost: 5000 / api / product
.
Comme je l’ai fait dans la dernière partie de cette série de didacticiels, je vais le tester en utilisant le demandes
bibliothèque via terminal.
>>> demandes d'importation >>> import json >>> res = requests.get ('http://127.0.0.1:5000/api/product') >>> res.json () u'total_pages ': 0 , u'objects ': [], u'num_results': 0, u'page ': 1 >>> d = ' name ': u'iPhone', 'price': 549.00 >>> res = request .post ('http://127.0.0.1:5000/api/product', data = json.dumps (d), en-têtes = 'Content-Type': 'application / json') >>> res.json () u'price ': 549.0, u'id': 1, u'name ': u'iPhone' >>> d = 'name': u'iPad ',' price ': 649,00 >> > res = requests.post ('http://127.0.0.1:5000/api/product', data = json.dumps (d), en-têtes = 'Content-Type': 'application / json') >> > res.json () u'price ': 649.0, u'id': 2, u'name ': u'iPad' >>> res = requests.get ('http://127.0.0.1:55:5000 / api / product ') >>> res.json () u'total_pages': 1, u'objects ': [u'price': 549.0, u'id ': 1, u'name': u ' iPhone ', u'price': 649.0, u'id ': 2, u'name': u'iPad '], u'num_results': 2, u'page ': 1
Il est très pratique de créer automatiquement les API RESTful, mais chaque application possède une logique métier qui nécessite des personnalisations, des validations et un traitement intelligent / sécurisé des demandes selon les besoins..
Ici, demande pré-processeurs
et post-processeurs
viens à la rescousse. Comme le nom l'indique, les méthodes désignées comme préprocesseurs s'exécutent avant le traitement de la demande et les méthodes désignées comme postprocesseurs s'exécutent après le traitement de la demande.. create_api ()
est le lieu où ils sont définis en tant que dictionnaires du type de requête (OBTENIR
, POSTER
, etc.) et les méthodes sous forme de liste qui agira en tant que pré-processeur ou post-processeur sur la requête spécifiée. Voici un exemple de modèle:
manager.create_api (Product, methods = ['GET', 'POST', 'DELETE'], préprocesseurs = 'GET_SINGLE': ['a_preprocessor_for_single_get'], 'GET_MANY': ['another_preprocessor_for_many_get'], 'POST 'a_preprocessor_for_post'], postprocessors = 'DELETE': ['a_postprocessor_for_delete']
le OBTENIR
, METTRE
, et PIÈCE
les demandes ont la possibilité d'être renvoyées pour un ou plusieurs enregistrements; par conséquent, ils ont deux types chacun. Dans le code ci-dessus, remarquez GET_SINGLE
et GET_MANY
pour OBTENIR
demandes.
Les pré-processeurs et les post-processeurs acceptent différents paramètres pour chaque type de requête et travaillent sans valeur de retour. Ceci est laissé pour vous d'essayer vous-même.
Dans cette partie de cette série de didacticiels, nous avons vu comment créer une API RESTful à l'aide de Flask en ajoutant quelques lignes à un modèle basé sur SQLAlchemy..
Dans la dernière et dernière partie de cette série, nous expliquerons comment créer une API RESTful à l'aide d'une autre extension Flask populaire, mais cette fois, l'API sera indépendante de l'outil de modélisation utilisé pour la base de données..