sql >> データベース >  >> NoSQL >> MongoDB

EVEを使用したRESTAPIの構築

    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 更新が必要なフォームフィールド。アイテムの詳細が更新される方法は次のとおりです。


    1. Redisデータ構造の概要:ソートされたセット

    2. mongoose.modelでコレクション名を変更するにはどうすればよいですか?

    3. 時間範囲別のMongoDB.NETドライバーグループ

    4. MongoDBAtlasを使用してクラウドにデータベースクラスターを作成する