Python 用 Cloud Endpoints Frameworks を使用して API を作成する

API はリモート プロシージャ コール(RPC)サービスであり、外部クライアントからアクセス可能なリモート メソッドを提供します。各バックエンド API は、ProtoRPC remote.Service クラスをサブクラス化する RPC サービスクラスと 1 つ以上のメソッドで構成されています。メソッドを定義するときは、そのメソッドに渡されるリクエストとそのメソッドが返すレスポンスの Message クラスも定義する必要があります。Message クラスはマッピング関数を使用して受信データを抽出し、サービス メソッドまたは送信レスポンスに適切に渡します。

リクエストにパスやクエリ文字列の引数がある場合は、単純な Message クラスの代わりに ResourceContainer クラスを使ってマッピングを行います。

最後に、API サービスクラスとクラスメソッドを修飾し、リクエストとレスポンスの Message クラスを定義する必要があります。

API の作成

次の手順では、コードを修飾して、単一のクラスで実装する API を作成する方法を説明しています。マルチクラス API を使用する場合は、複数のクラスで実装される API の作成をご覧ください。使用可能なすべてのデコレータについて詳しくは、デコレータをご覧ください。

API を作成するには:

  1. 次のとおり必要なものをインポートします。

    import endpoints
    from endpoints import message_types
    from endpoints import messages
    from endpoints import remote
    
  2. remote.Service のサブクラスを定義し、それを @endpoints.api で修飾します。

    @endpoints.api(name="echo", version="v1")
    class EchoApi(remote.Service):

    API の名前とサービスクラスの名前が同じである必要はありません。バージョン番号は API のバージョンに適用されます。入力する値は、API への URL 内のパスの一部になります。バージョンの詳細については、API のバージョニングの処理をご覧ください。

  3. メソッドがリクエストから受け取るデータとメソッドが返すデータを定義し、リクエスト本文とレスポンス本文で使用する Message クラスを作成します。

    class EchoRequest(messages.Message):
        message = messages.StringField(1)
    
    class EchoResponse(messages.Message):
        """A proto Message that contains a simple string field."""
    
        message = messages.StringField(1)
    
    ECHO_RESOURCE = endpoints.ResourceContainer(
        EchoRequest, n=messages.IntegerField(2, default=1)
    )

    GET リクエストのように、リクエスト本文に引数がない場合は、リクエストの Message クラスを省略し、値 message_types.VoidMessage をそのまま使用できます。

    リクエストにパスやクエリ文字列の引数が含まれる場合は、Message クラスを適切な ResourceContainer に置き換えます。

    Message クラスの作成と使用に関する詳細については、Google Protocol RPC レスポンスおよびリクエストの Message クラスに関するドキュメントをご覧ください。

  4. API のメソッドを作成し、それを @endpoints.method で修飾します。

    @endpoints.method(
            # This method takes a ResourceContainer defined above.
            ECHO_RESOURCE,
            # This method returns an Echo message.
            EchoResponse,
            path="echo",
            http_method="POST",
            name="echo",
        )
        def echo(self, request):

    リクエストにパスやクエリ文字列のデータが含まれる場合は、リクエスト メッセージ型を適切な ResourceContainer に置き換えます。

  5. ウェブサーバーの作成で説明している手順に沿って、API を提供するコードを追加します。

次のステップ