我有一个应用程序,可以从管理和报告API获取几十个Google用户的Google Analytics元数据和统计信息。
一切都很好(很长一段时间),但是昨天晚上21点左右UTC其中一个(用户)开始收到此错误:500,后端错误或有时是InternalError
他的管理API要求:
得到所有账户回复是200与360项目
得到所有WebProperties响应是200与170项目
获取所有个人资料的回复是200个,包含1000个项目
得到所有目标响应是500错误[应该是1000项,但现在错误]
现在仍然出现此错误(超过24小时)。
顺便说一句,此客户端的Reporting API也能正常工作(对于他的一个视图/配置文件)
我研究的内容:
我试图不是为所有目标请求目标,而是针对一个特定帐户>具体属性>具体的配置文件,api响应是200 OK!在这种情况下!
所有配置文件的早期请求目标在很长一段时间内都运行良好!但不是今天。
答案 0 :(得分:3)
500和503错误基本上是服务器负载错误。正在处理您的请求的服务器花了很长时间来处理您的请求,因此超时。您需要记住,您不是唯一访问服务器的人。它可能很容易成为另一个开发人员正在运行的东西,这会减慢您的请求并导致错误。
您应该实施exponential backoff,然后再次尝试请求。
最重要的提示:如果您与正在运行cron作业的所有人竞争,那么就不会运行。同样在美国午夜运行的时候,每个人的配额重置也不是打到服务器的好时机。
<强>更新强>
该小组建议您在问题跟踪器here上发布问题。管理API团队可以查看它。从Google Developer Console添加您的帐户信息。我会添加有问题的个人资料。将问题链接回这里,我会将其发送给他们。
如果您正在运行以下请求,我认为您应该停止这并不意味着返回大量数据。
analytics.Management.Goals.List("~all", "~all", "~all");
答案 1 :(得分:0)
所以,在预感中,我找到了一个似乎有效的解决方案。 这会失败(非常简化):
var goalsList = analytics.Management.Goals.List("~all", "~all", "~all");
var goalsResult = goalsList.Execute();
所有这一切都让我想起了我在平台上遇到的一些问题。所以我试着限制我的目标请求。第一个是accountId,所以我获得了所有帐户,然后循环使用它们为每个帐户拉出一组目标。
这似乎有效。
...
var accountIds = GetAccountIds(analytics);
foreach (var a in accountIds)
{
do
{
var goalsList = analytics.Management.Goals.List(a, "~all", "~all");
...
答案 2 :(得分:0)
谷歌团队在他们身边解决了这个问题!谢谢!