web-dev-qa-db-fra.com

Créer une API RESTful en utilisant Flask?

Le site du didacticiel Flask ici indique que pour créer une API RESTful, vous devez écrire des classes qui étendent restful.Resource, puis les ajouter à l'API en:

app = Flask(__name__)
api = restful.Api(app)
class HelloWorld(restful.Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

Cependant, j'ai consulté pas mal de tutoriels qui n'utilisent que des fonctions avec le décorateur @app.route('/path') que je suis plus habitué à voir dans les applications Flask. Par exemple, ici , ils ont:

@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

Et ici :

@app.route('/')
def api_root():
    return 'Welcome'

Quelle est la différence entre l'utilisation de la classe restful.Resource et uniquement les fonctions décorées, le cas échéant? S'il n'y a pas de différences, que dois-je faire par convention pour créer une API RESTful? 

14
u3l

Réponse courte

restful.Resource provient d'un Flask-Restful extension, qui n'est pas Flask lui-même. Le tutoriel de Miguel utilise Flask pour écrire une interface reposante. 

Longue réponse:

Tout d’abord, avec Flask, il existe un certain nombre de extensions de fiole . Bien qu'ils travaillent ensemble, ils constituent des packages distincts et sont écrits par des auteurs individuels. Flask-Restful est une extension de Flask.

Le didacticiel de Miguel explique comment créer une api reposante en utilisant Flask seul. 

Flask-Restful dans le but d’empêcher certains d’entre nous de réinventer la roue, promet de transformer une classe personnalisée (ou une structure de données Python personnalisée) en un service Web reposant. Flask-RESTplus , un fork de Flask-Restul, génère automatiquement de la documentation api avec l'interface utilisateur swagger.

En outre, Flask a également documenté l'utilisation de MethodView pour permettre aux développeurs d'écrire leurs propres API reposantes. En parallèle, Flask-Restless promet de transformer une classe SqlAlchemy en un service Web reposant.

Une mise à jour (18/07/2016), flask-api transforme une fonction/vue en une interface reposante et est conçue par le même auteur (Tom Christie) de Cadre reposant Django .

_ {Il y a beaucoup de routes menant à Roma}.

35
chfw
#from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

    return "Hello, World!"

if __== '__main__':

    app.run(debug=True)
0
Hasitha Lakshan

L'utilisation de méthodes au lieu de classes peut rapidement devenir confuse lorsque de nombreux points de terminaison sont nécessaires. Les classes/ressources sont un meilleur moyen de séparer et de découpler la logique. De plus, votre code devient beaucoup plus lisible et plus facile à modifier/corriger

Utiliser fiole-reposant est probablement la meilleure façon, bien que j'aurai du travail à faire pour créer le plan directeur de votre API, configurer le routage, gérer les paramètres de requête et de nombreux autres éléments nécessaires à toutes les API normales, ce qui devient assez gênant.

J'ai construit ce cadre léger sur un flacon reposant qui vous permet de construire facilement des apis reposants sans vous soucier de tout le câblage nécessaire et de vous concentrer sur la définition de votre api et le codage de la logique métier. Vous pouvez le vérifier ici: https://github.com/sebastiandev/Peach

Il est plus orienté vers les bases de données NOSQL, mais c’est uniquement parce que le proxy de la base de données par défaut est celui de mongodb. Si vous avez besoin de SQL, vous pouvez créer un proxy pour sqlachemy (ou attendre que je trouve le temps de le construire).

0
Sebastian