Go 用 Remote API

Go 用 App Engine SDK には remote_api パッケージが含まれています。これを使用することで、任意の Go アプリケーションから App Engine サービスに透過的にアクセスできます。たとえば、Remote API を使用して、ローカルマシンで実行されているアプリや、別の App Engine アプリのいずれかから Cloud Datastore にアクセスできます。

remote_api パッケージの内容については、remote_api パッケージ リファレンスをご覧ください。

Remote API の有効化

まず、remote_api url ハンドラを app.yaml に追加します。次に例を示します。

- url: /_ah/remote_api
  script: _go_app

これにより、URL /_ah/remote_api が Go アプリにマッピングされます。この URL へのアクセスは、Remote API ハンドラによって、アプリケーションの管理者に制限されます。

次に、任意の .go ソースファイルに以下の行を追加して、プロジェクトのいずれかのパッケージで remote_api パッケージをインポートします。

import _ "google.golang.org/appengine/remote_api"

プログラムの初期化中、remote_api パッケージは /_ah/remote_api パスのハンドラを登録します。import 宣言のアンダースコアは、「このパッケージをインポートするが、すぐに使用しない」ことを意味します。アンダースコアを付けないと、コンパイル時に「インポートされたが使用されていない」ことを示すエラー メッセージが表示されます。

最後に、App Engine にアップデートをデプロイします。次に例を示します。

gcloud app deploy app.yaml

ローカル クライアントでの Remote API の使用

Remote API を使用すると、App Engine サービスを使用してデータストアにアクセスするローカル アプリケーションを作成できます。Remote API を使用すると、アクセス対象のアプリケーションで割り当てを使用することになりますので、ご注意ください。

開始する前に、App Engine アプリケーションで Remote API が有効になっていることを確認してください。ローカル アプリケーションで Remote API を使用するには、remote_api.NewRemoteContext を使用してコンテキストを作成し、そのコンテキストをすべての API 呼び出しで通常の App Engine コンテキストの代わりに使用します。

// Copyright 2011 Google Inc. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.

package main

import (
	"log"
	"time"

	"golang.org/x/net/context"
	"golang.org/x/oauth2/google"

	"google.golang.org/appengine/datastore"
	"google.golang.org/appengine/remote_api"
)

func main() {
	const host = "<your-app-id>.appspot.com"

	ctx := context.Background()

	hc, err := google.DefaultClient(ctx,
		"https://www.googleapis.com/auth/appengine.apis",
		"https://www.googleapis.com/auth/userinfo.email",
		"https://www.googleapis.com/auth/cloud-platform",
	)
	if err != nil {
		log.Fatal(err)
	}

	remoteCtx, err := remote_api.NewRemoteContext(host, hc)
	if err != nil {
		log.Fatal(err)
	}

	q := datastore.NewQuery("Greeting").
		Filter("Date >=", time.Now().AddDate(0, 0, -7))

	log.Println(q.Count(remoteCtx))
}

このコードを実行するには、次のパッケージを取得する必要があります。

$ go get -u google.golang.org/appengine/...
$ go get -u golang.org/x/oauth2/...

サーバーのホスト名と http.Client は、NewRemoteContext の呼び出しで指定する必要があります。指定された http.Client は、各リクエストで必要な認証情報を渡す役割を果たします。

上記のサンプルでは、golang.org/x/oauth2/google パッケージの DefaultClient が、アプリケーションのデフォルト認証情報を介して OAuth 2 の認証情報を提供しています。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境