簡體   English   中英

使用Google Cloud Endpoints的“會話”

[英]“Sessions” with Google Cloud Endpoints

這個問題只是為了證實我對這個概念很清楚。

據我所知, Google Cloud Endpoints是Google實施的REST服務,因此無法將任何“會話”數據保留在內存中,因此:

  • 用戶必須隨每個請求發送身份驗證數據
  • 我以后想要使用的所有數據都必須保持不變 ,即,對於我收到的每個API請求,我必須訪問數據存儲區,執行某些操作並再次存儲數據。

它是否正確? 如果是這樣,這在性能方面是否真的很好?

是的,你可以使用session,只在你的API方法中使用HttpServlet放入另一個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();
    ...
}

數據存儲區非常快,特別是如果您進行密鑰查找(與查詢相關)。 如果您使用NDB,那么您將獲得自動memache查找的好處。

是的,您的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_idsaudiences注釋的請求中。 如果返回None ,則沒有有效用戶(並且應該返回401)。

Java的:

要獲取用戶,請在帶注釋的方法(或帶注釋的API中包含的方法)上,在請求中指定用戶對象:

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

...

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

和在Python中一樣,檢查user是否為null以確定是否隨請求一起發送了有效的OAuth 2.0令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM