1. 简介
借助 Visual Studio Code (VS Code) 和 Huachao Mao 的 Rest Client 扩展程序,您可以测试 Google OAuth 许可流程和 Google Health API。此 Codelab 将向您展示如何设置 Rest Client 扩展程序、如何启动授权流程以及如何首次调用某个 Google Health API 端点。之后,您可以阅读 Rest Client 文档和 Fitbit 文档,以在 HTTP 项目中构建其他端点。
如果您不想使用 VS Code 和 Rest Client,可以使用 curl 命令进行 API 调用。
学习内容
- 如何使用 REST 客户端扩展程序设置 VS Code。
- 如何在 Google Cloud 控制台中设置客户端 ID。
- 如何完成 Google OAuth 2.0 授权流程以获取访问令牌和刷新令牌。
- 如何使用 REST 客户端调用 Google Health API 端点。
所需条件
- Fitbit 移动应用
- Visual Studio Code
- 由 Huacho Mao 提供的 Rest Client 扩展程序。
如要设置 Fitbit 移动应用,请执行以下操作:
- 在 Apple App Store 或 Google Play 商店中搜索 Fitbit 移动应用,然后下载该应用。
- 选择应用图标。
- 点击使用 Google 账号登录
- 选择您的 Google 账号,然后按继续按钮。
如需安装 Visual Studio 工具,请执行以下操作:
- 下载 VS Code。下载内容通常包含可执行文件。
- 启动 VS Code。
- 安装 Huachao Mao 的 Rest Client 扩展程序。
- 点击 IDE 左侧的扩展程序图标
。 - 搜索 REST Client by Huachao Mao,然后按安装。
- 点击 IDE 左侧的扩展程序图标
2. 设置 Google Cloud 项目
您将使用 Google Cloud 控制台创建客户端 ID 并启用 Google Health API 的使用。
- 登录 Google Cloud 控制台。
- 如需创建新项目,请执行以下操作:
- 在项目选择器中点击选择项目。
- 在右上角,选择新建项目。
- 输入您的项目名称。
- 输入您的位置(例如,“无组织”)。
- 点击创建按钮。
- 选择您的项目。
启用 Google Health API
- 点击左上角的菜单图标:

- 选择 API 和服务 > 库。
- 搜索“Google Health API”,然后启用该 API。
设置 OAuth 凭据
如果您不在 Google Cloud 控制台中,请前往 Google Cloud 控制台。
- 点击左上角的菜单图标:

- 依次选择 API 和服务 > 凭据。
- 在顶部中心位置,依次选择 + 创建凭据 > OAuth 客户端 ID。
- 点击配置权限请求页面按钮。如果系统显示“尚未配置 Google Auth Platform”消息,请点击开始使用按钮。
- 在第 1 部分中:
- 输入应用名称。
- 输入用户支持电子邮件地址。
- 点击下一步按钮。
- 在第 2 部分中:
- 选择外部。
- 点击下一步按钮。
- 在第 3 部分中:
- 在联系信息字段中输入您的电子邮件地址。
- 点击下一步按钮。
- 在第 4 部分中:
- 点击复选框,表示您同意 Google 的 API 服务用户数据政策。
- 点击创建按钮。
- 在“指标”部分中,按创建 OAuth 客户端 按钮。
- 选择应用类型 Web 应用。
- 输入客户端 ID 名称。
- 将已获授权的 JavaScript 来源留空。
- 在已获授权的重定向 URI 下,按 + 添加 URI 按钮。输入“https://www.google.com”作为重定向 URI。
- 点击创建按钮。
- Google 控制台会显示一条消息,告知您已创建客户端 ID。点击下载 JSON 链接下载客户端 ID 和客户端密钥,或记下这些值。之后您将无法恢复客户的密钥。
- 点击确定。系统会返回到“OAuth 2.0 客户端 ID”页面。
- 您的客户端 ID 将添加到您的项目中。点击客户端 ID 网址即可查看详细信息。
添加测试用户
- 在左侧窗格中,选择受众群体。您应该会看到“发布状态”设置为测试,“用户类型”设置为外部。
- 在“测试用户”部分下,点击 + 添加用户按钮。输入您要检索其数据的任何用户的电子邮件地址。
- 点击保存按钮。
向客户端 ID 添加范围
- 在左侧窗格中,选择数据访问权限。
- 点击添加或移除范围按钮。
- 在“API”列中,搜索“Google Health API”。在此 Codelab 中,我们使用的是范围
.../auth/googlehealth.activity_and_fitness.readonly - 选择范围后,按更新按钮返回到“数据访问权限”页面。
- 点击保存按钮。
您已完成客户端 ID 的设置。
3. 创建授权流程
- 在您的机器上打开 VS Code 应用。
- 在欢迎界面上,选择打开。
- 选择要创建此项目的文件夹,然后按打开。您的屏幕应类似于以下内容,在探索器中显示您的文件夹或项目名称。

