Construction d'API RESTful avec Flask ORM Independent

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. Dans la deuxième partie, nous avons créé une API RESTful à l'aide de Flask-Restless, qui dépend de SQLAlchemy en tant qu'ORM. Dans cette partie, nous utiliserons une autre extension Flask, Flask-Restful, qui résume votre ORM et ne fait aucune hypothèse à son sujet.. 

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é. Bien que cet exemple d'application soit basé sur SQLAlchemy lui-même, cette extension peut être utilisée avec n'importe quel ORM de la même manière, comme illustré dans ce tutoriel..

Installation de dépendances

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-Restful

L'application

Avant de commencer, vous voudrez peut-être supprimer le code que nous avons écrit pour la deuxième partie de cette série de tutoriels pour plus de clarté..

Comme toujours, nous commencerons par modifier la configuration de notre application, qui ressemblera aux lignes de code suivantes: 

flask_app / my_app / __ init__.py

depuis flask.ext.restful import Api api = Api (app)

Le simple ajout des quelques lignes ci-dessus au code existant devrait suffire.

flask_app / my_app / catalog / views.py

importer json de flask import Blueprint, abandonner de flask.ext.restful import Ressource de flask.ext.restful import reqparse de my_app.catalog.models import Product de my_app import api, db catalog = Blueprint ('catalogue', __name__) parser = reqparse.RequestParser () parser.add_argument ('name', type = str) parser.add_argument ('price', type = float) @ catalog.route ('/') @ catalog.route ('/ home') def home (): retourne "Bienvenue dans le catalogue". classe ProductApi (ressource): def get (self, id = None, page = 1): si pas id: products = Product.query.paginate (page, 10) .items autre: products = [Product.query.get (id )] si pas produits: abort (404) res =  pour le produit contenu: res [product.id] = 'name': product.name, 'price': product.price, return json.dumps (res ) def post (self): args = parser.parse_args () nom = args ['nom'] prix = args ['prix'] produit = Produit (nom, prix) db.session.add (produit) db.session. commit () res =  res [product.id] = 'name': product.name, 'price': product.price, renvoyer json.dumps (res) api.add_resource (ProductApi, '/ api / product ',' / api / produit /',' / api / produit //')

La plupart du code ci-dessus est explicite. Je vais toutefois souligner quelques points. Le code ci-dessus semble très similaire à celui que nous avons écrit dans la première partie de cette série, mais ici l'extension utilisée fait un tas d'optimisations en arrière-plan et fournit beaucoup plus de fonctionnalités qui peuvent être exploitées. 

Voici les méthodes déclarées sous n'importe quelle classe qui sous-classe Ressource sont automatiquement pris en compte pour le routage. En outre, tous les paramètres que nous nous attendons à recevoir avec les appels HTTP entrants doivent être analysés à l’aide de reqparse.

Test de l'application

Cette application peut être testée exactement de la même manière que dans la deuxième partie de cette série de tutoriels. J'ai conservé l'URL de routage identique pour les mêmes raisons.

Conclusion

Dans cette dernière partie de cette série de didacticiels en trois parties sur le développement d'API RESTful avec Flask, nous avons vu comment écrire des API RESTful indépendantes de l'ORM. Cela résume les bases de l'écriture des API RESTful avec Flask de différentes manières.. 

Vous pouvez en apprendre davantage sur chacune des méthodes décrites et vous pouvez les explorer vous-même, en utilisant les bases que vous avez apprises dans cette série..