Thực hiện lệnh gọi API đầu tiên đến Google Health bằng OAuth2 Playground

1. Giới thiệu

OAuth 2.0 Playground là một công cụ dựa trên web giúp bạn kiểm thử các quy trình OAuth 2.0 của Google mà không cần viết mã. Lớp học lập trình này sẽ hướng dẫn bạn cách thiết lập dự án trên Google Cloud, lấy thông tin xác thực, bắt đầu quy trình uỷ quyền bằng OAuth 2.0 Playground và thực hiện lệnh gọi đầu tiên đến một trong các điểm cuối của Google Health API.

Kiến thức bạn sẽ học được

  • Cách thiết lập mã ứng dụng khách trong bảng điều khiển Google Cloud.
  • Cách thực hiện quy trình uỷ quyền OAuth 2.0 của Google để lấy mã truy cập và mã làm mới bằng OAuth 2.0 Playground.
  • Cách thực hiện lệnh gọi đến các điểm cuối của Google Health API bằng OAuth 2.0 Playground.

Bạn cần có

Cách thiết lập ứng dụng di động Fitbit:

  1. Trong Apple App Store hoặc Cửa hàng Google Play, hãy tìm ứng dụng di động Fitbit rồi tải xuống.
  2. Chọn biểu tượng ứng dụng.
  3. Nhấp vào Sign in with Google (Đăng nhập bằng Tài khoản Google).
  4. Chọn Tài khoản Google của bạn rồi nhấn vào nút Continue (Tiếp tục).

2. Thiết lập dự án trên Google Cloud

Bạn sẽ sử dụng bảng điều khiển Google Cloud để tạo mã ứng dụng khách và cho phép sử dụng Google Health API.

  1. Đăng nhập vào bảng điều khiển Google Cloud.
  2. Cách tạo dự án mới:
    1. Nhấp vào Select a project (Chọn một dự án) trong trình chọn dự án.
    2. Ở góc trên bên phải, hãy chọn New Project (Dự án mới).
    3. Nhập Project name (Tên dự án).
    4. Nhập Location (Vị trí) (ví dụ: "No organization" (Không có tổ chức)).
    5. Nhấp vào nút Create (Tạo).
    6. Chọn dự án của bạn.

Bật Google Health API

  1. Ở góc trên bên trái, hãy nhấp vào biểu tượng trình đơn:trình đơn
  2. Chọn APIs & Services > Library (API và Dịch vụ > Thư viện).
  3. Tìm "Google Health API" rồi bật API này.

Thiết lập thông tin xác thực OAuth

Nếu bạn không ở trong bảng điều khiển Google Cloud, hãy chuyển đến bảng điều khiển Google Cloud.

  1. Ở góc trên bên trái, hãy nhấp vào biểu tượng trình đơn:trình đơn
  2. Chọn APIs & Services > Credentials (API và Dịch vụ > Thông tin xác thực).
  3. Ở giữa trên cùng, hãy chọn + Create Credentials > OAuth client ID (+ Tạo thông tin xác thực > Mã ứng dụng khách OAuth).
  4. Nhấp vào nút Configure consent screen (Định cấu hình màn hình xin phép). Nếu thông báo "Google Auth Platform not configured yet" (Nền tảng xác thực của Google chưa được định cấu hình) xuất hiện, hãy nhấp vào nút Get Started (Bắt đầu).
  5. Trong phần 1:
    1. Nhập App name (Tên ứng dụng).
    2. Nhập User support email (Email hỗ trợ người dùng).
    3. Nhấp vào nút Next (Tiếp theo).
  6. Trong phần 2:
    1. Chọn External (Bên ngoài).
    2. Nhấp vào nút Next (Tiếp theo).
  7. Trong phần 3:
    1. Nhập địa chỉ email của bạn vào trường Contact Information (Thông tin liên hệ).
    2. Nhấp vào nút Next (Tiếp theo).
  8. Trong phần 4:
    1. Nhấp vào hộp kiểm để đồng ý với Chính sách về dữ liệu người dùng của Dịch vụ API của Google.
    2. Nhấp vào nút Create (Tạo).
  9. Chuyển đến APIs & Services > Credentials (API và Dịch vụ > Thông tin xác thực) rồi chọn + Create Credentials > OAuth client ID (+ Tạo thông tin xác thực > Mã ứng dụng khách OAuth).
  10. Chọn loại ứng dụng Web Application (Ứng dụng web).
  11. Nhập name (tên) mã ứng dụng khách.
  12. Để trống Authorized JavaScript origins (Nguồn gốc JavaScript được uỷ quyền).
  13. Trong phần Authorized redirect URIs (URI chuyển hướng được uỷ quyền), hãy nhấp vào + Add URI (\+ Thêm URI) rồi thêm các URI sau:
    • https://www.google.com
    • https://developers.google.com/oauthplayground
  14. Nhấp vào nút Create (Tạo).
  15. Bảng điều khiển Google sẽ hiển thị thông báo cho biết mã ứng dụng khách của bạn đã được tạo. Nhấp vào đường liên kết Download JSON (Tải JSON xuống) để tải mã ứng dụng khách và khoá bí mật của ứng dụng khách xuống hoặc ghi lại các giá trị. Sau đó, bạn sẽ không thể khôi phục khoá bí mật của ứng dụng khách.
  16. Nhấp vào OK. Bạn sẽ quay lại trang "OAuth 2.0 Client IDs" (Mã ứng dụng khách OAuth 2.0).
  17. Mã ứng dụng khách sẽ được thêm vào dự án của bạn. Nhấp vào URL mã ứng dụng khách để xem thông tin chi tiết.

