9

この質問は、私がこの概念について明確であることを確認するためだけのものです。

私の知る限り、Google Cloud EndpointsはGoogleによるRESTサービスの実装の一種であるため、「セッション」データをメモリに保持することはできません。したがって、次のようになります。

  • ユーザーは、リクエストごとに認証データを送信する必要があります。
  • 後で使用するすべてのデータを永続化する必要があります。つまり、受信するAPIリクエストごとに、データストアにアクセスし、何かを実行して、データを再度保存する必要があります。

これは正しいです?もしそうなら、これは実際にパフォーマンスの面で良いですか?

4

3 に答える 3

4

はい、セッションを使用できます。HttpServlet を使用して API メソッドに別のパラメーターを入れるだけです。

@ApiMethod
public MyResponse getResponse( HttpServletRequest req, @Named("infoId") String infoId ) {
    // Use 'req' as you would in a servlet, e.g.
    String ipAddress = req.getRemoteAddr();
    ...
}
于 2013-04-08T05:23:35.023 に答える
3

特にキー ルックアップを実行する場合 (クエリと同様)、データストアは非常に高速です。NDB を使用すると、自動 memache ルックアップの利点が得られます。

于 2013-03-20T12:03:44.593 に答える
2

はい、Cloud Endpoints API バックエンド コード (Java または Python) は引き続き App Engine で実行されているため、App Engine にある場合と同じようにすべてのリソースにアクセスできます。

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

Python または Java でこれを行うには、API および/またはメソッドの注釈/デコレータでallowed_client_idsまたはを指定する必要があります。audiences詳細については、ドキュメントを参照してください。

パイソン:

Python でユーザーを取得する場合は、

endpoints.get_current_user()

allowed_client_idsまたはで注釈が付けられたリクエスト内からaudiences。これが を返す場合None、有効なユーザーは存在しません (そして 401 を返す必要があります)。

ジャワ:

アノテーション付きメソッド (またはアノテーション付き API に含まれるメソッド) でユーザーを取得するには、リクエストでユーザー オブジェクトを指定するだけです。

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

...

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

Python の場合と同様に、有効な OAuth 2.0 トークンがリクエストと共に送信されたかどうかuserを確認します。null

于 2013-03-20T17:07:28.017 に答える