如何在Google Cloud Endpoints中使用Google Python客户端?

时间:2015-03-23 08:32:07

标签: python google-app-engine google-cloud-endpoints google-api-python-client

我正在使用Google Cloud Endpoints制作REST API。

我的API提供Google日历活动等活动服务。

但我的事件模型具有与谷歌日历不同的其他属性。

所以我想将其他属性存储到我的数据存储区中。

其他人存储Google Calendar API。

顺便说一下,我不知道OAuth2如何使用Google API Python客户端进行身份验证。

decorator = OAuth2Decorator(
    client_id='',
    client_secret='',
    scope='https://www.googleapis.com/auth/calendar')

service = build('calendar', 'v3')

@space_api.api_class(resource_name='events')
class EventsApi(remote.Service):

  @endpoints.method(EVENT_RESOURCE, EventMessage,
                    path='events', http_method='POST',
                    name='events.insert')
  @decorator.oauth_required
  def events_insert(self, request):
    event = service.events().insert(calendarId='primary', body=encode_message(request)).execute(http=decorator.http())
    return decode_message(EventMessage, event)

我使用的是OAuth2Decorator,但remote.Service类没有重定向方法。

所以它会导致错误。

如何在Google Cloud Endpoints中使用Google API Python客户端。

请告诉我如何验证OAuth2。

欢迎任何评论,例如文档链接。

2 个答案:

答案 0 :(得分:0)

要创建API,其中该API的方法需要身份验证,请通过文档[1]。您想创建一个需要使用docs [2]进行身份验证的API。要在Google API Python客户端中使用OAuth,请查看文档[3]。

[1] https://cloud.google.com/appengine/docs/python/endpoints/getstarted/backend/auth

[2] https://cloud.google.com/appengine/docs/python/endpoints/auth

[3] https://cloud.google.com/appengine/docs/python/endpoints/access_from_python

答案 1 :(得分:0)

您需要将OAuth 2.0用于服务器到服务器应用程序。由于您使用的是Google云端点和App引擎,因此您可以使用AppAssertionCredentials对Google Calendar API进行授权API调用。以下是修改后的代码:

from oauth2client.appengine import AppAssertionCredentials

credentials = AppAssertionCredentials('https://www.googleapis.com/auth/calendar')
http_auth = credentials.authorize(Http())
calendar_service = build('calendar', 'v3', http=http_auth)

@space_api.api_class(resource_name='events')
class EventsApi(remote.Service):

  @endpoints.method(EVENT_RESOURCE, EventMessage,
                    path='events', http_method='POST',
                    name='events.insert')
  def events_insert(self, request):
    event = service.events().insert(calendarId='primary', body=encode_message(request)).execute(http_auth)
    return decode_message(EventMessage, event)

您可以在此处找到更多详细信息:

https://developers.google.com/api-client-library/python/auth/service-accounts#callinganapi