Выполните свой первый вызов API Google Health.

1. Введение

Visual Studio Code (VS Code) и расширение Rest Client от Хуачао Мао позволяют тестировать процесс авторизации Google OAuth и API Google Health. В этом практическом занятии мы покажем, как настроить расширение Rest Client, как инициировать процесс авторизации и выполнить первый вызов к одной из конечных точек API Google Health. После этого вы сможете ознакомиться с документацией Rest Client и документацией Fitbit, чтобы создать другие конечные точки в вашем HTTP-проекте.

Если вы не хотите использовать VS Code и REST-клиент, вызовы API можно выполнять с помощью команд curl .

Что вы узнаете

  • Как настроить VS Code с расширением REST-клиента.
  • Как настроить идентификатор клиента в консоли Google Cloud.
  • Как пройти процедуру авторизации Google OAuth 2.0 для получения токена доступа и токена обновления.
  • Как выполнять вызовы к конечным точкам API Google Health с помощью REST-клиента.

Что вам понадобится

Чтобы настроить мобильное приложение Fitbit:

  1. Найдите мобильное приложение Fitbit в Apple App Store или Google Play Store и скачайте его.
  2. Выберите значок приложения.
  3. Нажмите «Войти через Google».
  4. Выберите свой аккаунт Google и нажмите кнопку «Продолжить» .

Для установки инструментов Visual Studio:

  1. Скачайте VS Code. Обычно в загруженном архиве находится исполняемый файл.
  2. Запустите VS Code.
  3. Установите расширение Rest Client от Хуачао Мао.
    • Нажмите на значок расширения. расширение в левой части IDE.
    • Найдите REST Client от Huachao Mao и нажмите «Установить» .

2. Настройка проекта Google Cloud

Для создания идентификатора клиента и включения использования API Google Health вам потребуется использовать консоль Google Cloud.

  1. Войдите в консоль Google Cloud .
  2. Для создания нового проекта:
    1. Нажмите «Выбрать проект» в окне выбора проектов.
    2. В правом верхнем углу выберите «Новый проект» .
    3. Введите название вашего проекта .
    4. Укажите ваше местоположение (например, "Нет организации").
    5. Нажмите кнопку «Создать» .
    6. Выберите свой проект.

Включите API Google Health.

  1. В верхнем левом углу нажмите на значок меню:меню
  2. Выберите API и сервисы > Библиотека .
  3. Найдите "Google Health API" и включите его.

Настройте свои учетные данные OAuth.

Если вы не вошли в консоль Google Cloud, перейдите в консоль Google Cloud .

  1. В верхнем левом углу нажмите на значок меню:меню
  2. Выберите API и сервисы > Учетные данные .
  3. В верхней центральной части выберите + Создать учетные данные > Идентификатор клиента OAuth .
  4. Нажмите кнопку «Настроить экран согласия» . Если появится сообщение «Платформа аутентификации Google еще не настроена», нажмите кнопку «Начать» .
  5. В разделе 1:
    1. Введите название приложения .
    2. Введите адрес электронной почты службы поддержки пользователей .
    3. Нажмите кнопку «Далее» .
  6. В разделе 2:
    1. Выберите «Внешний» .
    2. Нажмите кнопку «Далее» .
  7. В разделе 3:
    1. Введите свой адрес электронной почты в поле «Контактная информация» .
    2. Нажмите кнопку «Далее» .
  8. В разделе 4:
    1. Установите флажок, чтобы согласиться с Политикой Google в отношении пользовательских данных в рамках API-сервисов .
    2. Нажмите кнопку «Создать» .
  9. В разделе метрик нажмите кнопку «Создать OAuth-клиент» .
  10. Выберите тип приложения: Веб-приложение .
  11. Введите имя идентификатора клиента.
  12. Оставьте поле «Авторизованные источники JavaScript» пустым.
  13. В разделе «Авторизованные URI перенаправления» нажмите кнопку «+ Добавить URI» . Введите «https://www.google.com» в качестве URI перенаправления.
  14. Нажмите кнопку «Создать» .
  15. В консоли Google отобразится сообщение о создании идентификатора клиента. Вы можете либо нажать на ссылку «Скачать JSON» , чтобы загрузить идентификатор клиента и секретный ключ клиента, либо записать эти значения. После этого восстановить секретный ключ клиента будет невозможно.
  16. Нажмите ОК . Вы вернетесь на страницу «Идентификаторы клиентов OAuth 2.0».
  17. Ваш идентификатор клиента будет добавлен к вашему проекту. Щелкните URL-адрес идентификатора клиента, чтобы просмотреть подробности.

