这个问题只是确认我清楚这个概念。
据我了解, 谷歌云端点是一种谷歌的执行REST的服务,使他们不能保持在内存中的任何“会话”的数据,因此:
- 用户必须与每个请求发送的验证数据 。
- 所有我想在后面使用必须坚持 ,即与我收到的每个API请求中的数据,我要访问数据存储,做一些事情,再存储数据。
它是否正确? 如果是这样,这是在性能方面还算好?
这个问题只是确认我清楚这个概念。
据我了解, 谷歌云端点是一种谷歌的执行REST的服务,使他们不能保持在内存中的任何“会话”的数据,因此:
它是否正确? 如果是这样,这是在性能方面还算好?
数据存储是相当快的,特别是如果你做一个键查找(如并列查询)。 如果你使用NDB那么你将有自动的利益memache您的查找。
是的,你可以使用会话,只放另一Paramether在您的API方法与HttpServlet的:
@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提到的,如果你对夫妇与数据存储内存缓存和在上下文缓存(如NDB一样),可以使这些查找非常快。
要做到这一点在Python或Java中,无论是allowed_client_ids
或audiences
将需要在注释/装饰中指定的API和/或方法(一个或多个)。 请参阅文档获取更多信息。
如果你想在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令牌与请求发送到确定。