尝试使用客户端停止Google Directory API推送通知会返回404

时间:2016-11-03 00:46:34

标签: google-api google-admin-sdk google-api-python-client google-directory-api

使用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">

有趣的是,使用相同的参数(来自同一用户的已知良好'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'

因此肯定存在某个错误并且以下文档页面具有错误的端点URI:

还发现了这篇相关帖子:Google Admin SDK Channel Stop endpoint is broken in client libraries

1 个答案:

答案 0 :(得分:0)

对于那些在过去两年中谷歌Docs地狱中的奇迹而且数不胜数的人。

错误/正确的网址是:

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

使用此网址的范围是:

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

我希望这有助于某人:)