2013-03-20 13 views
9

この質問は、私がこの概念を明確にしていることを確認することのみです。彼らはそのため、メモリ内の任意の「セッション」データを保持することができないように、私の知る限り理解しGoogle Cloud Endpointsの「セッション」

Googleクラウドエンドポイントは、RESTサービスのGoogleの実装の一種である:

  • ユーザーそれぞれの要求に応じて、認証データを送信する必要があります。
  • で後で使用したいすべてのデータは、に保存する必要があります。つまり、受け取った各APIリクエストで、データストアにアクセスして何かを行い、データを再度保存する必要があります。

これは間違いありませんか?もしそうなら、これはパフォーマンス面で実際に良いですか?

答えて

3

データストアは、キールックアップ(照会のためにapposed)を実行するとかなり高速です。 NDBを使用すると、ルックアップを自動的にmemacheすることができます。

+0

おかげ@Shay!私の無知を許してはいけませんが、「キー参照」と言うと、クエリの代わりに直接 'getObjectById'を使うことを意味します。そしてNDBは何ですか? – MikO

+0

あなたのJavaの男、NDBはPython用です。 –

+0

はい:キーの参照はgetObjectByIdを使用しています –

2

はい、クラウドエンドポイントAPIのバックエンドコード(JavaまたはPython)はApp Engine上で実行されているため、App Engine上にあるすべてのリソースに同じアクセス権があります。

クライアント側のCookieをセッションに設定することはできませんが、依然としてユーザーが要求を取得し、ユーザー固有のデータをデータストアに保存できます。 @Shay Erlichmenが述べたように、データストアをmemcacheとコンテキスト内キャッシュ(ndbのように)と結合すると、これらのルックアップを非常に迅速に行うことができます。

PythonまたはJavaのどちらでもこれを行うには、APIの注釈/デコレータまたはメソッドで、allowed_client_idsまたはaudiencesのいずれかを指定する必要があります。詳細については、docsを参照してください。

のPython:

あなたはPythonでユーザーを取得したい場合は、allowed_client_idsまたはaudiencesで注釈を付けてきたリクエストの中から

endpoints.get_current_user() 

を呼び出します。これがNoneを返した場合、有効なユーザーは存在しません(また、401を返す必要があります)。

ジャワ:

単にリクエストにユーザーオブジェクトを指定し、(注釈付きのAPIに含ままたはメソッド)の注釈付きメソッドにユーザーを取得する:

import com.google.appengine.api.users.User; 

... 

    public Model insert(Model model, User user) throws 
     OAuthRequestException, IOException { 

とPythonのように、 usernullであるかどうかをチェックして、有効なOAuth 2.0トークンがリクエストとともに送信されたかどうかを判断します。

4

はいあなただけのHttpServletであなたのAPIメソッドで別のParametherを入れて、セッションを使用することができます。

@ApiMethod 
public MyResponse getResponse(HttpServletRequest req, @Named("infoId") String infoId) { 
    // Use 'req' as you would in a servlet, e.g. 
    String ipAddress = req.getRemoteAddr(); 
    ... 
} 
+0

私はこの質問から得ます:[リンク](http://stackoverflow.com/questions/15056830/getting-raw-http-data-headers-cookies-etc-in-google-cloud-endpoints) –

+4

それは本当に面白いですしかし、それは正しくありません...あなたがHttpRequestパラメータを渡すことができるという事実は、あなたがセッションを使うことを意味するわけではありません...あなたの回答をコピーしたリンクで説明したように、これはリクエスト情報しかしエンドポイントは要求を(サーブレットのように)転送しませんが、オブジェクトMyResponseを返すので、セッションは失われます。 – MikO

+0

このリンクを見てください https://cloud.google.com/appengine/docs/java/config/appconfig を開き、「セッションを有効にする」を検索してください。これで、サーバーはMaxInactiveIntervalが-1のセッションを持ちます。これはセッションがタイムアウトしないことを示します。 – user3081007

関連する問題