ここでは、Cloud Endpoints Frameworks for Python を使用してサンプル API を構成、デプロイし、サンプル API にリクエストを送信する方法を説明します。Endpoints Frameworks for Python は App Engine 標準 Python 2.7 ランタイム環境と統合されています。Endpoints Frameworks は、App Engine アプリケーションから API とクライアント ライブラリを生成するためのツール、ライブラリ、機能で構成されています。
目標
タスクの概要を示す次のリストを参照しながら、チュートリアルを実施してください。API にリクエストを送信するには、すべてのタスクを行う必要があります。
- Google Cloud プロジェクトを設定します。始める前にをご覧ください。
- 必須ソフトウェアをインストールし、App Engine アプリケーションを作成します。必須ソフトウェアをインストールして構成するをご覧ください。
- サンプルコードをダウンロードします。サンプルコードを取得するをご覧ください。
- OpenAPI ドキュメントを生成します。Endpoints を構成するをご覧ください。
- Endpoints 構成をデプロイして、Endpoints サービスを作成します。Endpoints 構成をデプロイするをご覧ください。
- パソコンでサンプルを実行します。サンプルをローカルで実行するをご覧ください。
- API を提供するバックエンドを作成し、API をデプロイします。API バックエンドをデプロイするをご覧ください。
- API にリクエストを送信します。API にリクエストを送信するをご覧ください。
- API の活動を追跡します。API の活動を追跡するをご覧ください。
- Google Cloud アカウントに課金されないようにします。クリーンアップをご覧ください。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
 
  
 
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 後で必要になるため、 Google Cloud プロジェクト ID をメモしておきます。
- Python 用 Google Cloud CLI のインストールの手順に従って、App Engine スタンダード開発環境をセットアップします。app-engine-pythonとapp-engine-python-extrasgcloudコンポーネントをインストールします。
- 次のコマンドを実行します。
    - gcloud CLI を更新します。gcloud components update 
- 
        Google Cloud CLI(gcloud)が、 Google Cloudにある対象のデータとサービスへのアクセスが許可されていることを確認します。gcloud auth login 
- 表示された新しいブラウザタブで、アカウントを選択します。
- デフォルト プロジェクトを実際のプロジェクト ID に設定します。gcloud config set project [YOUR_PROJECT_ID] [YOUR_PROJECT_ID]は、実際の Google Cloudプロジェクト ID に置き換えます。他にも Google Cloud プロジェクトがあり、gcloudを使用してそれらのプロジェクトを管理する場合は、gcloud CLI 構成の管理をご覧ください。
 
- gcloud CLI を更新します。
- 
    
サンプル API にリクエストを送信するためのアプリケーションが必要です。 - Linux ユーザーと MacOS ユーザーの場合: このチュートリアルでは、curlの使用例を示します。これは通常、オペレーティング システムにプリインストールされています。curlを所有していない場合は、curlのリリースとダウンロードのページからダウンロードできます。
- Windows ユーザーの場合: このチュートリアルでは、Invoke-WebRequestの使用例を示しています。これは PowerShell 3.0 以降でサポートされています。
 
- Linux ユーザーと MacOS ユーザーの場合: このチュートリアルでは、
- Python 開発環境に pip が含まれていることを確認します。
- C 拡張機能を Python 用にコンパイルできることを確認します。
    - Windows: Microsoft Visual C++ 9.0 以上が必要です。Microsoft ダウンロード センターから Microsoft Visual C++ Compiler for Python 2.7 をダウンロードできます。
- その他のオペレーティング システム: オペレーティング システムによっては、コンパイラ ツール(たとえば、build-essentialというパッケージ内)や Python 開発ヘッダー(たとえば、python-devというパッケージ内)のインストールが必要です。
 
- 
    Linux の場合、 ENDPOINTS_GAE_SDK環境変数を App Engine SDK フォルダのパス[Path-to-Google-Cloud-SDK]/platform/google_appengineに設定します。[Path-to-Google-Cloud-SDK]は、次のコマンドの出力に置き換えます。gcloud info --format="value(installation.sdk_root)" 
- App Engine アプリケーションを作成します。
    - App Engine アプリケーションを作成するリージョンを選択します。次のコマンドを実行してリージョンのリストを取得します。
        gcloud app regions list 
- 次のコマンドを使用して App Engine アプリケーションを作成します。[YOUR_PROJECT_ID]は実際の Google Cloudプロジェクト ID に、[YOUR_REGION]は App Engine アプリケーションを作成するリージョンに置き換えます。gcloud app create \ --project=[YOUR_PROJECT_ID] \ --region=[YOUR_REGION] 次に例を示します。 gcloud app create --project=example-project-12345 --region=us-central 
 