Thêm người dùng thử nghiệm

  1. Trên ngăn bên trái, hãy chọn Audience (Đối tượng). Bạn sẽ thấy "Publishing status" (Trạng thái phát hành) được đặt thành Testing (Thử nghiệm) và "User type" (Loại người dùng) được đặt thành External (Bên ngoài).
  2. Trong phần "Test users" (Người dùng thử nghiệm), hãy nhấp vào nút + Add users (\+ Thêm người dùng). Nhập địa chỉ email của bất kỳ người dùng nào mà bạn muốn truy xuất dữ liệu.
  3. Nhấp vào nút Save (Lưu).

Thêm phạm vi vào mã ứng dụng khách

  1. Trên ngăn bên trái, hãy chọn Data Access (Quyền truy cập vào dữ liệu).
  2. Nhấp vào nút Add or remove scopes (Thêm hoặc xoá phạm vi).
  3. Trong cột API, hãy tìm "Google Health API". Trong lớp học lập trình này, chúng ta sẽ sử dụng phạm vi .../auth/googlehealth.activity_and_fitness.readonly
  4. Sau khi chọn phạm vi, hãy nhấn vào nút Update (Cập nhật) để quay lại trang Data Access (Quyền truy cập vào dữ liệu).
  5. Nhấp vào nút Save (Lưu).

Bạn đã thiết lập xong mã ứng dụng khách.

3. Thêm dữ liệu vào ứng dụng di động Fitbit

Đối với người dùng mới của Fitbit, bạn có thể không có dữ liệu trong tài khoản Fitbit để truy vấn. Chúng ta sẽ thêm nhật ký bài tập theo cách thủ công mà chúng ta có thể truy vấn thông qua một trong các điểm cuối. Để ghi lại bài tập theo cách thủ công, hãy làm theo các bước sau:

  1. Mở ứng dụng di động Fitbit trên thiết bị của bạn. Đăng nhập vào tài khoản Fitbit của bạn nếu cần.
  2. Ở góc dưới cùng bên phải của màn hình, hãy nhấn vào nút +.
  3. Trong phần "Manually log" (Ghi nhật ký theo cách thủ công), hãy nhấn vào Activity (Hoạt động)
  4. Tìm loại bài tập Walk (Đi bộ) rồi chọn loại bài tập đó.
  5. Nhập start time (thời gian bắt đầu) cho hôm nay.
  6. Thay đổi khoảng thời gian thành 15 minutes (15 phút).
  7. Để nguyên khoảng cách 1.0 mi (1 dặm).
  8. Nhấn vào Thêm.
  9. Đồng bộ hoá ứng dụng di động với các máy chủ Fitbit bằng cách nhấn và giữ trên màn hình rồi trượt xuống. Khi bạn thả ngón tay ra, bạn sẽ thấy ứng dụng di động đồng bộ hoá.
  10. Trong phần "Activity" (Hoạt động), bạn sẽ thấy mục Đi bộ được ghi nhật ký theo cách thủ công.Ảnh chụp màn hình cho thấy một hoạt động đi bộ.

