Nella prima parte di questa serie di tutorial in tre parti, abbiamo visto come scrivere API RESTful da soli utilizzando Flask come framework web. L'approccio precedente offriva molta flessibilità, ma includeva anche la scrittura di un sacco di codice che altrimenti avrebbe potuto essere evitato in casi più generici.
In questa parte, utilizzeremo un'estensione Flask, Flask-Restless, che genera semplicemente API RESTful per i modelli di database definiti con SQLAlchemy. Prenderò la stessa applicazione di esempio dell'ultima parte di questa serie per mantenere il contesto e la continuità.
Continuando con l'applicazione dalla prima parte, è necessario installare solo una dipendenza:
$ pip installa Flask-Restless
Flask-Restless
rende l'aggiunta di interfacce API RESTful ai modelli scritti con SQLAlchemy un pezzo di torta. Innanzitutto, aggiungi il REST APIManager
dal flask.ext.restless
estensione al file di configurazione dell'applicazione.
da flask.ext.restless import APIManager manager = APIManager (app, flask_sqlalchemy_db = db)
Basta aggiungere il paio di linee sopra al codice esistente dovrebbe essere sufficiente.
Questo file comprende la maggior parte delle modifiche dalla parte precedente. Di seguito è riportato il file riscritto completo.
dalla matrice importare Blueprint da my_app import manager da my_app.catalog.models import Product catalog = Blueprint ('catalog', __name__) @ catalog.route ('/') @ catalog.route ('/ home') def home (): torna "Benvenuti nella home page del catalogo". manager.create_api (Product, methods = ['GET', 'POST'])
È abbastanza auto-esplicativo come funzionerebbe il codice sopra. Abbiamo appena importato il manager
è stato creato in un file precedente e viene utilizzato per creare un'API per il file Prodotto
modello con la lista metodi
. Possiamo aggiungere più metodi come ELIMINA
, METTERE
, PATCH
, ecc. se necessario.
Proviamo questa applicazione creando alcuni prodotti e elencandoli. L'endpoint creato da questa estensione per impostazione predefinita è http: // localhost: 5000 / api / prodotto
.
Come ho fatto nell'ultima parte di questa serie di tutorial, metterò alla prova questo usando il richieste
libreria via terminale.
>>> richieste di importazione >>> 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 = ' nome ': u'iPhone', 'prezzo': 549.00 >>> res = richieste .post ('http://127.0.0.1:5000/api/product', data = json.dumps (d), header = '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), header = '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: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
È davvero utile avere le API RESTful create automaticamente, ma ogni applicazione ha una logica aziendale che richiede personalizzazioni, convalide e una gestione intelligente / sicura delle richieste in base alle esigenze.
Qui, richiesta preprocessori
e postprocessori
vieni in soccorso Come indicano i nomi, i metodi designati come preprocessori vengono eseguiti prima dell'elaborazione della richiesta e i metodi designati come postprocessori vengono eseguiti dopo l'elaborazione della richiesta. create_api ()
è il luogo in cui sono definiti come dizionari del tipo di richiesta (OTTENERE
, INVIARE
, ecc.) ei metodi come elenco che fungeranno da preprocessori o postprocessori sulla richiesta specificata. Di seguito è riportato un esempio di modello:
manager.create_api (Product, methods = ['GET', 'POST', 'DELETE'], preprocessors = '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']))
Il OTTENERE
, METTERE
, e PATCH
le richieste hanno la flessibilità di essere licenziate per record singoli e multipli; quindi, hanno due tipi ciascuno. Nel codice sopra, avviso GET_SINGLE
e GET_MANY
per OTTENERE
richieste.
I preprocessori e i postprocessori accettano parametri diversi per ogni tipo di richiesta e funzionano senza alcun valore di ritorno. Questo è lasciato per te a provare da solo.
In questa parte di questa serie di tutorial, abbiamo visto come creare un'API RESTful utilizzando Flask semplicemente aggiungendo un paio di righe a un modello basato su SQLAlchemy.
Nella prossima e ultima parte di questa serie, illustrerò come creare un'API RESTful usando un'altra estensione di Flask popolare, ma questa volta l'API sarà indipendente dallo strumento di modellazione utilizzato per il database.