Thực hiện lệnh gọi Google Health API đầu tiên

1. Giới thiệu

Visual Studio Code (VS Code) và tiện ích Rest Client của Huachao Mao có thể cho phép bạn kiểm thử quy trình đồng ý OAuth của Google và Google Health API. Lớp học lập trình này sẽ hướng dẫn bạn cách thiết lập tiện ích Rest Client, cách bắt đầu quy trình uỷ quyền 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. Sau đó, bạn có thể đọc tài liệu về Rest Client và tài liệu về Fitbit để tạo các điểm cuối khác trong dự án HTTP của mình.

Nếu bạn không muốn dùng VS Code và Rest Client, thì có thể thực hiện các lệnh gọi API bằng lệnh curl.

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

  • Cách thiết lập VS Code bằng tiện ích Rest client.
  • 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.
  • Cách thực hiện lệnh gọi đến các điểm cuối của Google Health API bằng ứng dụng Rest.

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 Đăng nhập bằng 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.

Cách cài đặt các công cụ Visual Studio:

  1. Tải VS Code xuống. Thông thường, nội dung tải xuống sẽ chứa tệp thực thi.
  2. Khởi động VS Code.
  3. Cài đặt tiện ích Rest Client của Huachao Mao.
    • Nhấp vào biểu tượng tiện ích Kiểm tra an toàn ở bên trái của IDE.
    • Tìm REST Client by Huachao Mao (REST Client của Huachao Mao) rồi nhấn vào Install (Cài đặt).

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 Cloud.
  2. Cách tạo một dự án mới:
    1. Nhấp vào Chọn một 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 > Ứng dụng 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. Trong phần chỉ số, hãy nhấn vào nút Tạo ứng dụng OAuth.
  10. Chọn loại ứng dụng Ứng dụng web.
  11. Nhập tên mã ứng dụng khách.
  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ấn vào nút + Thêm URI. Nhập "https://www.google.com" làm URI chuyển hướng.
  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 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 "Mã ứng dụng OAuth 2.0".
  17. Mã ứng dụng khách của bạn sẽ được thêm vào dự á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 Đố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. Tạo quy trình uỷ quyền

  1. Mở ứng dụng VS Code trên máy tính của bạn.
  2. Trên màn hình Chào mừng, hãy chọn Mở.
  3. Chọn một thư mục để tạo dự án này rồi nhấn vào Mở. Màn hình của bạn sẽ có dạng tương tự như thế này, cho thấy tên thư mục hoặc dự án của bạn trong Trình khám phá.VSC
  4. Trên trình đơn chính, hãy chọn File -> New Text file (Tệp -> Tệp văn bản mới).
  5. Lưu tệp để đặt tên cho tệp. Trong trình đơn chính, hãy chọn File (Tệp) -> Save As (Lưu dưới dạng) -> Codelab.http. Thao tác này sẽ đặt tệp vào dự án của bạn. Tệp phải có đuôi là .http hoặc .rest. Trong lớp học lập trình này, chúng ta sẽ sử dụng .http.

Trong suốt dự án này, chúng ta sẽ sử dụng nhiều giá trị nhiều lần. Các giá trị đó là:

client_id

Giá trị mã ứng dụng khách trong bảng điều khiển của Google.

secret

Giá trị bí mật của ứng dụng từ bảng điều khiển Google.

redirect_uri

Một điểm cuối trong ứng dụng của bạn sẽ xử lý mã uỷ quyền. Trong lớp học lập trình này, chúng ta sẽ sử dụng https://www.google.com

access_token

Mã truy cập được tạo cho người dùng sau khi quy trình đồng ý hoàn tất.

refresh_token

Mã làm mới được tạo cho người dùng sau khi quy trình đồng ý hoàn tất.

Thêm đoạn mã sau đây để xác định các biến được dùng trong dự án này. Chúng phải nằm ở đầu tệp Codelab.http. Điền các giá trị cho client_id và 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}}

