Как создавать приложения для отслеживания питания и потребления воды с помощью Google Health API

Google Health API предоставляет типы данных для отслеживания питания и потребления воды. Эти типы позволяют регистрировать приемы пищи, ссылаться на продукты из базы данных, отслеживать количество питательных веществ и регистрировать потребление жидкости.

Поддерживаемые типы данных

Таблица. Типы данных о питании в Google Health API
Тип данных Доступные
операции
Область действия
Еда
dataType: food
filter parameter: food
Тип записи: еда.
list, get .nutrition.readonly
.nutrition.writeonly
Единица измерения количества еды
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Тип записи: еда.

Совместимые устройства

list, get .nutrition.readonly
.nutrition.writeonly
Журнал потребления жидкости
dataType: hydration-log
filter parameter: hydration_log
Тип записи: сеанс.
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Журнал питания
dataType: nutrition-log
filter parameter: 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. Записи о питании, созданные на основе анонимных продуктов, нельзя редактировать.

Создай дневник питания с анонимными продуктами

Чтобы создать запись в журнале питания, отправьте запрос POST к конечной точке nutrition-log dataPoints.

Запрос

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"
    }
  }
}

Удалить журналы питания

Чтобы удалить одну или несколько записей в журнале питания, отправьте запрос POST к методу batchDelete, указав названия ресурсов, которые нужно удалить.

Запрос:

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.

Еда

Food – это тип данных только для чтения, который представляет продукт питания в базе данных продуктов. Используйте операции list и get, чтобы просматривать доступные продукты и получать информацию об их питательной ценности.

Список продуктов

Чтобы получить список продуктов, отправьте запрос GET к конечной точке food dataPoints:

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

Журнал потребления жидкости

Тип данных "Журнал потребления жидкости" содержит информацию о количестве жидкости, выпитой пользователем. В отличие от записей о еде, которые ссылаются на базу данных продуктов и измеряют потребление питательных веществ или энергии, записи о потреблении воды отслеживают конкретный объем жидкости, выпитой за определенный интервал времени.

Создать журнал потребления жидкости

Чтобы создать запись в журнале потребления воды, отправьте запрос POST к конечной точке hydration-log dataPoints. Все объемы в формате 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"
      }
    }
  }
}

Как изменить запись в журнале потребления жидкости

Чтобы обновить запись в журнале потребления воды, отправьте запрос PATCH к конечной точке hydration-log dataPoints с идентификатором элемента данных.

Запрос

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
      }
    }
  }
}

Удалить журналы потребления жидкости

Чтобы удалить одну или несколько записей в журнале гидратации, отправьте запрос POST к методу batchDelete.

Запрос

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 преобразует и сохраняет все значения в миллилитрах. Необязательное поле userProvidedUnit в VolumeQuantity используется только для показа пользователю на стороне клиента.
  • Прямые HTTP-запросы DELETE к отдельным элементам данных hydration-log возвращают 404 Not Found. Чтобы удалить эти записи, используйте метод batchDelete.
  • В журналах потребления воды используется короткий интервал, где startTime и endTime представляют период времени, в течение которого была выпита жидкость.