繁体   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