4. Uỷ quyền trong OAuth 2.0 Playground

Chuyển đến OAuth 2.0 Playground.

Google Health API yêu cầu bạn sử dụng thông tin xác thực OAuth của riêng mình với Playground.

  1. Nhấp vào biểu tượng bánh răng OAuth 2.0 Configuration (Cấu hình OAuth 2.0) ở trên cùng bên phải.
  2. Chọn Use your own OAuth credentials (Sử dụng thông tin xác thực OAuth của riêng bạn).
  3. Nhập OAuth Client ID (Mã ứng dụng khách OAuth) và OAuth Client secret (Khoá bí mật của ứng dụng khách OAuth) mà bạn đã nhận được trong quá trình thiết lập dự án trên Google Cloud.

Giao diện Playground được chia thành 3 bước chính mà chúng ta sẽ làm theo:

  1. Chọn và uỷ quyền API
  2. Đổi mã uỷ quyền lấy mã thông báo
  3. Gửi yêu cầu đến API

Chọn và uỷ quyền API

Đây là nơi bạn chọn các phạm vi API mà bạn muốn yêu cầu.

  1. Trong Bước 1, hãy tìm Google Health API v4 trong danh sách API rồi mở rộng API này.
  2. Chọn https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly. Nếu phạm vi bạn cần không xuất hiện trong danh sách, bạn có thể nhập phạm vi đó theo cách thủ công vào trường "Input your own scopes" (Nhập phạm vi của riêng bạn).
  3. Nhấp vào Authorize APIs (Uỷ quyền API).
  4. Một yêu cầu sẽ được gửi đến điểm cuối uỷ quyền OAuth 2.0 của Google, các phạm vi đã chọn sẽ được đưa vào yêu cầu, sau đó bạn sẽ được chuyển hướng đến màn hình xin phép của Tài khoản Google.
  5. Đăng nhập bằng tài khoản người dùng thử nghiệm mà bạn đã định cấu hình trong phần Thiết lập dự án trên Google Cloud (nếu chưa đăng nhập).
  6. Xem lại các quyền được yêu cầu rồi nhấp vào Continue (Tiếp tục) để cấp quyền truy cập.

Khi bạn cấp quyền, Google sẽ chuyển hướng bạn quay lại Playground và cung cấp mã uỷ quyền cho công cụ này. Mã này sẽ được sử dụng trong bước tiếp theo.

Bảng điều khiển Request / Response (Yêu cầu/Phản hồi) ở bên phải sẽ hiển thị quy trình chuyển hướng HTTP hoàn chỉnh.

Phản hồi từ yêu cầu uỷ quyền ban đầu là hoạt động chuyển hướng 302 Found:

HTTP/1.1 302 Found
Location: https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&prompt=consent&response_type=code&client_id=your_client_id&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgooglehealth.activity_and_fitness.readonly&access_type=offline

Yêu cầu kết quả được chuyển hướng trở lại Playground chứa mã uỷ quyền:

GET /oauthplayground/?iss=https://accounts.google.com&code=authorization_code&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly HTTP/1.1
Host: developers.google.com

Mã uỷ quyền là giá trị chữ và số được biểu thị bằng authorization_code giữa code=&scope trong URL yêu cầu GET. Trong ví dụ này, giá trị tương tự như: 4/0AbPOj...

Đổi mã uỷ quyền lấy mã thông báo

Ở bước này, mã sẽ được đổi lấy mã thông báo cho phép bạn đưa ra các yêu cầu API.

Sau khi hoàn tất Chọn và uỷ quyền API, Playground sẽ tự động điền vào trường mã uỷ quyền. Cách đổi mã uỷ quyền lấy mã thông báo:

  1. Nhấp vào nút Exchange authorization code for tokens (Đổi mã uỷ quyền lấy mã thông báo) trong Bước 2.
  2. access_tokenrefresh_token sẽ xuất hiện trong bảng điều khiển Request/Response (Yêu cầu/Phản hồi) ở bên phải.

Bạn sẽ thấy phản hồi tương tự như:

{
  "access_token": "ya29.a0AFH6S....",
  "refresh_token_expires_in": 604799,
  "expires_in": 3599,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly",
  "refresh_token": "1/og..."
}

