1. 簡介
您可以使用 Visual Studio Code (VS Code) 和 Huachao Mao 的 Rest Client 擴充功能,測試 Google OAuth 同意流程和 Google Health API。本程式碼研究室將說明如何設定 REST 用戶端擴充功能、啟動授權流程,以及首次呼叫其中一個 Google Health API 端點。之後,您可以閱讀 Rest Client 說明文件和 Fitbit 說明文件,在 HTTP 專案中建構其他端點。
如果您不想使用 VS Code 和 Rest Client,可以使用 curl 指令發出 API 呼叫。
課程內容
- 如何使用 Rest Client 擴充功能設定 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」,然後按下「Install」。
- 按一下 IDE 左側的擴充功能圖示
2. 設定 Google Cloud 專案
您將使用 Google Cloud 控制台建立用戶端 ID,並啟用 Google Health API。
- 登入 Google Cloud 控制台。
- 如要建立新專案,請按照下列步驟操作:
- 在專案挑選器中,按一下「選取專案」。
- 選取右上角的「新專案」。
- 輸入專案名稱。
- 輸入位置 (例如「無機構」)。
- 按一下 [建立] 按鈕。
- 選取專案。
啟用 Google Health API
- 按一下左上角的選單圖示:

- 依序選取「API 和服務」>「程式庫」。
- 搜尋「Google Health API」並啟用。
設定 OAuth 憑證
如果不在 Google Cloud 控制台中,請前往 Google Cloud 控制台。
- 按一下左上角的選單圖示:

- 依序選取「API 和服務」>「憑證」。
- 在畫面中央上方,依序選取「+ 建立憑證」>「OAuth 用戶端 ID」。
- 按一下「設定同意畫面」按鈕。如果畫面顯示「尚未設定 Google 驗證平台」訊息,請按一下「開始使用」按鈕。
- 第 1 節:
- 輸入應用程式名稱。
- 輸入「使用者支援電子郵件地址」。
- 按一下 [Next] 按鈕。
- 第 2 節:
- 選取「外部」。
- 按一下 [Next] 按鈕。
- 在第 3 節中:
- 在「聯絡資訊」欄位中輸入電子郵件地址。
- 按一下 [Next] 按鈕。
- 第 4 節:
- 勾選核取方塊,同意《Google API 服務:使用者資料政策》。
- 按一下 [建立] 按鈕。
- 在指標部分,按下「建立 OAuth 用戶端」按鈕。
- 選擇「網頁應用程式」應用程式類型。
- 輸入用戶端 ID 名稱。
- 將「已授權的 JavaScript 來源」留空。
- 在「已授權的重新導向 URI」下方,按下「+ 新增 URI」按鈕。輸入「https://www.google.com」做為重新導向 URI。
- 按一下 [建立] 按鈕。
- Google 控制台會顯示訊息,指出已建立用戶端 ID。按一下「Download JSON」(下載 JSON) 連結,即可下載用戶端 ID 和用戶端密鑰,或記下這些值。之後就無法復原用戶端密鑰。
- 按一下「確定」。系統會返回「OAuth 2.0 用戶端 ID」頁面。
- 系統會將用戶端 ID 新增至專案。按一下用戶端 ID 網址即可查看詳細資料。
新增測試使用者
- 選取左側窗格中的「目標對象」。您應該會看到「發布狀態」設為「測試」,而「使用者類型」設為「外部」。
- 在「測試使用者」部分下方,按一下「+ 新增使用者」按鈕。輸入要擷取資料的使用者電子郵件地址。
- 按一下 [儲存] 按鈕。
為用戶端 ID 新增範圍
- 選取左側窗格中的「資料存取權」。
- 按一下「新增或移除範圍」按鈕。
- 在「API」欄中搜尋「Google Health API」。在本程式碼研究室中,我們使用
.../auth/googlehealth.activity_and_fitness.readonly範圍 - 選取範圍後,按下「更新」按鈕返回「資料存取」頁面。
- 按一下 [儲存] 按鈕。
您已完成設定用戶端 ID。
3. 建立授權流程
- 在電腦上開啟 VS Code 應用程式。
- 在「Welcome」畫面上選取「Open」。
- 選取要建立這個專案的資料夾,然後按一下「開啟」。畫面應與下圖類似,顯示「Explorer」中的資料夾或專案名稱。

- 在主選單中,依序選擇「File」->「New Text file」。
- 儲存檔案並命名。在主選單中,依序選擇「File」->「Save As」->「Codelab.http」。這應該會將檔案放在專案中。檔案的副檔名必須是 .http 或 .rest。在本程式碼研究室中,我們使用的是 .http。
在這個專案中,我們會多次使用多個值。這些值包括:
| Google 控制台中的用戶端 ID 值。 |
| Google 控制台中的用戶端密鑰值。 |
| 應用程式中處理授權碼的端點。在本程式碼研究室中,我們使用的是 https://www.google.com |
| 同意聲明流程完成後,系統為使用者建立的存取權杖。 |
| 同意聲明流程完成後,系統會為使用者建立更新權杖。 |
新增下列程式碼,定義這個專案使用的變數。這些註解應位於 Codelab.http 檔案的頂端。填入 client_id 和密鑰的值。
### 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 授權伺服器支援多個查詢字串參數,供網路伺服器應用程式自訂授權流程。我們將使用下列必要查詢參數:client_id、redirect_uri、response_type 和 scope。文件中列出所有查詢參數及其說明。
查詢參數的值為
| Google 控制台的用戶端 ID 值 |
| 應用程式中處理授權碼的端點。在本程式碼研究室中,請使用 https://www.google.com |
|
|
| 這些範圍來自 Google 控制台,語法為 https://www.googleapis.com,後接範圍名稱。例如:https://www.googleapis.com/auth/googlehealth.activity_and_fitness。 |
在變數後方,按照畫面所示撰寫授權網址。專案頂端定義的參數無法用於授權字串。因此,我們需要加入 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={{clientId}}&client_secret={{secret}}&redirect_uri={{redirect_uri}}&grant_type=authorization_code
@name user 是指您目前存取資料的使用者。
4. 授權帳戶並取得權杖
現在我們將逐步說明授權流程,以取得授權權杖。
Codelab.http 中的授權字串用於啟動 Google 的瀏覽器式同意聲明流程。Rest Client 擴充功能可能會顯示這個網址的「傳送要求」連結。請勿針對這個特定網址使用「傳送要求」。請改為複製並貼到瀏覽器,或在 VS Code 中使用 Ctrl+Click (Windows/Linux) 或 Cmd+Click (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 (在本程式碼研究室中為 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
在正式版應用程式中,伺服器會從網址參數剖析這項資訊。在本程式碼研究室中,請從瀏覽器的網址複製授權碼。
現在,請將這個授權碼換成 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",
"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 第 1 版的 Activity Intraday 端點類似。
如要執行呼叫,請按一下 GET 端點的「Send Request」連結。回應內容大致如下:
{
"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. 恭喜
恭喜!
您已完成基本程式碼研究室,並成功學會如何使用 Visual Studio Code 和 Rest Client 擴充功能測試 OAuth 2.0 授權,以及呼叫 Google Health API 端點。您可以在這裡新增其他端點,就像本節開頭的使用 List 方法擷取資料一樣。
希望您能順利建構與 Google Health API 生態系統整合的應用程式。如要瞭解詳情,請參閱參考文件中的其他 Google Health API 端點,並進一步瞭解網路伺服器應用程式適用的 Google OAuth 2.0。