使用 Google Health API 开发营养和饮水体验

Google Health API 提供了用于跟踪用户营养和饮水量的数据类型。这些类型可让您记录饮食、引用食物数据库中的食物、跟踪营养素数量以及记录液体摄入量。

支持的数据类型

表:Google Health API 营养数据类型
数据类型 可用的
操作
范围
食品
dataType: food
过滤条件参数: food
记录类型: 饮食
list、get .nutrition.readonly
.nutrition.writeonly
食物计量单位
dataType: food-measurement-unit
过滤条件参数: food_measurement_unit
记录类型: 饮食

兼容的设备

list、get .nutrition.readonly
.nutrition.writeonly
饮水量记录
dataType: hydration-log
过滤条件参数: hydration_log
记录类型: 练习
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete .nutrition.readonly
.nutrition.writeonly
营养记录
dataType: nutrition-log
过滤条件参数: nutrition_log
记录类型: 练习

兼容的设备

list、get、reconcile、rollup、dailyRollup、create、update、batchDelete .nutrition.readonly
.nutrition.writeonly

营养记录

营养日志表示用户记录的食物。创建营养日志的方式有两种,具体取决于食物类型:

  1. 已识别的食物:将 food 字段设置为引用现有的 Food 资源。nutrients、energy、energyFromFat、totalCarbohydrate、totalFat 和 foodDisplayName 字段会根据所引用的食物自动填充。这是首选方法。

  2. 匿名食物:手动设置 foodDisplayName 字段,并为 nutrients、energy、energyFromFat、totalCarbohydrate 和 totalFat 提供值。从匿名食物创建的营养日志在创建后无法修改。

创建包含匿名食物的营养日志

如需创建饮食记录条目,请向 nutrition-log dataPoints 端点发送 POST 请求。

请求

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T18:00:00Z",
      "endTime": "2026-06-16T18:30:00Z"
    },
    "foodDisplayName": "Grilled Chicken Breast",
    "mealType": "DINNER",
    "energy": {
      "kcal": 165
    },
    "totalCarbohydrate": {
      "grams": 0
    },
    "totalFat": {
      "grams": 3.6
    },
    "nutrients": [
      {
        "nutrient": "PROTEIN",
        "quantity": {
          "grams": 31
        }
      },
      {
        "nutrient": "SODIUM",
        "quantity": {
          "grams": 0.074
        }
      }
    ],
    "serving": {
      "amount": 1.0
    }
  }
}

响应

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/nutrition-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T18:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T18:30:00Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 18
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 18,
            "minutes": 30
          }
        }
      },
      "energy": {
        "kcal": 165
      },
      "totalCarbohydrate": {
        "grams": 0
      },
      "totalFat": {
        "grams": 3.6
      },
      "nutrients": [
        {
          "quantity": {
            "grams": 31
          },
          "nutrient": "PROTEIN"
        },
        {
          "quantity": {
            "grams": 0.074
          },
          "nutrient": "SODIUM"
        }
      ],
      "mealType": "DINNER",
      "serving": {
        "amount": 1
      },
      "foodDisplayName": "Grilled Chicken Breast"
    }
  }
}

创建包含已识别食物的营养日志

如需记录食物数据库中的食物,请将 food 字段设置为引用 Food 资源。该 API 会自动填充营养成分字段。

请求

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T12:00:00Z",
      "endTime": "2026-06-16T12:30:00Z"
    },
    "food": "users/me/dataTypes/food/dataPoints/food-id",
    "mealType": "LUNCH",
    "serving": {
      "amount": 1.0,
      "foodMeasurementUnit": "users/me/dataTypes/food-measurement-unit/dataPoints/food-measurement-unit-id"
    }
  }
}

响应

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/nutrition-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T12:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T12:30:00Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 12
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 12,
            "minutes": 30
          }
        }
      },
      "energy": {
        "kcal": 95
      },
      "energyFromFat": {
        "kcal": 3
      },
      "totalCarbohydrate": {
        "grams": 25
      },
      "totalFat": {
        "grams": 0.3
      },
      "nutrients": [
        {
          "quantity": {
            "grams": 4.4,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "DIETARY_FIBER"
        },
        {
          "quantity": {
            "grams": 19,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "SUGAR"
        },
        {
          "quantity": {
            "grams": 0.5,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "PROTEIN"
        }
      ],
      "mealType": "LUNCH",
      "serving": {
        "amount": 1,
        "foodMeasurementUnit": "users/me/dataTypes/food-measurement-unit/dataPoints/food-measurement-unit-id"
      },
      "food": "users/user-id/dataTypes/food/dataPoints/food-id",
      "foodDisplayName": "Apple"
    }
  }
}

删除营养记录

如需删除一个或多个营养日志条目,请向 batchDelete 方法发送 POST 请求,并在请求中提供要移除的条目的资源名称。

请求:

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints:batchDelete
Authorization: Bearer access-token
Content-Type: application/json

{
  "names": [
    "users/me/dataTypes/nutrition-log/dataPoints/data-point-id"
  ]
}

营养记录字段

如需查看字段和说明的完整列表,请参阅 NutritionLog。

能量

表示能量测量值,以千卡 (kcal) 为单位。如需了解详情,请参阅 EnergyQuantity。

{
  "kcal": 165
}

重量

表示体重测量值,以克为单位。如需了解详情,请参阅 WeightQuantity。

{
  "grams": 27.3
}

营养素数量

表示特定营养素及其测量量。如需了解详情,请参阅 NutrientQuantity。

{
  "nutrient": "PROTEIN",
  "quantity": {
    "grams": 31
  }
}

营养素值

