作成した API を使用するウェブサーバーを定義する必要があります。 Python 用 Cloud Endpoints Frameworks によって標準のウェブサーバー ゲートウェイ インターフェース(WSGI)が実装され、これによって API へのリクエストがコード内のメソッドにルーティングされます。
App Engine で実行される他のアプリケーションの場合と同じように、app.yaml
というファイルを作成する必要があり、このファイルで App Engine アプリの設定を構成します。ウェブサーバーを定義するには、app.yaml
ファイルを変更します。
ウェブサーバーを定義するには:
Python モジュール(たとえば、
main.py
)を作成し、トップレベルにendpoints.api_server
オブジェクトを作成します。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
コードを追加できます。この場合は、他のクラスをインポートする必要がないためです。
app.yaml
ファイル内で、次のように、先ほど作成したウェブサーバーを Cloud Endpoints の場所にマッピングします。main
は、endpoints.api_server
オブジェクトを定義した Python モジュールです。
別のパスから API を提供する
省略可。別のパス(たとえば /api/
)から API を提供するには、次の手順を実行します。
デコレータを次のように変更します。
@endpoints.api(name='echo', version='v1', base_path='/api/')
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 つのルートロガー、つまり endpoints
と endpoints_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
メソッドは、ロガーの最小ログレベルを設定します。