[英]“Sessions” with Google Cloud Endpoints
這個問題只是為了證實我對這個概念很清楚。
據我所知, Google Cloud Endpoints是Google實施的REST服務,因此無法將任何“會話”數據保留在內存中,因此:
它是否正確? 如果是這樣,這在性能方面是否真的很好?
是的,你可以使用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_ids
或audiences
注釋的請求中。 如果返回None
,則沒有有效用戶(並且應該返回401)。
要獲取用戶,請在帶注釋的方法(或帶注釋的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.