พัฒนาประสบการณ์ด้านโภชนาการและการดื่มน้ำด้วย 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

บันทึกโภชนาการ

บันทึกโภชนาการแสดงอาหารที่ผู้ใช้บันทึกไว้ คุณสร้างบันทึกโภชนาการได้ 2 วิธี โดยขึ้นอยู่กับประเภทอาหาร ดังนี้

  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 ให้อ้างอิงทรัพยากรอาหาร 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"
    }
  }
}

ลบบันทึกโภชนาการ

หากต้องการลบรายการบันทึกโภชนาการอย่างน้อย 1 รายการ ให้ส่งคำขอ 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

อาหาร

อาหารเป็นประเภทข้อมูลแบบอ่านอย่างเดียวที่แสดงรายการอาหารในฐานข้อมูลอาหาร ใช้การดำเนินการ 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
      }
    }
  }
}

ลบบันทึกการดื่มน้ำ

หากต้องการลบรายการบันทึกการดื่มน้ำอย่างน้อย 1 รายการ ให้ส่งคำขอ 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 แสดงระยะเวลาที่ดื่มน้ำ