Costruire API RESTful con Flask ORM Independent

Nella prima parte di questa serie di tutorial in tre parti, abbiamo visto come scrivere API RESTful da soli utilizzando Flask come framework web. Nella seconda parte, abbiamo creato un'API RESTful usando Flask-Restless che dipende da SQLAlchemy come ORM. In questa parte, useremo un'altra estensione Flask, Flask-Restful, che astrae il tuo ORM e non fa ipotesi su di esso. 

Prenderò la stessa applicazione di esempio dell'ultima parte di questa serie per mantenere il contesto e la continuità. Sebbene questa applicazione di esempio sia basata su SQLAlchemy stesso, questa estensione può essere utilizzata insieme a qualsiasi ORM in modo simile, come mostrato in questo tutorial.

Installazione di dipendenze

Continuando con l'applicazione dalla prima parte, è necessario installare solo una dipendenza:

$ pip installa Flask-Restful

L'applicazione

Prima di iniziare, potresti voler rimuovere il codice che abbiamo scritto per la seconda parte di questa serie di tutorial per maggiore chiarezza.

Come sempre, inizieremo con le modifiche alla configurazione della nostra applicazione, che assomiglierà alle seguenti linee di codice: 

flask_app / my_app / __ init__.py

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

Basta aggiungere il paio di linee sopra al codice esistente dovrebbe essere sufficiente.

flask_app / my_app / Catalogo / views.py

import json from flask import Blueprint, abort from flask.ext.restful import Risorsa da flask.ext.restful import reqparse da my_app.catalog.models import Prodotto da my_app import api, db catalog = Blueprint ('catalog', __name__) parser = reqparse.RequestParser () parser.add_argument ('name', type = str) parser.add_argument ('price', type = float) @ catalog.route ('/') @ catalog.route ('/ home') def home (): torna "Benvenuti nella home page del catalogo". class ProductApi (risorsa): def get (self, id = None, page = 1): se non id: products = Product.query.paginate (pagina 10). else else: products = [Product.query.get (id )] if not products: abort (404) res =  per prodotto nei prodotti: res [product.id] = 'name': product.name, 'price': product.price, return json.dumps (res ) def post (self): args = parser.parse_args () name = args ['name'] price = args ['price'] product = Prodotto (nome, prezzo) db.session.add (prodotto) db.session. commit () res =  res [product.id] = 'name': product.name, 'price': product.price, restituisce json.dumps (res) api.add_resource (ProductApi, '/ api / product ',' / api / prodotto /',' / api / prodotto //')

La maggior parte del codice sopra è auto-esplicativo. Evidenzierò alcuni punti, comunque. Il codice sopra sembra molto simile a quello che abbiamo scritto nella prima parte di questa serie, ma qui l'estensione usata fa un sacco di ottimizzazioni dietro le quinte e offre molte più funzionalità che possono essere sfruttate. 

Qui i metodi dichiarati in qualsiasi classe che sottoclassi Risorsa vengono automaticamente considerati per il routing. Inoltre, tutti i parametri che ci aspettiamo di ricevere insieme alle chiamate HTTP in arrivo devono essere analizzati utilizzando reqparse.

Testare l'applicazione

Questa applicazione può essere testata esattamente come abbiamo fatto nella seconda parte di questa serie di tutorial. Ho mantenuto l'URL di routing lo stesso per lo stesso scopo.

Conclusione

In questa ultima parte di questa serie di tutorial in tre parti sullo sviluppo di API RESTful con Flask, abbiamo visto come scrivere API RESTful indipendenti da ORM. Questo avvolge le basi della scrittura di API RESTful con Flask in vari modi. 

C'è altro che si può imparare su ciascuno dei metodi trattati, e puoi esplorarlo da solo, usando le basi che hai imparato in questa serie.