Добавить тестовых пользователей

  1. В левой панели выберите «Аудитория» . Вы должны увидеть, что в поле «Статус публикации» установлено значение «Тестирование », а в поле «Тип пользователя» — «Внешний ».
  2. В разделе «Тестовые пользователи» нажмите кнопку «+ Добавить пользователей» . Введите адрес электронной почты каждого пользователя, данные которого вы хотите получить.
  3. Нажмите кнопку «Сохранить» .

Добавьте области действия к идентификатору клиента.

  1. В левой панели выберите «Доступ к данным» .
  2. Нажмите кнопку «Добавить или удалить области действия» .
  3. В столбце API найдите "Google Health API". Для этого практического задания мы используем область действия .../auth/googlehealth.activity_and_fitness.readonly
  4. После выбора области действия нажмите кнопку «Обновить» , чтобы вернуться на страницу доступа к данным.
  5. Нажмите кнопку «Сохранить» .

Вы завершили настройку своего идентификатора клиента.

3. Создайте поток авторизации.

  1. Откройте приложение VS Code на своем компьютере.
  2. На экране приветствия выберите «Открыть» .
  3. Выберите папку для создания проекта и нажмите «Открыть» . На экране должно отобразиться примерно следующее: название вашей папки или проекта будет отображаться в проводнике.ВСК
  4. В главном меню выберите Файл -> Создать текстовый файл .
  5. Сохраните файл, чтобы дать ему имя. В главном меню выберите Файл -> Сохранить как -> Codelab.http . Это поместит файл в ваш проект. Расширение файла должно быть либо .http, либо .rest. В этом примере мы используем .http.

В ходе этого проекта мы будем многократно использовать несколько значений. Эти значения следующие:

client_id

Значение идентификатора клиента из консоли Google.

secret

Секретная ценность клиента из консоли Google.

redirect_uri

Конечная точка в вашем приложении, которая обрабатывает код авторизации. Для практического занятия мы используем https://www.google.com

access_token

Токен доступа, создаваемый для пользователя после завершения процесса получения согласия.

refresh_token

Токен обновления, создаваемый для пользователя после завершения процесса получения согласия.

Добавьте следующий код, определяющий переменные, используемые в этом проекте. Он должен располагаться в верхней части файла 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}}

URL-адрес авторизации, используемый для запуска процесса получения согласия, будет отправлен каждому пользователю, к данным которого вы хотите получить доступ. Для создания URL-адреса авторизации нам необходимо знать конечную точку Google OAuth и использовать параметры запроса для указания идентификатора клиента, областей доступа и места перенаправления пользователя после получения согласия на использование этих областей. Полную документацию по созданию строки авторизации Google можно найти в документации .

Конечная точка OAuth 2.0 от Google находится по адресу https://accounts.google.com/o/oauth2/v2/auth . Доступ к этой конечной точке возможен только по протоколу HTTPS. Простые HTTP-соединения отклоняются.

Сервер авторизации Google поддерживает множество параметров строки запроса для веб-приложений, позволяющих настраивать процесс авторизации. Мы будем использовать следующие обязательные параметры запроса: client_id , redirect_uri , response_type и scope . В документации приведен список всех параметров запроса и их описание.

Значения параметров запроса следующие:

client_id

Значение идентификатора клиента из консоли Google.

redirect_uri

Конечная точка в вашем приложении, которая обрабатывает код авторизации. Для выполнения практического задания используйте https://www.google.com

response_type

code (поддерживаемое значение для веб-приложений)

scope

Ссылки на области действия (scopes) берутся из консоли Google с использованием синтаксиса https://www.googleapis.com , за которым следует имя области действия. Например, https://www.googleapis.com/auth/googlehealth.activity_and_fitness.

Для запроса нескольких областей видимости укажите все области видимости в параметре scope, разделяя их пробелами (например, scope1 scope2 scope3 ). Если пробелы являются частью URL-адреса, они должны быть закодированы в формате URL (например, %20).

После переменных укажите URL-адрес авторизации, как показано. Параметры, определенные в верхней части проекта, нельзя использовать в строке авторизации. Поэтому необходимо включить значения для client_id и redirect_uri . Замените строку client-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 может отображать ссылку «Отправить запрос» для этого URL-адреса. Не используйте «Отправить запрос» для этого конкретного URL-адреса. Вместо этого скопируйте и вставьте его в свой браузер или используйте Ctrl+Click (Windows/Linux) или Cmd+Click (Mac) в VS Code, чтобы открыть его в браузере по умолчанию.

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. Вам будет предложено войти в свою учетную запись Google. Необходимо войти, используя одну из тестовых учетных записей пользователей, которые вы настроили в разделе «Добавить тестовых пользователей» .
  2. Возможно, вам будет показано сообщение о том, что приложение не проверено. Это связано с тем, что приложение еще не опубликовано. Нажмите «Продолжить».