URL uỷ quyền (được dùng để bắt đầu quy trình đồng ý) sẽ được gửi đến từng người dùng mà bạn muốn truy cập dữ liệu. Để tạo URL uỷ quyền, chúng ta cần biết điểm cuối OAuth của Google và sử dụng các tham số truy vấn để chỉ định mã ứng dụng khách, các phạm vi mà chúng ta muốn truy cập và nơi chuyển hướng người dùng khi họ đồng ý với các phạm vi. Bạn có thể xem toàn bộ tài liệu về cách tạo chuỗi uỷ quyền của Google trong tài liệu.

Điểm cuối OAuth 2.0 của Google là https://accounts.google.com/o/oauth2/v2/auth. Bạn chỉ có thể truy cập vào điểm cuối này qua HTTPS. Các kết nối HTTP thông thường sẽ bị từ chối.

Máy chủ uỷ quyền của Google hỗ trợ nhiều tham số chuỗi truy vấn để các ứng dụng máy chủ web tuỳ chỉnh quy trình uỷ quyền. Chúng ta sẽ sử dụng các tham số truy vấn bắt buộc sau: client_id, redirect_uri, response_typescope. Tài liệu này cung cấp danh sách tất cả các tham số truy vấn và nội dung mô tả của chúng.

Giá trị của các tham số truy vấn là

client_id

Giá trị mã ứng dụng khách trong bảng điều khiển của Google

redirect_uri

Một điểm cuối trong ứng dụng của bạn sẽ xử lý mã uỷ quyền. Đối với lớp học lập trình này, hãy sử dụng https://www.google.com

response_type

code (giá trị được hỗ trợ cho ứng dụng web)

scope

Các phạm vi này đến từ bảng điều khiển của Google với cú pháp https://www.googleapis.com, theo sau là tên phạm vi. Ví dụ: https://www.googleapis.com/auth/googlehealth.activity_and_fitness.

Để yêu cầu nhiều phạm vi, hãy thêm tất cả các phạm vi vào tham số phạm vi, phân tách bằng dấu cách (ví dụ: scope1 scope2 scope3). Khi là một phần của URL, dấu cách phải được mã hoá URL (ví dụ: %20).

Sau các biến, hãy viết URL uỷ quyền của chúng ta như hình minh hoạ. Không thể dùng các thông số được xác định ở đầu dự án trong chuỗi uỷ quyền. Do đó, chúng ta cần thêm các giá trị cho client_idredirect_uri. Thay thế chuỗi client-id bằng mã ứng dụng khách của bạn.

### 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

Khi người dùng đồng ý, Google sẽ cung cấp một mã uỷ quyền mà bạn sẽ trao đổi để lấy mã truy cập bằng cách gọi điểm cuối mã thông báo của Google. Thêm định nghĩa sau để gọi điểm cuối mã thông báo đến Codelab.http bên dưới chuỗi uỷ quyền. Bạn sẽ thay thế authorization-code bằng mã uỷ quyền trong bước tiếp theo.

### 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 tham chiếu đến người dùng hiện tại mà bạn đang truy cập vào dữ liệu của họ.

4. Uỷ quyền cho một tài khoản và lấy mã thông báo

Bây giờ, chúng ta sẽ xem xét quy trình uỷ quyền để lấy mã thông báo uỷ quyền.

Chuỗi uỷ quyền trong Codelab.http được dùng để bắt đầu quy trình yêu cầu đồng ý dựa trên trình duyệt của Google. Tiện ích Rest Client có thể hiển thị đường liên kết Send Request (Gửi yêu cầu) cho URL này. Không sử dụng nút Gửi yêu cầu cho URL cụ thể này. Thay vào đó, hãy sao chép và dán đường liên kết vào trình duyệt hoặc dùng tổ hợp phím Ctrl+Click (Windows/Linux) hoặc Cmd+Click (Mac) trong VS Code để mở đường liên kết đó trong trình duyệt mặc định.

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
  1. Bạn sẽ được yêu cầu đăng nhập vào Tài khoản Google của mình. Bạn phải đăng nhập bằng một trong các tài khoản người dùng thử nghiệm mà bạn đã định cấu hình trong phần Thêm người dùng thử nghiệm.
  2. Bạn có thể thấy một thông báo cho biết ứng dụng chưa được xác minh. Điều này là do ứng dụng chưa được xuất bản. Nhấn vào "Tiếp tục".

