ウェブサーバーの作成

作成した API を使用するウェブサーバーを定義する必要があります。 Python 用 Cloud Endpoints Frameworks によって標準のウェブサーバー ゲートウェイ インターフェース(WSGI)が実装され、これによって API へのリクエストがコード内のメソッドにルーティングされます。

App Engine で実行される他のアプリケーションの場合と同じように、app.yaml というファイルを作成する必要があり、このファイルで App Engine アプリの設定を構成します。ウェブサーバーを定義するには、app.yaml ファイルを変更します。

ウェブサーバーを定義するには:

  1. Python モジュール(たとえば、main.py)を作成し、トップレベルに endpoints.api_server オブジェクトを作成します。

    api = endpoints.api_server([EchoApi])

    api = endpoints.api_server([EchoApi]) というコードによって WSGI アプリケーションが作成され、このアプリケーションが API リクエストを EchoAPI クラス内のメソッドにルーティングします。

    remote.Service オブジェクト(API を作成したときに定義したもの)のリストを endpoints.api_server に渡すことができます。複数のクラスで実装される API がある場合、remote.Service オブジェクトは複数クラスからなるコレクションです。詳しくは、複数のクラスで実装される API の作成をご覧ください。

    endpoints.api_server オブジェクト用に別のモジュールを作成するかどうかは、作成した API が単一か複数かによって決まります。

    • 複数のファイルで定義される(複数の remote.Service サブクラスを使用する)複数の API を作成した場合、endpoints.api_server オブジェクト用に別の 1 つのモジュールを作成することをおすすめします。これで、すべてのクラスファイルをインポートできるようになります。

    • API を 1 つだけ作成した場合は、API を定義するモジュールに、必須の endpoints.api_server コードを追加できます。この場合は、他のクラスをインポートする必要がないためです。

  2. app.yaml ファイル内で、次のように、先ほど作成したウェブサーバーを Cloud Endpoints の場所にマッピングします。

    handlers:
    # The endpoints handler must be mapped to /_ah/api.
    - url: /_ah/api/.*
      script: main.api
    
    

    main は、endpoints.api_server オブジェクトを定義した Python モジュールです。

別のパスから API を提供する

省略可。別のパス(たとえば /api/)から API を提供するには、次の手順を実行します。

  1. デコレータを次のように変更します。

    @endpoints.api(name='echo', version='v1', base_path='/api/')
    
  2. app.yaml ファイルの handlers セクションを変更します。

    handlers:
    - url: /api/.*
      script: main.api
    

Python 用 Endpoints Frameworks でのロギング

Python 用 Endpoints Frameworks では標準の Python ロギング モジュールを使用して、アプリケーションのステータスとリクエストのライフサイクルについての情報をログに記録します。App Engine ログとその表示方法の詳細については、App Engine ドキュメントのアプリケーション ログの読み取りと書き込みをご覧ください。

Python のロギング モジュールでは、ログのレベルがあらかじめ定義されています。重大度が低い順に、ログレベルを次に示します。

ログレベル 説明
DEBUG 詳細なログが記録されます。一般的に、このレベルに設定するのは問題のトラブルシューティングを行うときのみです。
INFO Endpoints Frameworks のデフォルトのログレベルです。アプリケーションの進行状況を概要レベルでトレースできます。
WARNING なんらかの予期しない事態の発生を示しますが、アプリケーションは回復可能であり、正常に稼働します。
ERROR エラーが発生したことを示します。このエラーによって機能がいくらか失われるおそれがありますが、アプリケーションはまだ稼働中です。
CRITICAL 深刻なエラーまたはイベントが発生したことを示します。これが原因でアプリケーションがシャットダウンするおそれがあります。

ロガーは、ドット区切りの階層構造で存在します。たとえば、ロガー endpoints.api_config はロガー endpoints の子です。このような階層が採用されているため、どのログが出力または抑制されるかを正確にコントロールできます。一般的には、Endpoints Frameworks の 2 つのルートロガー、つまり endpointsendpoints_management だけを変更します。

Endpoints Frameworks の DEBUG ロギングを有効にする

ログ読み取りの過負荷を避けるために、Endpoints Frameworks のロガーは、ログレベルが INFO 以上のログエントリだけを記録するように設定されています。Endpoints Frameworks をモジュールにインポートした後は、いつでもログレベルを次のように変更できます。

import logging
logging.getLogger('endpoints').setLevel(logging.DEBUG)
logging.getLogger('endpoints_management').setLevel(logging.DEBUG)

setLevel メソッドは、ロガーの最小ログレベルを設定します。