Advertisement
  1. Code
  2. Flask

Erstellen von RESTful-APIs mit Flask: ORM-unabhängig

Scroll to top
Read Time: 3 min
This post is part of a series called Building RESTful APIs With Flask.
Building RESTful APIs With Flask: An ORM With SQLAlchemy

() translation by (you can also view the original English article)

Im ersten Teil dieser dreiteiligen Tutorial-Reihe haben wir gesehen, wie RESTful-APIs mithilfe von Flask als Webframework selbst geschrieben werden. Im zweiten Teil haben wir eine RESTful-API mit Flask-Restless erstellt, die von SQLAlchemy als ORM abhängt. In diesem Teil verwenden wir eine andere Flask-Restful, Flask-Restful, die Ihr ORM abstrahiert und keine Annahmen darüber macht.

Ich werde dieselbe Beispielanwendung wie im letzten Teil dieser Reihe verwenden, um den Kontext und die Kontinuität aufrechtzuerhalten. Obwohl diese Beispielanwendung auf SQLAlchemy selbst basiert, kann diese Erweiterung zusammen mit jedem ORM auf ähnliche Weise verwendet werden, wie in diesem Tutorial gezeigt.

Abhängigkeiten installieren

Während wir mit der Anwendung aus dem ersten Teil fortfahren, müssen wir nur eine Abhängigkeit installieren:

1
$ pip install Flask-Restful

Die Anwendung

Bevor wir beginnen, möchten Sie möglicherweise den Code entfernen, den wir für den zweiten Teil dieser Lernserie geschrieben haben, um mehr Klarheit zu schaffen.

Wie immer beginnen wir mit Änderungen an der Konfiguration unserer Anwendung, die ungefähr wie die folgenden Codezeilen aussehen:

flask_app/my_app/__init__.py

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

Es sollte ausreichen, nur die obigen Zeilen zum vorhandenen Code hinzuzufügen.

lask_app/my_app/catalog/views.py

1
import json
2
from flask import Blueprint, abort
3
from flask.ext.restful import Resource
4
from flask.ext.restful import reqparse
5
from my_app.catalog.models import Product
6
from my_app import api, db
7
8
9
catalog = Blueprint('catalog', __name__)
10
11
parser = reqparse.RequestParser()
12
parser.add_argument('name', type=str)
13
parser.add_argument('price', type=float)
14
15
16
@catalog.route('/')
17
@catalog.route('/home')
18
def home():
19
    return "Welcome to the Catalog Home."
20
21
22
class ProductApi(Resource):
23
24
    def get(self, id=None, page=1):
25
        if not id:
26
            products = Product.query.paginate(page, 10).items
27
        else:
28
            products = [Product.query.get(id)]
29
        if not products:
30
            abort(404)
31
        res = {}
32
        for product in products:
33
            res[product.id] = {
34
                'name': product.name,
35
                'price': product.price,
36
            }
37
        return json.dumps(res)
38
39
    def post(self):
40
        args = parser.parse_args()
41
        name = args['name']
42
        price = args['price']
43
        product = Product(name, price)
44
        db.session.add(product)
45
        db.session.commit()
46
        res = {}
47
        res[product.id] = {
48
            'name': product.name,
49
            'price': product.price,
50
        }
51
        return json.dumps(res)
52
53
api.add_resource(
54
   ProductApi,
55
   '/api/product',
56
   '/api/product/<int:id>',
57
   '/api/product/<int:id>/<int:page>'
58
)

Der größte Teil des obigen Codes ist selbsterklärend. Ich werde jedoch einige Punkte hervorheben. Der obige Code scheint dem im ersten Teil dieser Serie sehr ähnlich zu sein, aber hier führt die verwendete Erweiterung eine Reihe von Optimierungen hinter den Kulissen durch und bietet viel mehr Funktionen, die genutzt werden können.

Hier werden die Methoden, die unter einer Klasse deklariert sind, die Resource unterordnet, automatisch für das Routing berücksichtigt. Außerdem müssen alle Parameter, die wir zusammen mit eingehenden HTTP-Aufrufen erwarten, mit reqparse analysiert werden.

Testen der Anwendung

Diese Anwendung kann genauso getestet werden wie im zweiten Teil dieser Tutorial-Reihe. Ich habe die Routing-URL für den gleichen Zweck gleich gehalten.

Abschluss

In diesem letzten Teil dieser dreiteiligen Lernserie zur Entwicklung von RESTful-APIs mit Flask haben wir gesehen, wie ORM-unabhängige RESTful-APIs geschrieben werden. Dies fasst die Grundlagen des Schreibens von RESTful-APIs mit Flask auf verschiedene Arten zusammen.

Zu jeder der behandelten Methoden können Sie mehr lernen, und Sie können dies anhand der in dieser Reihe erlernten Grundlagen selbst untersuchen.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.