Ảnh chụp màn hình cho thấy cảnh báo về ứng dụng chưa được xác minh.

  1. Trang đồng ý liệt kê các phạm vi đang được yêu cầu. Người dùng có thể chọn bất kỳ phạm vi nào mà họ muốn chia sẻ với ứng dụng này. Nhấp vào "Tiếp tục".

Sau khi đồng ý chia sẻ các phạm vi được yêu cầu, bạn sẽ được chuyển hướng đến redirect_uri mà bạn đã chỉ định (trong lớp học lập trình này, đó là https://www.google.com). Google sẽ thêm mã uỷ quyền và các tham số khác vào redirect_uri, vì vậy, URL trong thanh địa chỉ của trình duyệt sẽ có dạng như sau:

https://www.google.com/?code=4/0Ab32j93oyGWqaXE112sP1IKmh3kV1fE4tcHIMXYJQYWgNEtAa_0-YsfkS9Ekj3Be89u3fw&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly

Mã uỷ quyền là giá trị chữ và số nằm giữa "code=" và "&scope". Trong ví dụ trên, giá trị là:

4/0Ab32j93oyGWqaXE112sP1IKmh3kV1fE4tcHIMXYJQYWgNEtAa_0-YsfkS9Ekj3Be89u3fw

Trong một ứng dụng phát hành công khai, máy chủ của bạn sẽ phân tích cú pháp thông tin này từ các tham số URL. Đối với lớp học lập trình này, hãy sao chép mã uỷ quyền từ URL trong trình duyệt.

Bây giờ, hãy trao đổi mã uỷ quyền này để lấy access_tokenrefresh_token. Trong Codelab.http, hãy thay thế authorization-code trong nội dung yêu cầu POST /token bằng mã uỷ quyền mà bạn đã sao chép.

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

Nhấp vào đường liên kết Gửi yêu cầu ngay phía trên dòng POST https://oauth2.googleapis.com/token.

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

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

Khi bạn nhận được phản hồi này, Rest Client sẽ tự động điền các biến @accessToken@refreshToken được xác định ở đầu Codelab.http để sử dụng trong các yêu cầu tiếp theo.

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 đã thêm 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 đã đồ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 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ì 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.

Để biết thêm thông tin chi tiết, hãy xem phần Làm mới mã truy cập (quyền truy cập ngoại tuyến).

5. 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ý 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 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, 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ộ.

6. Truy xuất dữ liệu bằng phương thức danh sách

Để gọi phương thức list, hãy thêm mã sau vào Codelab.http, ngay bên dưới điểm cuối /token.

### users.dataTypes.dataPoints
#####################################################

### LIST exercise
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints
Authorization: Bearer {{accessToken}}
Accept: application/json

Mã này gọi điểm cuối list để hiển thị các bước mà người dùng đã ghi lại trong tài khoản Fitbit của họ. Số bước cho mỗi phút sẽ được trả về trong phản hồi, tương tự như điểm cuối Activity Intraday của Fitbit Web API phiên bản 1.

Để thực thi lệnh gọi, hãy nhấn vào đường liên kết Send Request (Gửi yêu cầu) cho điểm cuối GET. Phản hồi của bạn 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ụ: bài tập hỗ trợ bộ lọc interval.civil_start_time. Thêm yêu cầu sau vào Codelab.http để liệt kê các bài tập trong một khoảng thời gian cụ thể:

### 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. 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 được cách sử dụng Visual Studio Code và tiện ích Rest Client để kiểm thử hoạt động 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. Từ đây, bạn có thể thêm các điểm cuối khác giống như cách bạn đã làm ở đầu phần Truy xuất dữ liệu bằng phương thức Danh sách.

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.