Pythonは、これまでで最も読みやすく、書きやすいプログラミング言語の1つです。何年にもわたって、Pythonの人気は高まったばかりであり、Webアプリケーションの開発、スクリプト作成、ゲームの作成、科学計算などで広く使用されています。
FlaskはPythonWebアプリケーションフレームワークであり、Python初心者にとって使いやすいため人気が高まっています。このチュートリアルでは、Flask、MongoDB、Redisに基づくRESTAPI構築フレームワークであるEVEについて説明します。公式ドキュメントから:
Powered by Flask、MongoDB、Redis、および善意のEveを使用すると、高度にカスタマイズ可能な、フル機能のRESTfulWebサービスを簡単に構築およびデプロイできます。
作成するもの
このチュートリアルでは、EVEフレームワークを使用してRESTAPIを構築する方法を説明します。次に、AngularJSを使用して、シンプルなアプリのフロントエンドを設計し、EVEを使用して構築されたRESTAPIを使用して機能させるようにします。このチュートリアルでは、次の機能を実装します。
- ユーザーAPIを作成する
- ユーザーAPIを検証する
- アイテムAPIを追加
- アイテムAPIの削除
- アイテムAPIの更新
はじめに
インストール
EVEのインストールにはpipを使用します。
pip install eve
MongoDB
を使用します データベースとして。システムごとにインストールするための公式ドキュメントをご覧ください。
基本APIの作成
PythonAPI
というプロジェクトフォルダを作成します 。 PythonAPI
に移動します api.py
というファイルを作成します 。 api.py
の内部 EVE
をインポートします EVEオブジェクトを作成します。
from eve import Eve app = Eve()
次に、 app
を実行します プログラムがメインプログラムとして実行されるとき。
from eve import Eve app = Eve() if __name__ == '__main__': app.run()
MongoDB
を実行します 次のコマンドを使用します:
mongod --dbpath= <PATH-TO> /data/db/
ご覧のとおり、dbファイルのパスを指定する必要があります。 data / db
を作成するだけです ファイルシステムで上記のコマンドを実行します。
MongoDB
のインスタンスとともに 実行中、EVEにはAPIリソースに関する情報を含む構成ファイルが必要です。したがって、 PythonAPI
フォルダは、 settings.py
という別のファイルを作成します 次のコードを追加します:
DOMAIN = {'user': {}}
上記のコードは、 user
のリソースであることをEVEに通知します。 利用可能です。
すべてのファイルを保存して、 api.py
を実行します :
python api.py
次のように、APIはオンラインである必要があります:
PostmanRESTクライアントを使用してAPIにリクエストを送信します。無料で、クリックするだけでインストールできます。インストールが完了したら、アプリを起動してAPI URL(http://127.0.0.1:5000/)を入力し、[送信]をクリックします。次のような応答があります:
特定のAPIリソースを呼び出していないため、使用可能なすべてのリソースが表示されます。次に、 user
を呼び出してみてください リソースと、 user
に固有の応答が必要です 。
ユーザーAPIの作成と検証
ユーザーAPIの作成
まず、アプリケーションのユーザーを作成または登録するためのAPIを構築します。ユーザーには、名
などの特定のフィールドがあります。 、姓
、ユーザー名
、パスワード
および電話番号
。
したがって、最初にユーザーのスキーマを定義する必要があります。スキーマは、キーフィールドのフィールドとデータ型を定義します。 settings.py
を開きます DOMAIN
を変更します 示されているようにスキーマを定義することによって:
DOMAIN = { 'user': { 'schema': { 'firstname': { 'type': 'string' }, 'lastname': { 'type': 'string' }, 'username': { 'type': 'string', 'unique': True }, 'password': { 'type': 'string' }, 'phone': { 'type': 'string' } } } }
上記のコードでわかるように、ユーザーを作成するために必要なキーフィールドと、スキーマで定義されたそのデータ型を定義しました。変更を保存して、 api.py
を実行します 。次のように、Postmanクライアントからhttp://127.0.0.1/userへの必要なパラメータとともにPOSTリクエストを実行してみてください。
ユーザーへのPOSTリクエストで、 405 Method Not Allowed
をスローしました エラー。デフォルトでは、EVEはGETリクエストのみを受け入れます。他の方法を使用する場合は、明示的に定義する必要があります。 settings.py
を開きます 次のようにリソースメソッドを定義します:
RESOURCE_METHODS = ['GET', 'POST']
変更を保存して、 api.py
を実行します 。ここで、もう一度 POST
を試してください ユーザーに送信すると、次の応答があります:
ご覧のとおり、上記のPOSTリクエストは成功しました。 settings.py
でデータベース構成を定義していません 、したがって、EVEは MongoDB
の実行インスタンスを使用してリクエストを完了しました 。 MongoDB
にログインしましょう シェルして、新しく作成されたレコードを確認します。 MongoDBインスタンスが実行されている状態で、mongoシェルをトリガーします。
mongo
mongo
に入ったら シェル、利用可能なすべてのデータベースを一覧表示します。
show databases;
eve
が必要です データベース。 eve
に切り替えます データベース。
use eve;
show
を実行します eve
内のテーブルを一覧表示するコマンド データベース。
show tables;
リストされたテーブルには、 user
というテーブルが必要です。 。 user
からのレコードを一覧表示します 次のコマンドを使用してテーブルを作成します:
db.user.find()
ユーザーテーブルから選択したレコードは次のとおりです。
ユーザーAPIの検証
次に、既存のユーザーを検証するためのAPIを作成します。通常、 get
を実行すると ユーザーエンドポイント(http://127.0.0.1:5000/user)にリクエストすると、データベースから登録されているすべてのユーザーの詳細が提供されます。ここで2つのことを実装する必要があります。まず、名とパスワードを使用してユーザーを認証する必要があります。次に、認証が成功したときにデータベースからユーザーの詳細を返す必要があります。
名に基づいて詳細を取得するには、 DOMAIN
にルックアップフィールドを追加する必要があります settings.py
で 。
'additional_lookup': { 'url': 'regex("[\w]+")', 'field': 'username', }
上記のコードに見られるように、 username
のルックアップフィールドを追加しました 。これで、GETリクエストが http://127.0.0.1:5000/user/
に送信されます。 <ユーザー名>コード> 特定の
username
を持つユーザーの詳細を返します 。特定のユーザーにリクエストを送信すると、 username
も送信されます およびpassword
認証用。
ユーザー名とパスワードに基づいて特定のユーザーを確認するための基本認証を行います。まず、 Basic Auth
をインポートする必要があります EVEからのクラス。 Authenticate
というクラスを作成します 図のように認証を実装するには:
from eve.auth import BasicAuth class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method):
ここで、リソースが user
の場合 リクエストメソッドはGET
です 、ユーザーを認証します。認証が成功すると、APIエンドポイントに名を持つユーザーのユーザー詳細が返されます。また、ユーザー名とパスワードを指定して、ユーザーの作成を制限します。そのため、メソッドがPOSTで、APIエンドポイントがuserの場合、ユーザー名とパスワードを確認して検証します。したがって、これが完全な Authenticate
です クラス:
class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method): if resource == 'user' and method == 'GET': user = app.data.driver.db['user'] user = user.find_one({'username': username,'password':password}) if user: return True else: return False elif resource == 'user' and method == 'POST': return username == 'admin' and password == 'admin' else: return True
Authenticate
を渡す必要があります APIの開始時のクラス名。したがって、次のようにAPI開始コードを変更します。
if __name__ == '__main__': app = Eve(auth=Authenticate) app.run()
すべての変更を保存して、 api.py
を実行します 。 Postmanからhttp://127.0.0.1/user/usernameにユーザー名とパスワードを使用して基本認証リクエストを送信してみてください(ユーザー名を他の既存のユーザー名に置き換えてください)。認証が成功すると、次のように応答してユーザーの詳細を取得する必要があります。
アイテムの追加、削除、更新
アイテムAPIの追加
アイテムの追加APIを作成するには、 settings.py
にアイテムの新しいスキーマを作成するだけです。 。
'item': { 'schema': { 'name':{ 'type': 'string' }, 'username': { 'type': 'string' } } }
Add Item APIは、ログインしている各ユーザーがアイテムを追加するのに役立ちます。アイテムを入力したユーザーのユーザー名と一緒にアイテムを保存します。変更を保存して、次のようにhttp://127.0.0.1/itemに対してPOSTリクエストを実行してみてください:
アイテムAPIの削除
ユーザーが作成したアイテムを削除するには、アイテムのエンドポイント / item_id
を呼び出すだけです。 。ただし、DELETEリクエストを呼び出すだけでは、アイテムは削除されません。アイテムを削除するには、 _etag
も指定する必要があります 特定のアイテムに関連しています。一度itemid
および_etag
一致すると、アイテムはデータベースから削除されます。アイテムエンドポイントでDELETEメソッドが呼び出される方法は次のとおりです。
アイテムAPIの更新
Update APIは、DeleteAPIに似ています。 item id
を使用してPATCHリクエストを送信するだけです。 および_etag
更新が必要なフォームフィールド。アイテムの詳細が更新される方法は次のとおりです。