试图停止谷歌目录API推送通知与客户端返回404



使用https://developers.google.com/admin-sdk/directory/v1/guides/push#creating-notification-channels的文档,我订阅了一个通知,如下所示:

service = build('admin', 'directory_v1', credentials=credentials)
watch_data = {
    'id': str(uuid.uuid1()),
    'type': 'web_hook',
    'address': 'https://example.appspot.com/push/user',
    'payload': True,
}
subscription = service.users().watch(domain=domain, event='update', body=watch_data).execute()
# 'subscription' is stored

我得到了一个适当的答复,到目前为止一切似乎都很好。

直到我尝试用以下代码停止通知:

# 'subscription' is retrieved from the storage
service = build('admin', 'directory_v1', credentials=credentials)
stop_data = {
    'id': subscription.id,
    'resourceId': subscription.resource_id
}
request = service.channels().stop(body=stop_data)
request.execute()

这会引发一个'HttpError' 404异常:

Response: <HttpError 404 when requesting https://www.googleapis.com/admin/directory/v1/admin/directory_v1/channels/stop? returned "Not Found">

有趣的是,使用相同的参数(来自同一用户的已知good 'id'和'resourceId'),位于https://developers.google.com/admin-sdk/directory/v1/reference/channels/stop的API资源管理器小工具以同样的方式失败。

我也无法在完整的API资源管理器中找到这个端点。

我认为这一发现有些不妥。

客户端构建的URI是:'https://www.googleapis.com/admin/directory/v1/admin/directory_v1/channels/stop'
然而文档中说它应该是:
"https://www.googleapis.com/admin/directory/v1/channels/stop"。

这可能是API中的错误吗?

我会尽快发出一个"手动"验证请求来验证这个假设。

编辑2016-11-09:

尝试使用以下代码进行手动请求:

# 'subscription' is retrieved from the storage
stop_data = {
    'id': subscription.id,
    'resourceId': subscription.resource_id
}
http = httplib2.Http()
http = credentials.authorize(http)
url = 'https://www.googleapis.com/admin/directory/v1/channels/stop'
method = 'POST'
response, content = http.request(url, method, body=json.dumps(stop_data),
                                 headers={'content-type': 'application/json'})

我仍然得到一个404作为结果。所以我猜问题不在于端点URI。

如果有人从谷歌看到这篇文章,你能看一下吗?

这不是超级关键,但我不希望有悬挂通知订阅。

编辑2 2016-11-09:

感谢@Mr。Rebot指出报告的API错误报告。仔细观察,这里的问题是完全一样的。使用上面的手动请求代码,但是用下划线调整URI,我终于能够发出一个成功的请求(返回204)。

url = 'https://www.googleapis.com/admin/directory_v1/channels/stop'

所以肯定有一个bug,下面的文档页面有错误的端点URI:

  • https://developers.google.com/admin-sdk/directory/v1/guides/push stopping-notifications
  • https://developers.google.com/admin-sdk/directory/v1/reference/channels/stop

还发现了这个相关的帖子:Google Admin SDK通道停止端点在客户端库中被破坏

给那些在过去两年里一直在Google Docs地狱里徘徊的人们。

错误/正确的URL是:

https://www.googleapis.com/admin/reports_v1/channels/stop

使用这个URL的作用域是:

https://www.googleapis.com/auth/admin.reports.audit.readonly

希望对大家有所帮助

相关内容

  • 没有找到相关文章

最新更新