Bygger RESTful APIer med flaske ORM Independent

I den første delen av denne tredelte opplæringsserien så vi hvordan du skriver RESTful APIer, alle av oss selv, ved hjelp av Flask som webrammen. I den andre delen opprettet vi et RESTful API ved hjelp av Flask-Restless, som avhenger av SQLAlchemy som ORM. I denne delen vil vi bruke en annen Flask-utvidelse, Flask-Restful, som abstrakterer ORM-en, og gir ingen forutsetninger om det. 

Jeg vil ta samme prøveapplikasjon som i den siste delen av denne serien for å opprettholde kontekst og kontinuitet. Selv om dette eksemplet programmet er basert på SQLAlchemy selv, kan denne utvidelsen brukes sammen med noen ORM på lignende måte som vist i denne opplæringen.

Installere avhengigheter

Mens du fortsetter med søknaden fra første del, må vi bare installere en avhengighet:

$ pip installasjon Flask-Restful

Søknaden

Før vi begynner, vil du kanskje fjerne koden som vi skrev for den andre delen av denne opplæringsserien for mer klarhet.

Som alltid begynner vi med endringer i programmets konfigurasjon, som ser ut som de følgende kodelinjene: 

flask_app / my_app / __ init__.py

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

Bare å legge ovenstående par linjer til eksisterende kode skal være tilstrekkelig.

flask_app / my_app / Katalog / views.py

importer json fra kolbe import Blåkopi, avbryt fra flask.ext.restful import Ressurs fra flask.ext.restful import reqparse fra my_app.catalog.models import Produkt fra my_app import api, db catalog = Blueprint ('katalog', __name__) parser = reqparse.RequestParser () parser.add_argument ('navn', type = str) parser.add_argument ('pris', type = float) @ catalog.route ('/') @ catalog.route ('/ home') def home (): returnere "Velkommen til katalogen Hjem." klasse ProductApi (Resource): def get (selv, id = Ingen, side = 1): Hvis ikke id: products = Product.query.paginate (side, 10) .emner annet: products = [Product.query.get )] hvis ikke produkter: abort (404) res =  for produkt i produkter: res [product.id] = 'navn': product.name, 'price': product.price, return json.dumps ) def post (selv): args = parser.parse_args () name = args ['name'] price = args ['price'] product = Produkt (navn, pris) db.session.add (produkt) db.session. commit () res =  res [product.id] = 'navn': product.name, 'price': product.price, returnere json.dumps (res) api.add_resource (ProductApi, '/ api / product ',' / api / produkt /',' / api / produkt //')

Mesteparten av koden ovenfor er selvforklarende. Jeg vil fremheve noen få poeng, skjønt. Koden ovenfor virker veldig lik den som vi skrev i første del av denne serien, men her bruker utvidelsen en masse optimeringer bak scenene og gir mange flere funksjoner som kan utnyttes. 

Her er metodene deklarert under noen klasser som underklasser Ressurs blir automatisk vurdert for ruting. Også, noen parametere som vi forventer å motta sammen med innkommende HTTP-anrop, må analyseres ved hjelp av reqparse.

Teste applikasjonen

Denne applikasjonen kan testes på nøyaktig samme måte som vi gjorde i den andre delen av denne opplæringsserien. Jeg har beholdt rutingsadressen den samme til samme formål.

Konklusjon

I denne siste delen av denne tredelte opplæringsserien om å utvikle RESTful APIs med Flask, så vi hvordan du skriver ORM-uavhengige RESTful APIs. Dette bryter opp grunnlaget for å skrive RESTful APIer med Flask på ulike måter. 

Det er flere som kan læres om hver av metodene dekket, og du kan utforske dette på egenhånd, ved å bruke det grunnleggende du har lært i denne serien.