- App Engine アプリケーションを作成するリージョンを選択します。次のコマンドを実行してリージョンのリストを取得します。
        
必須ソフトウェアをインストールして構成する
サンプルコードを取得する
GitHub からサンプル API のクローンを作成するには:
- ローカルマシンにサンプル リポジトリのクローンを作成します。 - git clone https://github.com/GoogleCloudPlatform/python-docs-samples
- サンプルコードを含むディレクトリに変更します。 - cd python-docs-samples/appengine/standard/endpoints-frameworks-v2/echo
Endpoints を構成する
Endpoints を構成する場合は、先に Endpoints Frameworks Python ライブラリをインストールしておく必要があります。その後、Endpoints Frameworks ライブラリのツールを使用してサンプル API 用の OpenAPI ドキュメントを生成します。Endpoints で API を管理するには、Endpoints Frameworks ライブラリと OpenAPI ドキュメントが必要です。詳しくは、API 管理の追加をご覧ください。
Endpoints Frameworks ライブラリをインストールする
ここでは、Python の pip を使用して Endpoints Frameworks ライブラリをサンプル API のプロジェクト ディレクトリに追加する手順を説明します。
Endpoints Frameworks ライブラリをサンプルに追加するには、次のようにします。
- サンプル API のメイン ディレクトリ - python-docs-samples/appengine/standard/endpoints-frameworks-v2/echoにいることを確認します。
- プロジェクトに - /libサブディレクトリを作成します。- mkdir lib
- サンプルのメイン ディレクトリ - python-docs-samples/appengine/standard/endpoints-frameworks-v2/echoから、インストール コマンドを実行します。- pip install --target lib --requirement requirements.txt --ignore-installed- 次の点にご注意ください。 - この - pipコマンドでは、GNU Compiler Collection(GCC)を使用して拡張モジュールをコンパイルできます。macOS を使用していて、現在のシステムで初めて GCC を実行する場合は、Apple の XCode ライセンスへの同意が必要になる場合があります。そのためには、- sudo xcodebuild -licenseを実行します。
- パソコンに複数の Python バージョンがインストールされている場合は、このチュートリアルで使用している Python のバージョンに対応する - pipのバージョンを使用します。バージョンの不一致(Pyton 2.7 の- pythonを使用している場合に、Pyton 3.4 の- pipなど) によって、理解できないエラーが発生することがあります。必要に応じて、pip を Python モジュールとして実行できます。その場合、上記のコマンドの- pipを- python -m pipに置き換えてください。
- コマンドの実行時に - pipが適切なパッケージを見つけられない場合は、- pip install --upgrade pipを実行してアップグレードしてください。アップグレードが完了したら、インストール コマンドをもう一度試します。
- Debian と Ubuntu の一部のリリースでは、DistutilsOptionError が発生し、 - pipが失敗する可能性があります。このエラーが発生した場合は、--system フラグを追加します。
 
