Cloud Endpoints Frameworks バージョン 2.0 への移行

Cloud Endpoints Frameworks は Endpoints でという名称でした。この 2 つのバージョンを区別するため、このページでは新しいバージョンを Endpoints Frameworks バージョン 2.0 とし、古いバージョンを Endpoints バージョン 1.0 としています。このページでは、Cloud Endpoints バージョン 1.0 アプリケーションを Endpoints Frameworks バージョン 2.0 に移行する方法について説明します。 この移行では、ライブラリを変更し、アプリケーションの構成を変更しますが、コードには変更を行いません。

利点

Endpoints バージョン 2.0 には次のような利点があります。

  • リクエスト レイテンシの短縮
  • App Engine の機能(カスタム ドメインなど)との統合強化
  • 新しい API 管理機能

Endpoints Frameworks バージョン 2.0 に移行しても、API のインターフェースには影響しません。既存のクライアントは、クライアント側コードを変更しなくても、移行後も引き続き動作します。

機能の概要

次の機能は、Endpoints バージョン 1.0 と下位互換性があります。

  • すべての Google クライアント ライブラリで使用される JSON-REST プロトコル
  • ディスカバリ サービス
  • 既存のすべての認証機能(OAuth2/OpenID Connect)
  • 生成されたクライアント用のクライアント ライブラリ サポート
  • CORS(Google JavaScript クライアント ライブラリを使用しない JavaScript 呼び出し元用)
  • API Explorer

トラフィック分割は使用できません。

現時点で除外されている機能

次の機能は利用できません。これらの機能が必要な場合は、機能のリクエストを送信してください。

  • JSON-RPC プロトコル。レガシー iOS クライアントで必要になります。Endpoints Frameworks バージョン 2.0 API 用の iOS クライアントを作成する際には、REST API 用の Google API Objective-C クライアント ライブラリを使用することをおすすめします。
  • 自動 ETag
  • 自動 kind フィールド
  • IDE との統合
  • fields 部分応答
  • PATCH API メソッドの自動作成

Endpoints バージョン 1.0 からの移行

バージョン 1.0 から移行するには:

  1. アプリケーションのメイン ディレクトリに /lib という名前のサブフォルダを作成します。

  2. アプリケーションのメイン ディレクトリからライブラリをインストールします。

     pip install -t lib google-endpoints --ignore-installed
    
  3. libraries セクションで、アプリケーションの app.yaml ファイルから - name: endpoints エントリと version 1.0 エントリを削除します。例:

    libraries:
    - name: endpoints   #Remove
      version: 1.0      #Remove
    
  4. app.yaml ファイルの libraries セクションに、次の記述を追加します。

    libraries:
    - name: pycrypto
      version: 2.6
    - name: ssl
      version: 2.7.11
    

    Endpoints Frameworks には、これらのバージョンの pycrypto および ssl ライブラリが必要です。

  5. app.yaml ファイルの handlers セクションで、url ディレクティブを - url: /_ah/spi/.* から - url: /_ah/api/.* に変更します。

  6. アプリケーションのルート ディレクトリで、appengine_config.py という名前のファイルを作成または変更し、以下の項目を含めます。

    from google.appengine.ext import vendor
    
    vendor.add('lib')
    
  7. API のバージョン文字列を確認します。@endpoints.api(version='v1', ...) デコレータで指定されたバージョン文字列は、API のパスに表示されます。SemVer 標準と互換性のあるバージョン文字列を指定すると、API のデプロイ時にメジャー バージョン番号のみが API のパスに含まれます。たとえば、バージョン 2.1.0echo という API のパスは /echo/v2 などになります。echo API をバージョン 2.2.0 に更新し、下位互換性のある変更をデプロイすると、このパスは /echo/v2 のままになります。これにより、下位互換性のある変更を行うときに、クライアントの既存のパスを変更せずに API バージョン番号を更新できます。 しかし、echo API をバージョン 3.0.0 に更新すると(互換性が失われる変更をデプロイするため)、パスは /echo/v3 に変更されます。

  8. Endpoints Frameworks アプリケーションを再デプロイします。

新しいデプロイの確認

新しいフレームワークでトラフィックが処理されていることを確認するには:

  1. 新しいデプロイにいくつかのリクエストを送信します。
  2. プロジェクトの Cloud Logging ページにアクセスします。

    [ログ エクスプローラ] ページに移動

  3. パスが /_ah/api で始まるリクエストがログに含まれている場合は、Endpoints Frameworks バージョン 2.0 が API を処理していることを示しています。パスが /_ah/spi で始まるリクエストがログに含まれていてはいけません。そのようなリクエストが含まれている場合は、引き続き Endpoints バージョン 1.0 プロキシがリクエストを処理していることを示しています。

API 管理の追加

Endpoints Frameworks バージョン 2.0 には、次の API 管理機能が追加されています。

  • API キー管理
  • API 共有
  • ユーザー認証
  • API 指標
  • API ログ

まず、Python での Endpoints Frameworks スタートガイドをご覧ください。

トラブルシューティング

このセクションでは、Endpoints Frameworks バージョン 2.0 への移行で発生する一般的なエラーと推奨される解決方法について説明します。

API から 404 エラーが返されるが、API Explorer では API が正しくリストされる

Endpoints Frameworks バージョン 2.0 に移行するときには、古い Endpoints バージョン 1.0 の構成を削除する必要があります。古い構成がアプリケーション構成に残っていると、Endpoints サービスはアプリを引き続きバージョン 1.0 アプリとして扱います。/_ah/spi に送信されたリクエストが App Engine ログに記録されている場合、これはクライアントに HTTP 404 エラーが返されたことを示します。

  1. このようなエラーが発生した場合は、app.yaml ファイルから次の行を削除します。

    handlers:
    - url: /_ah/spi/.*
      script: ...
    
  2. app.yaml ファイルの handlers セクションのパスが正しいことを確認します。

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

エラー メッセージ: ImportError: cannot import name locked_file

この問題は、依存関係に App Engine と互換性のないバージョンの oauth2client ライブラリが含まれている場合に発生します。既知の問題をご覧ください。