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 luồng 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 đám mây của Google, lấy thông tin đăng nhập, 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 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 Fitbit:

  1. Trong Apple App Store hoặc Cửa hàng Google Play, hãy tìm ứng dụ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 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 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 Cloud.
  2. Cách tạo một dự án mới:
    1. Nhấp vào Chọn dự án trong công cụ chọn dự án.
    2. Ở góc trên cùng bên phải, hãy chọn Dự án mới.
    3. Nhập Tên dự án.
    4. Nhập Vị trí của bạn (ví dụ: "Không thuộc tổ chức nào").
    5. Nhấp vào nút 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 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 đăng nhập OAuth

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

  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 API và Dịch vụ > Thông tin xác thực.
  3. Ở trên cùng ở giữa, hãy chọn + Tạo thông tin xác thực > Mã ứng dụng khách OAuth.
  4. Nhấp vào nút Định cấu hình màn hình xin phép. Nếu bạn thấy thông báo "Google Auth Platform not configured yet" (Google Auth Platform chưa được định cấu hình), hãy nhấp vào nút Bắt đầu.
  5. Trong phần 1:
    1. Nhập Tên ứng dụng.
    2. Nhập Email hỗ trợ người dùng.
    3. Nhấp vào nút Tiếp theo.
  6. Trong phần 2:
    1. Chọn Bên ngoài.
    2. Nhấp vào nút Tiếp theo.
  7. Trong phần 3:
    1. Nhập địa chỉ email của bạn vào trường Thông tin liên hệ.
    2. Nhấp vào nút Tiếp theo.
  8. Trong phần 4:
    1. Nhấp vào hộp đánh dấu để đồng ý với Chính sách dữ liệu người dùng của các dịch vụ API của Google.
    2. Nhấp vào nút Tạo.
  9. Chuyển đến phần API và Dịch vụ > Thông tin xác thực rồi chọn + Tạo thông tin xác thực > Mã ứng dụng khách OAuth.
  10. Chọn loại ứng dụng Ứng dụng web.
  11. Nhập tên mã khách hàng.
  12. Để trống phần Nguồn gốc JavaScript được uỷ quyền.
  13. Trong mục URI chuyển hướng được uỷ quyền, hãy nhấp vào + 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 Tạo.
  15. Google Console 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 Tải JSON xuống để tải mã ứng dụng khách và khoá bí mật ứ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 "Mã ứng dụng OAuth 2.0".
  17. Mã ứng dụng của bạn sẽ được thêm vào dự án. Nhấp vào URL mã nhận dạng ứ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 Đối tượng. Bạn sẽ thấy "Trạng thái xuất bản" được đặt thành Thử nghiệm và "Loại người dùng" được đặt thành Bên ngoài.
  2. Trong phần "Người dùng kiểm thử", hãy nhấp vào nút + Thêm người dùng. Nhập địa chỉ email của người dùng mà bạn muốn truy xuất dữ liệu.
  3. Nhấp vào nút 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 Quyền truy cập vào dữ liệu.
  2. Nhấp vào nút 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 Cập nhật để quay lại trang Truy cập dữ liệu.
  5. Nhấp vào nút Lưu.

Bạn đã hoàn tất việc thiết lập mã ứng dụng khách.

3. Thêm dữ liệu vào ứng dụ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ý tập thể dục 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 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 màn hình, hãy nhấn vào nút +.
  3. Trong phần "Ghi nhật ký theo cách thủ công", hãy nhấn vào Hoạt động
  4. Tìm loại bài tập Đi bộ rồi chọn loại bài tập đó.
  5. Nhập thời gian bắt đầu cho hôm nay.
  6. Thay đổi thời lượng thành 15 phút.
  7. Để khoảng cách là 1,6 km.
  8. Nhấn vào Thêm.
  9. Đồng bộ hoá ứng dụng di động với máy chủ Fitbit bằng cách nhấn và giữ màn hình rồi trượt xuống. Khi thả ngón tay ra, bạn sẽ thấy ứng dụng di động đồng bộ hoá.
  10. Trong phần "Hoạt động", bạn sẽ thấy mục Đi bộ mà bạn đã 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

Truy cập vào 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 Cấu hình OAuth 2.0 ở trên cùng bên phải.
  2. Chọn Sử dụng thông tin đăng nhập OAuth của riêng bạn.
  3. Nhập Mã ứng dụng OAuthKhoá bí mật của ứng dụng 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 cho 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 cho 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 phiên bản 4 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 "Nhập phạm vi của riêng bạn".
  3. Nhấp vào Uỷ quyền cho 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 Google Cloud (nếu chưa đăng nhập).
  6. Xem xét các quyền được yêu cầu, rồi nhấp vào Tiếp tục để cấp quyền truy cập.

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

Bảng điều khiển Yêu cầu / Phản hồi ở bên phải 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à một lệnh 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 nhận được đượ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ố do authorization_code biểu thị trong khoảng từ code= đến &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 thực hiện các yêu cầu API.

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

  1. Nhấp vào nút Đổ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 một phản hồi tương tự như sau:

{
  "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 trao đổi mã uỷ quyền, phản hồi có thể bao gồm một refresh_token ngoài access_token. access_token có thời hạn 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. Điều này có thể xảy ra 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 sự đồng ý 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 đồng ý 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 hạn sử dụng lâu dài nhưng có thể hết hạn hoặc không hợp lệ nếu không được 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ì những 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.

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

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

  1. Đặt Phương thức HTTP thành GET.
  2. Đặt URI yêu cầu thành https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints.
  3. Nhấp vào 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 phạm vi thời gian cụ thể, hãy thay đổi URI yêu cầu để thêm một tham số bộ lọc:

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 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à tìm hiểu thành công cách sử dụng OAuth2 Playground để kiểm thử việc 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 thú khi xây dựng 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ề Google OAuth 2.0 cho Ứng dụng máy chủ web.