正常に完了すると、lib ディレクトリには Endpoints Frameworks アプリケーションのビルドに必要なファイルが含まれます。
OpenAPI ドキュメントを生成する
Endpoints Frameworks ライブラリからツールを使用して、サンプルコードの REST API について記述するドキュメントを生成します。
OpenAPI ドキュメントを生成するには:
- サンプルのメイン ディレクトリにいることを確認します。 - python-docs-samples/appengine/standard/endpoints-frameworks-v2/echo
- OpenAPI ドキュメントを生成します。 - python lib/endpoints/endpointscfg.py get_openapi_spec main.EchoApi --hostname [YOUR_PROJECT_ID].appspot.com- [YOUR_PROJECT_ID]は、実際の Google Cloud プロジェクト ID に置き換えます。表示される警告は無視してください。Endpoints ツールは、現在のディレクトリに- echov1openapi.jsonという OpenAPI ドキュメントを生成します。Endpoints ツールは、- @endpoints.apiデコレータに指定されているサービスの名前とバージョンに基づいてファイルの名前を付けます。詳しくは、API の作成をご覧ください。- Endpoints は - hostname引数で指定されたテキストをサービス名として使用します。- YOUR_PROJECT_ID.appspot.comの名前形式は、App Engine バックエンドに API をデプロイしたときに自動的に作成される DNS エントリと一致します。この例では、Endpoints サービス名と完全修飾ドメイン名(FQDN)は同じになります。
正常に完了すると、次のメッセージが表示されます。OpenAPI spec written to ./echov1openapi.json
Endpoints 構成をデプロイする
Endpoints 構成をデプロイするには、Service Infrastructure を使用します。これは Google の基礎的なサービス プラットフォームであり、Endpoints やその他のサービスで API やサービスの作成と管理に使用されています。
構成ファイルをデプロイするには:
- サンプルのメイン ディレクトリにいることを確認します。python-docs-samples/appengine/standard/endpoints-frameworks-v2/echo 
- 次のコマンドを実行して、前のセクションで生成した OpenAPI ドキュメントをデプロイします。gcloud endpoints services deploy echov1openapi.json これにより、Endpoints ツールを実行して、OpenAPI ドキュメントを生成したときに、 hostname引数で指定した名前で新しい Endpoints サービスが作成されます。Endpoints サービス名に関係なく、App Engine に API をデプロイすると、名前形式YOUR_PROJECT_ID.appspot.comを使用して、DNS レコードが作成されます。これは、API にリクエストを送信するときに使用する FQDN です。Service Management でサービスの作成と構成が行われるとき、多くの情報がデバイスに出力されます。 echov1openapi.json内のパスが API キーを要求していないことを示す警告は無視して問題ありません。デプロイが完了すると、次のようなメッセージが表示されます。Service Configuration [2017-02-13r2] uploaded for service [example-project-12345.appspot.com] 上の例では、 2017-02-13-r2がサービス構成 ID で、example-project-12345.appspot.comがサービス名です。gcloud参照ドキュメントのgcloud endpoints services deployをご覧ください。
必要なサービスを確認する
API 管理を行うために、Endpoints Frameworks には以下のサービスが必要となります。| 名前 | タイトル | 
|---|---|
| servicemanagement.googleapis.com | Service Management API | 
| servicecontrol.googleapis.com | Service Control API | 
ほとんどの場合、gcloud endpoints services deploy コマンドによってこれらの必須サービスが有効化されます。ただし、以下の状況では、gcloud コマンドは正常に完了しますが、必須サービスが有効になりません。
- Terraform などのサードパーティのアプリケーションを使用していて、上記のサービスを含めていない場合。 
- 上記のサービスが明示的に無効にされている既存のGoogle Cloud プロジェクトに Endpoints 構成をデプロイした場合。 
必要なサービスが有効になっていることを確認するには、次のコマンドを実行します。
gcloud services list
必要なサービスが表示されない場合は、次のコマンドを使用してサービスを有効にします。
gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.comEndpoints サービスも有効にします。
gcloud services enable ENDPOINTS_SERVICE_NAME
ENDPOINTS_SERVICE_NAME を確認するには、次のいずれかを行います。
- Endpoints 構成をデプロイ後、Cloud コンソールの [Endpoints] ページに移動します。[サービス名] 列に、考えられる ENDPOINTS_SERVICE_NAME のリストが表示されます。 
- OpenAPI の場合、ENDPOINTS_SERVICE_NAME は OpenAPI 仕様の - hostフィールドで指定したものです。gRPC の場合、ENDPOINTS_SERVICE_NAME は gRPC Endpoints 構成の- nameフィールドで指定したものです。
gcloud コマンドの詳細については、gcloud サービスをご覧ください。
サンプルのローカルでの実行
Endpoints 構成をデプロイしたら、ローカルの開発用サーバーを使用してサンプルをローカルで実行できます。
- サンプルのメイン ディレクトリにいることを確認します。 - python-docs-samples/appengine/standard/endpoints-frameworks-v2/echo
- ローカルの開発用サーバーを起動します。 - dev_appserver.py ./app.yaml- デフォルトで、開発用サーバーは、 - dev_appserver.pyによって出力された Google Cloud コンソールログに示されているとおりに、- http://localhost:8080でリッスンします。- INFO 2018-01-01 [...] Starting module "default" running at: http://localhost:8080
- ローカルの開発用サーバーにリクエストを送信します。 
Linux または Mac OS
curl \
    --request POST \
    --header "Content-Type: application/json" \
    --data '{"message":"hello world"}' \
    http://localhost:8080/_ah/api/echo/v1/echo
