使用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
希望对大家有所帮助