Home >Backend Development >Python Tutorial >Building RESTful APIs With Flask: ORM Independent

Building RESTful APIs With Flask: ORM Independent

William Shakespeare
William ShakespeareOriginal
2025-03-09 10:46:17965browse

This tutorial concludes a three-part series on building RESTful APIs with Flask, demonstrating an ORM-agnostic approach using Flask-Restful. Unlike the previous installments which relied on SQLAlchemy, this method abstracts the Object-Relational Mapper (ORM), offering flexibility to work with any ORM.

The example application remains consistent for clarity, although it uses SQLAlchemy internally. The tutorial showcases how to adapt this approach to other ORMs.

Dependency Installation

To begin, install the necessary dependency:

pip install Flask-Restful

Application Setup

Remove any code from the previous tutorial parts for a clean start. The application configuration is modified as follows:

flask_app/my_app/__init__.py

from flask import Flask
from flask_restful import Api

app = Flask(__name__)
api = Api(app)

flask_app/my_app/product/views.py

import json
from flask import request, Blueprint, abort
from my_app import db, app, api
from my_app.product.models import Product
from flask_restful import Resource, reqparse

catalog = Blueprint('catalog', __name__)

parser = reqparse.RequestParser()
parser.add_argument('name', type=str)
parser.add_argument('price', type=float)


@catalog.route('/')
@catalog.route('/home')
def home():
    return "Welcome to the Catalog Home."


# FLASK RESTFUL ENDPOINTS

class ProductApi(Resource):

    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 = {}
        for product in products:
            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(name, price)
        db.session.add(product)
        db.session.commit()
        res = {}
        res[product.id] = {
            'name': product.name,
            'price': product.price,
        }
        return json.dumps(res)


api.add_resource(
    ProductApi,
    '/api/product',
    '/api/product/<id>',
    '/api/product/<id>/<page>'
)</page></id></id>

reqparse handles form data validation.

Testing

Testing is identical to the previous tutorial. The routing URLs remain unchanged.

Building RESTful APIs With Flask: ORM Independent

Conclusion

This final part demonstrates building ORM-independent RESTful APIs with Flask, completing the series. Further exploration of the covered methods is encouraged, building upon the foundational knowledge presented.

This post includes contributions from Esther Vaati, a software developer and writer for Envato Tuts .

The above is the detailed content of Building RESTful APIs With Flask: ORM Independent. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn