这个问题只是为了证实我对这个概念很清楚 .
据我所知, Google Cloud Endpoints 是Google对 REST 服务的一种实现,因此他们无法在内存中保留任何数据,因此:
用户必须在每次请求时发送 authentication data .
我想稍后在 must be persisted 上使用的所有数据,即对于我收到的每个API请求,我必须访问数据存储区,执行某些操作并再次存储数据 .
它是否正确?如果是这样,这在性能方面是否真的很好?
数据存储区非常快,特别是如果您进行密钥查找(与查询相关) . 如果您使用NDB,那么您将获得自动memache查找的好处 .
是的,你可以使用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(); ... }
是的,您的Cloud Endpoints API后端代码(Java或Python)仍在App Engine上运行,因此您可以访问App Engine上的所有资源 .
虽然您无法为会话设置客户端cookie,但您仍然可以获取请求的用户并在数据存储中存储特定于用户的数据 . 正如@Shay Erlichmen所提到的,如果您将数据存储与memcache和一个上下文缓存(如ndb)相结合,您可以非常快速地进行这些查找 .
要在Python或Java中执行此操作,需要在API和/或方法的注释/装饰器中指定 allowed_client_ids 或 audiences . 有关详细信息,请参阅docs .
allowed_client_ids
audiences
如果你想用Python获取用户,请致电
endpoints.get_current_user()
来自已使用 allowed_client_ids 或 audiences 注释的请求中 . 如果返回 None ,则表示没有有效用户(您应该返回401) .
None
要获取用户,请在带注释的方法(或带注释的API中包含的方法)上,在请求中指定用户对象:
import com.google.appengine.api.users.User; ... public Model insert(Model model, User user) throws OAuthRequestException, IOException {
和在Python中一样,检查 user 是否 null 以确定是否随请求一起发送了有效的OAuth 2.0令牌 .
user
null
3 回答
数据存储区非常快,特别是如果您进行密钥查找(与查询相关) . 如果您使用NDB,那么您将获得自动memache查找的好处 .
是的,你可以使用session,只在你的API方法中使用HttpServlet放入另一个Paramether:
是的,您的Cloud Endpoints 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
注释的请求中 . 如果返回None
,则表示没有有效用户(您应该返回401) .Java:
要获取用户,请在带注释的方法(或带注释的API中包含的方法)上,在请求中指定用户对象:
和在Python中一样,检查
user
是否null
以确定是否随请求一起发送了有效的OAuth 2.0令牌 .