Скриншот, демонстрирующий предупреждение о непроверенном приложении.

  1. На странице согласия отображается список запрашиваемых областей действия. Пользователь может выбрать те области, которыми он хочет поделиться с этим приложением. Нажмите «Продолжить».

После подтверждения согласия на предоставление запрошенных прав доступа, вы будете перенаправлены на указанный вами redirect_uri (в этом примере — https://www.google.com). Google добавляет к redirect_uri код авторизации и другие параметры, поэтому URL-адрес в адресной строке вашего браузера должен выглядеть примерно так:

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

В рабочем приложении ваш сервер будет анализировать это из параметров URL. Для этого практического задания скопируйте код авторизации из URL в вашем браузере.

Теперь замените этот код авторизации на access_token и refresh_token . В Codelab.http замените authorization-code в теле POST-запроса /token на скопированный вами код авторизации.

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 автоматически заполнит переменные @accessToken и @refreshToken , определенные в начале Codelab.http для использования в последующих запросах.

О токенах обновления

При обмене кодом авторизации ответ может включать в себя не только access_token но и refresh_token . access_token имеет короткий срок действия (обычно 1 час). Когда access_token истекает, необходимо использовать refresh_token для получения нового access_token без необходимости повторного входа пользователя в систему или подтверждения согласия. Это возможно, поскольку мы включили access_type=offline в наш запрос авторизации.

Если в ответе не отображается refresh_token , это может быть связано с тем, что вы уже предоставили согласие для этого приложения и областей действия. Refresh token обычно выдаются только при первом предоставлении пользователем согласия для вашего приложения или при добавлении prompt=consent к URL-адресу авторизации, чтобы принудительно отображать экран согласия даже при последующих авторизациях.

Ток refresh_token имеет длительный срок действия, но может истечь или стать недействительным, если он не используется в течение 6 месяцев, если пользователь отзывает доступ к вашему приложению или по другим причинам. Вам следует надежно хранить refresh_token для дальнейшего использования.

Для получения более подробной информации см. раздел «Обновление токена доступа (автономный доступ)» .

5. Добавьте данные в мобильное приложение Fitbit.

Новым пользователям Fitbit может не хватать данных для запросов в их учетной записи. Мы вручную добавим запись о тренировке, которую затем можно будет запросить через один из конечных пунктов. Чтобы вручную записать тренировку, выполните следующие шаги:

  1. Откройте мобильное приложение Fitbit на своем устройстве. При необходимости войдите в свою учетную запись Fitbit.
  2. В правом нижнем углу экрана нажмите кнопку «+».
  3. В разделе «Вручную» нажмите «Действия» .
  4. Найдите вид физической активности «Ходьба» и выберите его.
  5. Введите время начала занятий на сегодня.
  6. Измените продолжительность на 15 минут .
  7. Оставьте расстояние 1,0 мили .
  8. Нажмите « Добавить ».
  9. Для синхронизации мобильного приложения с серверами Fitbit нажмите и удерживайте палец на экране, затем проведите им вниз. После отпускания пальца вы увидите, как мобильное приложение синхронизируется.
  10. В разделе «Активность» вы должны увидеть запись о прогулке, внесенную вами вручную. Скриншот, демонстрирующий прогулку.

6. Получение данных с использованием метода списка.

Чтобы вызвать метод 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. В ответе будет возвращено количество шагов за каждую минуту, аналогично конечной точке Activity Intraday веб-API Fitbit 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. Поздравляем!

Поздравляем!

Вы завершили базовый практический урок и успешно научились использовать Visual Studio Code и расширение Rest Client для тестирования авторизации OAuth 2.0 и выполнения вызовов к конечным точкам Google Health API. Теперь вы можете добавить дополнительные конечные точки так же, как и в начале раздела «Получение данных с помощью метода List» .

Мы надеемся, что вам понравится создавать приложения, интегрирующиеся с экосистемой Google Health API. Для получения дополнительной информации ознакомьтесь с другими конечными точками Google Health API в справочной документации и узнайте больше о Google OAuth 2.0 для веб-серверных приложений .