上記の curl で:
- --dataオプションは、API に送信するデータを指定します。
- --headerオプションは、データが JSON 形式であることを指定します。
PowerShell
(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' `
    -Headers @{"content-type"="application/json"} `
    -URI "http://localhost:8080/_ah/api/echo/v1/echo").Content
上記の例では、最初の 2 行はバッククォートで終わります。この例を PowerShell に貼り付けるとき、バッククォートの後にスペースがないことを確認してください。このリクエスト例で使用されているオプションについては、Microsoft のドキュメントの Invoke-WebRequest をご覧ください。
API によって送信メッセージがエコーバックされ、次のようなレスポンスが返されます。
{
 "message": "hello world"
}
API バックエンドをデプロイする
ここまでの手順で OpenAPI ドキュメントを Service Management にデプロイしましたが、API バックエンドを処理するコードはまだデプロイしていません。ここでは、サンプル API を App Engine にデプロイします。
API バックエンドをデプロイするには:
- 次のコマンドを実行してサービス構成 ID を表示します。
gcloud endpoints configs list --service=[YOUR_PROJECT_ID].appspot.com [YOUR_PROJECT_ID]は、次のように実際のプロジェクト ID に置き換えます。gcloud endpoints configs list --service=example-project-12345.appspot.com 
- Open the app.yamlfile in thepython-docs-samples/appengine/standard/endpoints-frameworks-v2/echodirectory.
- env_variablesセクションで次のように変更します。- ENDPOINTS_SERVICE_NAMEフィールドで、- YOUR-PROJECT-IDを実際の Google Cloud プロジェクト ID に置き換えます。
- ENDPOINTS_SERVICE_VERSIONフィールドで、テキストをサービス構成 ID に置き換えます。次に例を示します。
 - ENDPOINTS_SERVICE_NAME: example-project-12345.appspot.com ENDPOINTS_SERVICE_VERSION: 2017-02-13r2 
- 次のコマンドを実行します。gcloud app deploy 
- 画面上の指示に従います。デプロイが成功するまで数分待ちます。警告メッセージは無視します。デプロイが完了すると、次のようなメッセージが表示されます。File upload done. Updating service [default]...done. エラー メッセージが表示された場合は、App Engine のドキュメントのトラブルシューティング セクションを参照してください。 App Engine が完全に初期化される間、API にリクエストを送信するまで数分待つことをおすすめします。 
- --dataオプションは、API に送信するデータを指定します。
- --headerオプションは、データが JSON 形式であることを指定します。
- HTTP 動詞として POSTを選択します。
- ヘッダーで、キー content-typeとその値application/jsonを選択します。
- 本文で、次のように入力します。{"message":"hello world"}
- 
サンプル アプリケーションの URL を入力します。例:
 
 https://example-project-12345.appspot.com/_ah/api/echo/v1/echo
- Google Cloud コンソールの [エンドポイント] > [サービス] ページで、API のアクティビティ グラフを確認します。 - リクエストがグラフに反映されるまでにしばらく時間がかかることがあります。 
- [ログ エクスプローラ] ページで API のリクエストログを確認します。 
サンプル API にリクエストを送信する
Linux または Mac OS
curl を使用して HTTP リクエストを送信します。[YOUR_PROJECT_ID] は、実際のGoogle Cloud プロジェクト ID に置き換えます。
curl \
    --request POST \
    --header "Content-Type: application/json" \
    --data '{"message":"hello world"}' \
    https://[YOUR_PROJECT_ID].appspot.com/_ah/api/echo/v1/echo
上記の curl で:
PowerShell
Invoke-WebRequest を使用して HTTP リクエストを送信します。[YOUR_PROJECT_ID] は、実際の Google Cloud プロジェクト ID に置き換えます。
(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' `
    -Headers @{"content-type"="application/json"} -URI `
     "https://[YOUR_PROJECT_ID].appspot.com/_ah/api/echo/v1/echo").Content
上記の例では、最初の 2 行はバッククォートで終わります。この例を PowerShell に貼り付けるとき、バッククォートの後にスペースがないことを確認してください。このリクエスト例で使用されているオプションについては、Microsoft のドキュメントの Invoke-WebRequest をご覧ください。
サードパーティ製アプリ
Chrome ブラウザの拡張機能である Postman などのサードパーティのアプリケーションを使用してリクエストを送信できます。
API によって送信メッセージがエコーバックされ、次のようなレスポンスが返されます。
{
 "message": "hello world"
}
正常なレスポンスが返されなかった場合は、レスポンス エラーのトラブルシューティングをご覧ください。
API の活動を追跡する
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
次のステップ
- Endpoints Frameworks のアーキテクチャについて学習する。
- API の作成方法を学習する。
- API を提供するウェブサーバーの作成方法を学習する。
- 別のパスから API を提供する方法について学習する。
- API のモニタリングについて学習する。
- API キーを使用したアクセスの制限について学習する。
- カスタム ドメイン名の構成について学習する。
- API のバージョニングについて学習する。
- サポート オプションについて学習する。
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-10-22 UTC。