RESTful API's bouwen met Flask ORM Independent

In het eerste deel van deze drieledige instructiereeks hebben we gezien hoe we RESTful API's helemaal zelf kunnen schrijven met Flask als web framework. In het tweede deel hebben we een RESTful API gemaakt met behulp van Flask-Restless, die afhankelijk is van SQLAlchemy als ORM. In dit deel gebruiken we een andere Flask-extensie, Flask-Restful, die uw ORM abstraheert en er geen aannames over doet. 

Ik neem dezelfde voorbeeldapplicatie als in het laatste deel van deze serie om de context en continuïteit te behouden. Hoewel deze voorbeeldtoepassing is gebaseerd op SQLAlchemy zelf, kan deze extensie samen met elke willekeurige ORM op dezelfde manier worden gebruikt, zoals in deze zelfstudie wordt getoond.

Afhankelijkheden installeren

Terwijl we doorgaan met de applicatie van het eerste deel, moeten we slechts één afhankelijkheid installeren:

$ pip install Flask-Restful

De applicatie

Voordat we beginnen, wilt u misschien de code verwijderen die we voor het tweede deel van deze tutorialserie hebben geschreven voor meer duidelijkheid.

Zoals altijd zullen we beginnen met wijzigingen in de configuratie van onze applicatie, die er ongeveer zo uit zal zien als de volgende coderegels: 

flask_app / my_app / __ init__.py

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

Alleen het toevoegen van het bovenstaande paar regels aan de bestaande code zou voldoende moeten zijn.

flask_app / my_app / catalogus / views.py

import json uit fles import Blauwdruk, afgebroken uit fles.ext.restful import Bron van flask.ext.restful import reqparse from my_app.catalog.models import Product uit my_app import api, db catalog = Blueprint ('catalogus', __name__) parser = reqparse.RequestParser () parser.add_argument ('naam', type = str) parser.add_argument ('price', type = float) @ catalog.route ('/') @ catalog.route ('/ home') def home (): return "Welkom bij de Catalogus Home". klasse ProductApi (bron): def get (self, id = None, page = 1): if not id: products = Product.query.paginate (page, 10) .items else: products = [Product.query.get (id )] if not products: abort (404) res =  voor product in producten: 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 = Product (naam, prijs) db.session.add (product) db.session. commit () res =  res [product.id] = 'name': product.name, 'price': product.price, retourneer json.dumps (res) api.add_resource (ProductApi, '/ api / product ',' / api / product /',' / api / product //')

Het grootste deel van de bovenstaande code spreekt voor zich. Ik zal echter een paar dingen benadrukken. De bovenstaande code lijkt erg op de code die we in het eerste deel van deze serie hebben geschreven, maar hier gebruikt de gebruikte extensie een aantal optimalisaties achter de schermen en biedt veel meer functies die kunnen worden gebruikt. 

Hier de methoden gedeclareerd onder elke klasse die subklassen hulpbron worden automatisch beschouwd als routing. Ook moeten alle parameters die we verwachten te ontvangen samen met inkomende HTTP-oproepen worden geparseerd met behulp van reqparse.

De toepassing testen

Deze applicatie kan op precies dezelfde manier worden getest als in het tweede deel van deze tutorialserie. Ik heb de routerings-URL hetzelfde gehouden voor hetzelfde doel.

Conclusie

In dit laatste deel van deze driedelige instructiereeks over het ontwikkelen van RESTful API's met Flask, hebben we gezien hoe ORM-onafhankelijke RESTful API's te schrijven. Dit omvat de basis van het schrijven van RESTful API's met Flask op verschillende manieren. 

Er is meer dat kan worden geleerd over elk van de behandelde methoden, en u kunt dit zelf verkennen, met behulp van de basisbeginselen die u in deze serie hebt geleerd.