ホームページ  >  記事  >  バックエンド開発  >  Flask-Restless と Flask-SQLAlchemy: Python Web アプリケーションで RESTful API を構築するためのベスト プラクティス

Flask-Restless と Flask-SQLAlchemy: Python Web アプリケーションで RESTful API を構築するためのベスト プラクティス

WBOY
WBOYオリジナル
2023-06-17 19:55:35843ブラウズ

Python Web アプリケーション開発では、RESTful API の構築は避けられないトピックです。 RESTful API は、HTTP プロトコルを通じて軽量でスケーラブルで保守が容易な API インターフェイスを可能にするため、最新の Web アプリケーション開発の標準になっています。 Flask-Restless と Flask-SQLAlchemy という 2 つの Python ライブラリについて言及する価値があります。それらを使用して RESTful API を構築する方法に関するベスト プラクティスを見てみましょう。

Flask-Restless は、RESTful API の開発を簡素化するように設計された強力な Python ライブラリです。 Flask フレームワークによって提供されるルーティングおよびリクエスト処理機能を使用し、データベース操作を処理するために SQLAlchemy も統合します。 Flask-SQLAlchemy は、Flask アプリケーションでのデータベース操作の拡張機能です。また、コードの作成を容易にする強力な ORM 機能も提供します。

まず、表示するデータ モデルを定義する必要があります。たとえば、投稿、コメント、ユーザー用の API を実装する必要がある単純なブログ アプリケーションについて考えてみましょう。次のデータ モデルを定義できます:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    body = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comments = db.relationship('Comment', backref='post', lazy='dynamic')

class Comment(db.Model):
    __tablename__ = 'comments'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(140))
    post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    email = db.Column(db.String(120), unique=True)
    posts = db.relationship('Post', backref='user', lazy='dynamic')
    comments = db.relationship('Comment', backref='user', lazy='dynamic')

次に、Flask-Restless を使用して RESTful API を作成できます。 Flask-Restless は、API を迅速かつ簡単に作成する方法を提供します。 API を作成するには、次の手順を実行する必要があります:

1. フラスコ アプリケーションを作成し、データベースを構成します。

from flask import Flask
from flask_restless import APIManager
from app.models import db, Post, Comment, User

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['JSON_SORT_KEYS'] = False

db.init_app(app)

2. API マネージャーと API エンドポイントを作成します。

api_manager = APIManager(app, flask_sqlalchemy_db=db)

api_manager.create_api(Post, methods=['GET', 'POST', 'PUT', 'DELETE'])
api_manager.create_api(Comment, methods=['GET', 'POST', 'PUT', 'DELETE'])
api_manager.create_api(User, methods=['GET', 'POST', 'PUT', 'DELETE'])

3. Flask アプリケーションを起動します。

if __name__ == '__main__':
    app.run(debug=True)

これで、GET、POST、PUT、および DELETE HTTP メソッドを介して投稿、コメント、ユーザーに対して CRUD 操作を実行できる基本的な RESTful API が作成されました。しかし、これは単なる基本的な例にすぎません。また、フィルタリング、並べ替え、ページングなどの追加機能を実装する必要もあります。

Flask-Restless は、データをフィルター処理するためのパラメーターのセットを提供します。たとえば、「q」パラメータを使用して検索条件を指定したり、「page」パラメータを使用してページングを指定したり、「sort」パラメータを使用してソートを指定したりできます。

GET /api/posts?q={"filters":[{"name":"title","op":"like","val":"Flask"}]}&sort=-id&page=1

上記の GET リクエストは、返された後に ID によって逆順にソートされ、タイトルに「Flask」を含むブログ投稿リストの最初のページ (大文字と小文字は区別されません) のみが返されます。

さらに、Flask-Restless は、必要に応じて返される列を選択する「include_columns」パラメータと、不要な列を除外する「exclude_columns」パラメータもサポートしています。たとえば、次の GET リクエストは、記事 ID、タイトル、著者情報を含むリストを返しますが、本文情報は返しません。

GET /api/posts?include_columns=id,title,user&exclude_columns=body

Flask-SQLAlchemy は、equal_to、like、ilike などの便利なクエリ フィルター ツールも提供します。これらのツールを使用すると、より複雑なクエリを作成できます。

users = User.query.filter(User.username.ilike('%john%'))

この例では、クエリはユーザー名に「john」が含まれるすべてのユーザーと一致します。

要約すると、Flask-Restless と Flask-SQLAlchemy は、RESTful API を作成するための 2 つの強力な Python ライブラリです。これらを組み合わせて使用​​することで、保守や拡張が容易な API アプリケーションを迅速かつ簡単に開発できます。実際には、実際のニーズに基づいてアプリケーションに最適な機能を選択する必要があります。ただし、ここで説明する機能は、RESTful API を構築するためのベスト プラクティスです。

以上がFlask-Restless と Flask-SQLAlchemy: Python Web アプリケーションで RESTful API を構築するためのベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。