Clădire API-uri rapide cu balon Un ORM cu SQLAlchemy

În prima parte a acestei serii de tutorial din trei părți, am văzut cum să scriem API-uri RESTful de către noi înșine folosind Balonul ca cadru web. Abordarea anterioară a oferit o mulțime de flexibilitate, dar a inclus și scrierea unei mulțimi de coduri care altfel ar fi putut fi evitate în cazuri mai generice. 

În această parte, vom folosi o extensie Flask-Restless, care pur și simplu generează API RESTful pentru modelele bazei de date definite cu SQLAlchemy. Voi face aceeași aplicație ca în ultima parte a acestei serii pentru a menține contextul și continuitatea.

Instalarea dependențelor

În timp ce continuăm cu aplicația din prima parte, trebuie să instalăm o singură dependență:

$ pip instalează Flask-Restless

Aplicația

Flask-Restless face adăugarea interfețelor API RESTful la modelele scrise cu SQLAlchemy o bucată de tort. Mai întâi, adăugați REST APIManager de la flask.ext.restless extinderea la fișierul de configurare a aplicației.

flask_app / my_app / __ init__.py

de la importul flask.ext.restless APIManager manager = APIManager (app, flask_sqlalchemy_db = db)

Este suficient să adaugi doar codul existent de mai sus.

flask_app / my_app / Catalog / views.py

Acest fișier cuprinde cea mai mare parte a modificărilor din partea anterioară. Mai jos este fișierul complet rescris.

din import de flacără Blueprint de la managerul de import my_app din importul my_app.catalog.models Catalog de produse = Blueprint ('catalog', __name__) @ catalog.route ('/') @ catalog.route ('/ home' retur "Bine ați venit în Catalogul de acasă." manager.create_api (Produs, metode = ['GET', 'POST'])

Este destul de explicativ cum ar funcționa codul de mai sus. Tocmai am importat administrator care a fost creat într-un fișier anterior și este folosit pentru a crea un API pentru Produs cu modelul listat metode. Putem adăuga mai multe metode cum ar fi ȘTERGE, A PUNE, PLASTURE, etc, după cum este necesar.

Aplicarea în acțiune

Sa testam aceasta aplicatie prin crearea unor produse si listarea acestora. Punctul final creat de extensia implicită este http: // localhost: 5000 / api / produs.

Așa cum am făcut în ultima parte a acestei serii tutorial, voi testa acest lucru folosind cereri bibliotecă prin terminal.

>>> cereri de import >>> 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 = ' nume ': u'iPhone', 'pret': 549.00 .post ('http://127.0.0.1:5000/api/product', data = json.dumps (d), headers = 'Tip de conținut': 'application / json')) >>> res.json () u'price ': 549.0, u'id': 1, u'name ': u'iPhone' >>> d = 'nume': u'iPad ',' pret ': 649.00 >> > res = requests.post ('http://127.0.0.1:5000/api/product', data = json.dumps (d), anteturi = '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' iPhone ', u'price': 649.0, u'id ': 2, u'name': u'iPad '], u'num_results': 2, u'page ': 1

Cum de a personaliza

Este foarte util ca API-urile RESTful să fie create automat, dar fiecare aplicație are o logică de afaceri care necesită personalizări, validări și manipulare inteligentă / sigură a cererilor, după cum este necesar. 

Aici, cereți preprocesoare și postprocessors veniți la salvare. După cum indică numele, metodele desemnate ca preprocesoare se execută înainte de procesarea cererii și metodele desemnate ca postprocesoare rulează după procesarea cererii. create_api () este locul unde acestea sunt definite ca dicționare ale tipului de cerere (OBȚINE, POST, etc) și metodele ca listă care vor acționa ca preprocesoare sau postprocesoare la cererea specificată. Mai jos este un exemplu de șablon:

manager.create_api (Produs, metode = ['GET', 'POST', 'DELETE'], preprocessors = 'GET_SINGLE': ['a_preprocessor_for_single_get'], 'GET_MANY': ['other_preprocessor_for_many_get' 'a_preprocessor_for_post'], postprocesoare = 'DELETE': ['a_postprocessor_for_delete']) 

OBȚINE, A PUNE, și PLASTURE cererile au flexibilitatea de a fi concediați pentru înregistrări simple și multiple; prin urmare, ele au câte două tipuri. În codul de mai sus, observați GET_SINGLE și GET_MANY pentru OBȚINE cereri. 

Preprocesoarele și postprocesoarele acceptă parametri diferiți pentru fiecare tip de solicitare și lucrează fără nicio valoare de returnare. Acest lucru este lăsat să încercați singur.

Concluzie

În această parte a acestei serii de tutorial am văzut cum să creăm un API RESTful folosind Flack doar adăugând câteva linii la un model bazat pe SQLAlchemy. 

În următoarea și ultima parte a acestei serii, voi discuta cum să creați un API RESTful utilizând o altă extensie populară Flask, dar de data aceasta API va fi independent de instrumentul de modelare folosit pentru baza de date.

Cod