Flask-RESTful と Swagger: Python Web アプリケーションで RESTful API を構築するためのベスト プラクティス (パート 2)
前の記事では、Flask-RESTful と Swagger を使用して RESTful を構築するためのベスト プラクティスを検討しました。 API。 Flask-RESTful フレームワークの基本を紹介し、Swagger を使用して RESTful API のドキュメントを構築する方法を示しました。この記事では引き続きこれらのトピックを掘り下げ、より高度なテクニックと実践方法を紹介します。
RESTful API は安全であり、許可されたユーザーのみがアクセスできるようにする必要があります。これを実現するには、承認と認証を使用する必要があります。承認は、ユーザーがリソースへのアクセスを許可されているかどうかを決定するプロセスです。認証は、ユーザーの身元を確認するプロセスです。
Flask-RESTful は、非常に便利な拡張機能である Flask-JWT を提供します。 Flask-JWT は、トークンベースの認証と権限管理の実装に役立ちます。ここでは、Flask-JWT を使用してトークン認証を実装する方法を簡単に紹介します。
from flask import Flask from flask_jwt import JWT, jwt_required, current_identity from werkzeug.security import safe_str_cmp app = Flask(__name__) app.config['SECRET_KEY'] = 'super-secret' class User: def __init__(self, id, username, password): self.id = id self.username = username self.password = password def __str__(self): return "User(id='%s')" % self.id users = [ User(1, 'john', 'pass'), User(2, 'susan', 'pass'), ] username_table = {u.username: u for u in users} userid_table = {u.id: u for u in users} def authenticate(username, password): user = username_table.get(username, None) if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')): return user def identity(payload): user_id = payload['identity'] return userid_table.get(user_id, None) jwt = JWT(app, authenticate, identity) @app.route('/protected') @jwt_required() def protected(): return '%s' % current_identity if __name__ == '__main__': app.run()
上記のコードでは、Flask アプリケーションに接続される JWT オブジェクトを作成します。 JWT オブジェクトは、Flask アプリの SECRET_KEY を使用してトークンの暗号化と復号化を行います。ユーザー クラスも定義し、ユーザー情報はユーザー リストに保存されます。
認証関数 authenitcate を定義するとき、ユーザー名が存在し、パスワード情報が保持されているかどうかを確認します。パスワードの検証に合格すると、関数はユーザー オブジェクトを返します。 ID 関数 ID を定義するときは、認証されたユーザー オブジェクトを返します。
@app.route('/protected') デコレーターの下で、@jwt_required() デコレーターを使用してこのエンドポイントを保護し、認証され許可されたユーザーのみがエンドポイントにアクセスできるようにします。
バージョン管理は、クライアントとサーバー間の対話を安定させ、下位互換性を保つことができるため、非常に重要な概念です。 API は、特に API に大きな変更があった場合、クライアントとサーバー間の互換性をできる限り維持する必要があります。バージョン管理を実現するには、API にバージョン番号を導入する必要があります。
次は、バージョン管理の適切な実践です:
from flask import Flask from flask_restful import Resource, Api app = Flask(__name__) api = Api(app) version = 'v1' class HelloWorld(Resource): def get(self): return {'version': version, 'message': 'Hello World'} api.add_resource(HelloWorld, f'/{version}/') if __name__ == '__main__': app.run()
上記のコードでは、API のバージョンを指定するバージョン変数を定義し、それを @app.route で使用します。デコレータ f-{version} - バージョン番号を追加する文字列。これにより、バージョン管理が可能になり、クライアントとサーバー間のインターフェイスの互換性が向上します。
Flask-RESTful は、RESTful API をより速く簡単に構築できるようにする多くの拡張プラグインを提供します。一般的に使用される拡張機能の一部を以下に示します。
これらの拡張機能は、RESTful API をより効率的に構築するのに役立ちます。
概要
この記事では、Flask-RESTful と Swagger を使用して RESTful API を構築する方法のベスト プラクティスについて詳しく説明します。承認と認証を使用して API のセキュリティを確保する方法と、バージョン管理を実装する方法を紹介しました。同時に、API をより適切に構築するために、一般的に使用される Flask 拡張機能もいくつか紹介します。これらのプラクティスは、RESTful API をより迅速に構築し、クライアントとサーバー間の対話をより安定させ、下位互換性を持たせるのに役立ちます。
以上がFlask-RESTful と Swagger: Python Web アプリケーションで RESTful API を構築するためのベスト プラクティス (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。