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(https://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クライアントからhttps://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を実行すると ユーザーエンドポイント(https://127.0.0.1:5000/user)にリクエストすると、データベースから登録されているすべてのユーザーの詳細が提供されます。ここで2つのことを実装する必要があります。まず、名とパスワードを使用してユーザーを認証する必要があります。次に、認証が成功したときにデータベースからユーザーの詳細を返す必要があります。
名に基づいて詳細を取得するには、 DOMAINにルックアップフィールドを追加する必要があります settings.pyで 。
'additional_lookup': {
'url': 'regex("[\w]+")',
'field': 'username',
}
上記のコードに見られるように、 usernameのルックアップフィールドを追加しました 。これで、GETリクエストが https://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からhttps://127.0.0.1/user/usernameにユーザー名とパスワードを使用して基本認証リクエストを送信してみてください(ユーザー名を他の既存のユーザー名に置き換えてください)。認証が成功すると、次のように応答してユーザーの詳細を取得する必要があります。
アイテムの追加、削除、更新
アイテムAPIの追加
アイテムの追加APIを作成するには、 settings.pyにアイテムの新しいスキーマを作成するだけです。 。
'item': {
'schema': {
'name':{
'type': 'string'
},
'username': {
'type': 'string'
}
}
} Add Item APIは、ログインしている各ユーザーがアイテムを追加するのに役立ちます。アイテムを入力したユーザーのユーザー名と一緒にアイテムを保存します。変更を保存して、次のようにhttps://127.0.0.1/itemに対してPOSTリクエストを実行してみてください:
アイテムAPIの削除
ユーザーが作成したアイテムを削除するには、アイテムのエンドポイント / item_idを呼び出すだけです。 。ただし、DELETEリクエストを呼び出すだけでは、アイテムは削除されません。アイテムを削除するには、 _etagも指定する必要があります 特定のアイテムに関連しています。一度itemid および_etag 一致すると、アイテムはデータベースから削除されます。アイテムエンドポイントでDELETEメソッドが呼び出される方法は次のとおりです。
アイテムAPIの更新
Update APIは、DeleteAPIに似ています。 item idを使用してPATCHリクエストを送信するだけです。 および_etag 更新が必要なフォームフィールド。アイテムの詳細が更新される方法は次のとおりです。