Giới thiệu về mã làm mới

Khi bạn đổi mã uỷ quyền, phản hồi có thể bao gồm refresh_token ngoài access_token. access_token có thời gian tồn tại ngắn (thường là 1 giờ). Khi access_token hết hạn, bạn phải sử dụng refresh_token để lấy access_token mới mà không yêu cầu người dùng đăng nhập hoặc đồng ý lại. Bạn có thể thực hiện việc này vì chúng tôi đã đưa access_type=offline vào yêu cầu uỷ quyền.

Nếu bạn không nhận được refresh_token trong phản hồi, thì có thể là do bạn đã cấp quyền cho ứng dụng và các phạm vi này. Mã làm mới thường chỉ được cấp trong lần đầu tiên người dùng cấp quyền cho ứng dụng của bạn hoặc khi prompt=consent được thêm vào URL uỷ quyền để buộc màn hình xin phép xuất hiện ngay cả trong các lần uỷ quyền tiếp theo.

refresh_token có thời gian tồn tại lâu nhưng có thể hết hạn hoặc không hợp lệ nếu không được sử dụng trong 6 tháng, nếu người dùng thu hồi quyền truy cập vào ứng dụng của bạn hoặc vì các lý do khác. Bạn nên lưu trữ refresh_token một cách an toàn để sử dụng sau này.

Giới thiệu về việc cập nhật phạm vi

Nếu sau này ứng dụng của bạn cần truy cập vào các phạm vi khác của Google Health API, thì bạn phải nhắc người dùng cấp lại quyền cho ứng dụng của bạn và yêu cầu toàn bộ phạm vi (cả phạm vi hiện có và phạm vi mới).

Cách cập nhật phạm vi trong yêu cầu uỷ quyền của ứng dụng:

  1. Xác định danh sách đầy đủ các Phạm vi mà ứng dụng của bạn cần.
  2. Sửa đổi tham số scope trong URL uỷ quyền để đưa danh sách các giá trị phạm vi được cập nhật (phân tách bằng dấu cách).
  3. Nối prompt=consent vào các tham số URI xác thực. Khi prompt=consent được đưa vào, màn hình xin phép sẽ xuất hiện mỗi khi ứng dụng của bạn yêu cầu uỷ quyền cho các phạm vi, nhắc người dùng phê duyệt danh sách đã cập nhật.

Sau khi người dùng hoàn tất việc xin phép, bạn sẽ nhận được một mã uỷ quyền mới có thể được đổi lấy mã thông báo bao gồm toàn bộ phạm vi.

5. Gửi yêu cầu đến API

Giờ đây, bạn có thể sử dụng mã truy cập để đưa ra các yêu cầu đến Google Health API. Trong Bước 3 trong Playground, hãy định cấu hình yêu cầu HTTP bằng cách chỉ định Request URI (URI yêu cầu), HTTP Method (Phương thức HTTP), tiêu đề và nội dung yêu cầu.

  1. Đặt HTTP Method (Phương thức HTTP) thành GET.
  2. Đặt Request URI (URI yêu cầu) thành https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints.
  3. Nhấp vào Send the request (Gửi yêu cầu).

Phản hồi sẽ có dạng như sau:

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

Nhiều điểm cuối hỗ trợ các tham số truy vấn để lọc hoặc phân trang. Ví dụ: để liệt kê các bài tập trong một khoảng thời gian cụ thể, hãy thay đổi URI yêu cầu để đưa tham số bộ lọc vào:

https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints?filter=exercise.interval.civil_start_time >= "2026-02-22T00:00:00"

Nhấp lại vào Send the request (Gửi yêu cầu) để xem kết quả đã lọc.

6. Xin chúc mừng

Xin chúc mừng!

Bạn đã hoàn thành lớp học lập trình cơ bản và học thành công cách sử dụng OAuth2 Playground để kiểm thử quy trình uỷ quyền OAuth 2.0 và thực hiện lệnh gọi đến các điểm cuối của Google Health API.

Chúng tôi hy vọng bạn sẽ thích tạo các ứng dụng tích hợp với hệ sinh thái Google Health API. Để biết thêm thông tin, hãy khám phá các điểm cuối khác của Google Health API trong tài liệu tham khảo và tìm hiểu thêm về OAuth 2.0 của Google cho Ứng dụng máy chủ web.