- 在主菜单中,依次选择文件 -> 新建文本文件。
- 保存文件并为其命名。在主菜单中,依次选择 File -> Save As -> Codelab.http。这应该会将文件放置在您的项目中。文件的扩展名必须为 .http 或 .rest。在此 Codelab 中,我们使用的是 .http。
在整个项目中,我们将多次使用多个值。这些值包括:
| Google 控制台中的客户端 ID 值。 |
| Google 控制台中的客户端密钥值。 |
| 应用中用于处理授权代码的端点。 在本 Codelab 中,我们使用的是 https://www.google.com |
| 在同意流程结束后为用户创建的访问令牌。 |
| 在意见征求流程结束后为用户创建的刷新令牌。 |
添加以下代码,用于定义此项目使用的变量。它们应位于 Codelab.http 文件的顶部。填写 client_id 和 secret 的值。
### File Variables for the Codelab
@client_id =
@secret =
@redirect_uri = https://www.google.com
@accessToken={{user.response.body.access_token}}
@refreshToken={{user.response.body.refresh_token}}
授权网址(用于启动意见征求流程)将发送给您要访问其数据的每位用户。为了构建授权网址,我们需要知道 Google OAuth 端点是什么,并使用查询参数来指定客户端 ID、我们想要访问的范围,以及当用户同意这些范围时要将用户重定向到哪里。如需查看有关构建 Google 授权字符串的完整文档,请参阅文档。
Google 的 OAuth 2.0 端点位于 https://accounts.google.com/o/oauth2/v2/auth。此端点只能通过 HTTPS 访问。拒绝纯 HTTP 连接。
Google 授权服务器支持许多查询字符串参数,供 Web 服务器应用自定义授权流程。我们将使用以下必需的查询参数:client_id、redirect_uri、response_type 和 scope。该文档提供了所有查询参数及其说明的列表。
查询参数的值为
| Google 控制台中的客户端 ID 值 |
| 应用中用于处理授权代码的端点。 对于此 Codelab,请使用 https://www.google.com |
|
|
| 范围来自 Google 控制台,语法为 https://www.googleapis.com,后跟范围名称。例如,https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly。 |
在变量之后,按所示方式写入授权网址。在项目顶部定义的参数无法在授权字符串中使用。因此,我们需要包含 client_id 和 redirect_uri 的值。将字符串 client-id 替换为您的客户端 ID。
### Google Health API Rest Client Example
### Authorization String
https://accounts.google.com/o/oauth2/v2/auth?client_id=client-id&redirect_uri=https://www.google.com&response_type=code&access_type=offline&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
用户授予同意权后,Google 会提供一个授权代码,您可以通过调用 Google 的令牌端点来交换该代码以获取访问令牌。在授权字符串下方的 Codelab.http 中添加以下用于调用令牌端点的定义。您将在下一步中将 authorization-code 替换为授权代码。
### AUTHORIZATION ENDPOINTS
######################################################################
# @name user
POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded
code=authorization-code&client_id={{client_id}}&client_secret={{secret}}&redirect_uri={{redirect_uri}}&grant_type=authorization_code
@name user 引用您正在访问其数据的当前用户。
4. 授权账号并获取令牌
现在,我们将逐步介绍授权流程,以获取授权令牌。
Codelab.http 中的授权字符串用于启动 Google 基于浏览器的同意流程。Rest Client 扩展程序可能会针对此网址显示发送请求链接。请勿针对此特定网址使用发送请求。您可以将其复制并粘贴到浏览器中,也可以在 VS Code 中使用 Ctrl+点击 (Windows/Linux) 或 Cmd+点击 (Mac) 在默认浏览器中打开该链接。
https://accounts.google.com/o/oauth2/v2/auth?client_id=client-id&redirect_uri=https://www.google.com&response_type=code&access_type=offline&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
- 系统会要求您登录 Google 账号。您必须使用在添加测试用户部分配置的某个测试用户账号登录。
- 系统可能会显示一条消息,指出该应用未经过验证。这是因为该应用尚未发布。按“继续”。

