0

我们正在通过 REST 接口为我们的用户请求按细分聚合的活动数​​据。但是对于某些用户(不是全部),尽管共享相同的请求格式,但检索此数据失败并显示 400 Bad Request。

按段聚合的示例请求 JSON 是:

{
"aggregateBy": [
  {
    "dataTypeName": "com.google.activity.segment"
  },
  {
    "dataTypeName": "com.google.calories.expended"
  },
  {
    "dataTypeName": "com.google.step_count.delta"
  }
],
"bucketByActivitySegment": {
  "minDurationMillis": 60000
},
"startTimeMillis": 1627182120000,
"endTimeMillis": 1627268520000
}

对于所有记录了活动数据的用户,我们会收到带有数据点的成功响应,例如:

{
  "bucket": [
    {
      "startTimeMillis": "1627180684015",
      "endTimeMillis": "1627182139339",
      "dataset": [
        {
          "dataSourceId": "derived:com.google.activity.summary:com.google.android.gms:aggregated",
          "point": [
            {
              "startTimeNanos": "1627180684015000000",
              "endTimeNanos": "1627182139339000000",
              "dataTypeName": "com.google.activity.summary",
              "originDataSourceId": "derived:com.google.activity.segment:com.google.android.gms:merge_activity_segments",
              "value": [
                {
                  "intVal": 7,
                  "mapVal": []
                },
                {
                  "intVal": 1455324,
                  "mapVal": []
                },
                {
                  "intVal": 1,
                  "mapVal": []
                }
              ]
            }
          ]
        },
[...]

但是对于没有记录活动数据的用户,我们总是会收到 400 错误请求响应,例如:

{
    "error": {
        "code": 400,
        "message": "unknown datasource: derived:com.google.activity.segment:com.google.android.gms:merge_activity_segments",
        "errors": [
            {
                "message": "unknown datasource: derived:com.google.activity.segment:com.google.android.gms:merge_activity_segments",
                "domain": "global",
                "reason": "invalidArgument"
            }
        ],
        "status": "INVALID_ARGUMENT"
    }
}

我们通过按时间聚合活动数据确认没有记录的活动数据,例如请求

{
"aggregateBy": [
  {
    "dataTypeName": "com.google.activity.segment"
  }
],
"bucketByTime": {
  "durationMillis": 60000
},
"startTimeMillis": 1627182120000,
"endTimeMillis": 1627268520000
}

使用完全空的数据点导致成功响应,例如:

{
    "bucket": [
        {
            "startTimeMillis": "1627182120000",
            "endTimeMillis": "1627182180000",
            "dataset": [
                {
                    "dataSourceId": "derived:com.google.activity.summary:com.google.android.gms:aggregated",
                    "point": []
                }
            ]
        },
[...]
            "dataset": [
                {
                    "dataSourceId": "derived:com.google.activity.summary:com.google.android.gms:aggregated",
                    "point": []
                }
            ]
        }
    ]
}

我们的问题是:

  • 对于数据为空的用户,400 Bad Request 响应真的可以避免吗?
  • 或者这应该被认为是 Google Fit API 中的一个错误?在按段聚合空数据时,我们看不到有理由以 400 Bad Request 而不是空数据来响应。
4

1 回答 1

0

Google Fit 团队向我们确认,这种响应行为不会改变,因为用户可能已经依赖它。我们需要解决这个问题,例如单独处理这个错误响应,检查数据是否为空或类似的东西。

于 2021-09-20T06:28:54.827 回答