如需查看受支持营养素类型的完整列表,请参阅 Nutrient。

服务

表示饮食日志条目的份量信息。如需了解详情,请参阅 Serving。

{
  "amount": 1.5
}

餐点类型值

如需查看受支持餐点类型的完整列表,请参阅 MealType。

美食

“食物”是一种只读数据类型,表示食物数据库中的食物。 使用 list 和 get 操作浏览可用食物并检索其营养信息。

列出食物

如需列出食物,请向 food dataPoints 端点发送 GET 请求:

GET https://health.googleapis.com/v4/users/me/dataTypes/food/dataPoints
Authorization: Bearer access-token
Accept: application/json

食物计量单位

食物计量单位是一种只读数据类型,表示用于食物份量的计量单位(例如“杯”“汤匙”或“块”)。

列出可用的测量单位

如需列出可用的测量单位,请执行以下操作:

GET https://health.googleapis.com/v4/users/me/dataTypes/food-measurement-unit/dataPoints
Authorization: Bearer access-token
Accept: application/json

饮水量记录

饮水量记录表示用户记录的液体摄入量。与食物(引用食物数据库并测量营养素或能量摄入量)不同,饮水量条目会跟踪在给定时间间隔内消耗的特定液体量。

创建饮水量记录

如需创建饮水日志条目,请向 hydration-log dataPoints 端点发送 POST 请求。所有体积量都会转换为 API 格式的毫升。

请求

POST https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "hydrationLog": {
    "interval": {
      "startTime": "2026-06-16T14:00:00Z",
      "endTime": "2026-06-16T14:00:01Z"
    },
    "amountConsumed": {
      "milliliters": 500,
      "userProvidedUnit": "FLUID_OUNCE_US"
    }
  }
}

响应

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "hydrationLog": {
      "interval": {
        "startTime": "2026-06-16T14:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T14:00:01Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 14
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 14,
            "seconds": 1
          }
        }
      },
      "amountConsumed": {
        "milliliters": 500,
        "userProvidedUnit": "FLUID_OUNCE_US"
      }
    }
  }
}

更新饮水量记录

如需更新饮水日志条目,请向 hydration-log dataPoints 端点发送 PATCH 请求,并附上数据点的 ID。

请求

PATCH https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints/data-point-id
Authorization: Bearer access-token
Content-Type: application/json

{
  "hydrationLog": {
    "interval": {
      "startTime": "2026-06-16T10:00:00Z",
      "endTime": "2026-06-16T10:00:01Z"
    },
    "amountConsumed": {
      "milliliters": 500
    }
  }
}

响应

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "hydrationLog": {
      "interval": {
        "startTime": "2026-06-16T10:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T10:00:01Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 10
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 10,
            "seconds": 1
          }
        }
      },
      "amountConsumed": {
        "milliliters": 500
      }
    }
  }
}

删除饮水量记录

如需删除一个或多个饮水日志条目,请向 batchDelete 方法发送 POST 请求。

请求

POST https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints:batchDelete
Authorization: Bearer access-token
Content-Type: application/json

{
  "names": [
    "users/me/dataTypes/hydration-log/dataPoints/data-point-id"
  ]
}

响应

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.BatchDeleteDataPointsResponse",
    "dataPoints": [
      {
        "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
        "dataSource": {
          "recordingMethod": "UNKNOWN",
          "application": {
            "googleWebClientId": "google-web-client-id"
          },
          "platform": "GOOGLE_WEB_API"
        },
        "hydrationLog": {
          "interval": {
            "startTime": "2026-06-16T14:00:00Z",
            "startUtcOffset": "0s",
            "endTime": "2026-06-16T14:00:01Z",
            "endUtcOffset": "0s",
            "civilStartTime": {
              "date": {
                "year": 2026,
                "month": 6,
                "day": 16
              },
              "time": {
                "hours": 14
              }
            },
            "civilEndTime": {
              "date": {
                "year": 2026,
                "month": 6,
                "day": 16
              },
              "time": {
                "hours": 14,
                "seconds": 1
              }
            }
          },
          "amountConsumed": {
            "milliliters": 500,
            "userProvidedUnit": "FLUID_OUNCE_US"
          }
        }
      }
    ]
  }
}

饮水量记录字段

如需查看字段和说明的完整列表,请参阅 HydrationLog。

卷数量

表示体积测量值,以毫升为单位。如需了解详情,请参阅 VolumeQuantity。

{
  "milliliters": 250,
  "userProvidedUnit": "MILLILITER"
}

体积单位值

如需查看受支持的体积单位的完整列表,请参阅 VolumeUnit。常见值包括 MILLILITER、LITER、CUP_US 和 FLUID_OUNCE_US。

指南

  • 尽可能使用识别出的食物。该 API 会自动填充营养字段,从而减少错误并确保与食物数据库保持一致。
  • 从匿名食物创建的饮食记录在创建后无法更新。 如果您需要更正匿名饮食记录,请将其删除并创建新记录。
  • 与匿名食物营养日志不同,饮水日志条目是完全可变的,可以在创建后使用 PATCH 请求进行更新。
  • nutrients 数组中的所有营养素数量均以克为计量单位。
  • energy 和 energyFromFat 字段使用千卡 (kcal) 作为测量单位。
  • 该 API 会将所有补水量转换为毫升并存储。VolumeQuantity 中的可选 userProvidedUnit 字段仅用于面向客户端的面向用户显示。
  • 直接向各个 hydration-log 数据点发出的 HTTP DELETE 请求会返回 404 Not Found。使用 batchDelete 方法移除这些资源条目。
  • 饮水日志使用较短的时间间隔,其中 startTime 和 endTime 表示饮用液体的时间段。