- 同意页面会列出正在请求的范围。用户可以选择要与此应用共享的任意范围。点击“继续”。
同意共享所请求的范围后,您会被重定向到您指定的 redirect_uri(在此 Codelab 中为 https://www.google.com)。Google 会将授权代码和其他参数附加到 redirect_uri,因此浏览器地址栏中的网址应如下所示:
https://www.google.com/?code=4/0Ab32j93oyGWqaXE112sP1IKmh3kV1fE4tcHIMXYJQYWgNEtAa_0-YsfkS9Ekj3Be89u3fw&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
授权代码是“code=”和“&scope”之间的字母数字值。在上述示例中,该值为:
4/0Ab32j93oyGWqaXE112sP1IKmh3kV1fE4tcHIMXYJQYWgNEtAa_0-YsfkS9Ekj3Be89u3fw
在正式版应用中,您的服务器会从网址参数中解析此信息。在此 Codelab 中,请从浏览器中的网址复制授权代码。
现在,将此授权代码兑换为 access_token 和 refresh_token。在 Codelab.http 中,将 POST /token 请求正文中的 authorization-code 替换为您复制的授权代码。
POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded
code=authorization-code&client_id={{client_id}}&client_secret={{secret}}&redirect_uri={{redirect_uri}}&grant_type=authorization_code
点击 POST https://oauth2.googleapis.com/token 这行文字上方的发送请求链接。
响应内容应如下所示:
{
"access_token": "ya29.a0ATi6K2uasci7FyyIClNLtQou6z...",
"expires_in": 3599,
"refresh_token": "1//05EuqYpEXjJCHCgYIA...",
"scope": "https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly",
"token_type": "Bearer",
"refresh_token_expires_in": 604799
}
当您收到此响应时,Rest Client 会自动填充 Codelab.http 顶部定义的 @accessToken 和 @refreshToken 变量,以供后续请求使用。
刷新令牌简介
当您兑换授权代码时,除了 access_token 之外,响应还可能包含 refresh_token。access_token的生命周期较短(通常为 1 小时)。当 access_token 过期时,您必须使用 refresh_token 获取新的 access_token,而无需用户再次登录或同意。之所以能这么做,是因为我们在授权请求中添加了 access_type=offline。
如果您在响应中未收到 refresh_token,可能是因为您已为此应用和范围授予同意声明。刷新令牌通常仅在用户首次向您的应用授予同意权限时,或者在授权网址中添加 prompt=consent 以强制显示权限请求页面(即使在后续授权中也是如此)时才会颁发。
refresh_token 的有效期较长,但如果 6 个月未使用、用户撤消了对您应用的访问权限,或出于其他原因,则可能会过期或失效。您应安全地存储 refresh_token 以备将来使用。
如需了解详情,请参阅刷新访问令牌(离线访问)。
5. 向 Fitbit 移动应用添加数据
对于 Fitbit 新用户,您的 Fitbit 账号中可能没有可查询的数据。我们将手动添加锻炼日志,然后通过某个端点查询该日志。如需手动记录锻炼,请按以下步骤操作:
- 在设备上打开 Fitbit 移动应用。根据需要登录 Fitbit 账号。
- 点按屏幕右下角的“+”按钮。
- 在“手动记录”部分中,点按活动
- 搜索锻炼类型步行,然后选择该类型。
- 输入今天的开始时间。
- 将时长更改为 15 分钟。
- 将距离保持为 1.0 英里。
- 点按添加。
- 长按屏幕并向下滑动,将移动应用与 Fitbit 服务器同步。松开手指后,您应该会看到移动应用开始同步。
- 在“活动”部分,您应该会看到手动记录的“步行”条目。

6. 使用 list 方法检索数据
如需调用 list 方法,请将以下代码添加到 Codelab.http 中,紧邻 /token 端点下方。
### users.dataTypes.dataPoints
#####################################################
### LIST exercise
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints
Authorization: Bearer {{accessToken}}
Accept: application/json
此代码会调用 list 端点,以显示用户在其 Fitbit 账号中记录的步数。响应中将返回每分钟的步数,与 Fitbit Web API v1 的“活动天内”端点类似。
如需执行调用,请按 GET 端点的发送请求链接。您的响应应如下所示:
{
"dataPoints": [
{
"name": "users/2515055256096816351/dataTypes/exercise/dataPoints/8896720705097069096",
"dataSource": {
"recordingMethod": "MANUAL",
"platform": "FITBIT"
},
"exercise": {
"interval": {
"startTime": "2026-02-23T13:10:00Z",
"startUtcOffset": "-18000s",
"endTime": "2026-02-23T13:25:00Z",
"endUtcOffset": "-18000s"
},
"exerciseType": "WALKING",
"metricsSummary": {
"caloriesKcal": 16,
"distanceMillimiters": 1609344,
"steps": "2038",
"averagePaceSecondsPerMeter": 0.55923407301360051,
"activeZoneMinutes": "0"
},
"exerciseMetadata": {},
"displayName": "Walk",
"activeDuration": "900s",
"exerciseEvents": [
{
"eventTime": "2026-02-23T13:10:00Z",
"eventUtcOffset": "-18000s",
"exerciseEventType": "START"
},
{
"eventTime": "2026-02-23T13:25:00Z",
"eventUtcOffset": "-18000s",
"exerciseEventType": "STOP"
}
],
"updateTime": "2026-02-24T01:19:22.450466Z"
}
},
{
"name": "users/2515055256096816351/dataTypes/exercise/dataPoints/5870930690409355408",
"dataSource": {
"recordingMethod": "MANUAL",
"platform": "FITBIT"
},
"exercise": {
"interval": {
"startTime": "2026-02-23T06:00:00Z",
"startUtcOffset": "-18000s",
"endTime": "2026-02-23T06:15:00Z",
"endUtcOffset": "-18000s"
},
"exerciseType": "WALKING",
"metricsSummary": {
"caloriesKcal": 17,
"distanceMillimiters": 1609344,
"steps": "2038",
"averagePaceSecondsPerMeter": 0.55923407301360051,
"averageHeartRateBeatsPerMinute": "81",
"activeZoneMinutes": "0",
"heartRateZoneDurations": {
"lightTime": "900s"
}
},
"exerciseMetadata": {},
"displayName": "Walk",
"activeDuration": "900s",
"exerciseEvents": [
{
"eventTime": "2026-02-23T06:00:00Z",
"eventUtcOffset": "-18000s",
"exerciseEventType": "START"
},
{
"eventTime": "2026-02-23T06:15:00Z",
"eventUtcOffset": "-18000s",
"exerciseEventType": "STOP"
}
],
"updateTime": "2026-02-23T08:29:39.480437Z"
}
}
],
"nextPageToken": ""
}
许多端点都支持用于过滤或分页的查询参数。例如,锻炼支持过滤条件 interval.civil_start_time。向 Codelab.http 添加以下请求,以列出特定时间范围内的锻炼项目:
### LIST exercise >= civil start time
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints?filter=exercise.interval.civil_start_time >= "2026-02-22T00:00:00"
Authorization: Bearer {{accessToken}}
Accept: application/json
7. 恭喜
恭喜!
您已完成此基础 Codelab,并成功学习了如何使用 Visual Studio Code 和 Rest Client 扩展程序来测试 OAuth 2.0 授权并调用 Google Health API 端点。在此处,您可以像在本部分开头使用 List 方法检索数据中所做的那样,添加其他端点。
希望您喜欢构建与 Google Health API 生态系统集成的应用。如需了解详情,请参阅参考文档,探索其他 Google 健康数据 API 端点,并详细了解如何针对网络服务器应用使用 Google OAuth 2.0。