구현 예시

기존 Fitbit Web API에서 Google Health API로 이전하려면 일반 OAuth2 라이브러리에서 Google Auth 라이브러리로 이동합니다. 다음은 이 '이중 라이브러리' 상태를 처리하기 위해 자바스크립트로 작성된 아키텍처 제안사항과 유사 코드 구현입니다.

1. '미들웨어 전환'

모든 사용자를 한 번에 이전할 수는 없으므로 백엔드에서 데이터베이스에 저장된 사용자의 현재 apiVersion을 기반으로 사용할 라이브러리를 결정해야 합니다.

구현

const { OAuth2Client } = require('google-auth-library');
const FitbitV1Strategy = require('fitbit-oauth2-library').Strategy;

// 1. Initialize the Google Health API Client
const GHAClient = new OAuth2Client(
  process.env.GOOGLE_CLIENT_ID,
  process.env.GOOGLE_CLIENT_SECRET,
  process.env.REDIRECT_URI
);

// 2. Create a Unified Fetcher
async function fetchSteps(user) {
  if (user.apiVersion === 4) {
    // ---- GOOGLE OAUTH LIBRARY LOGIC ----
    GHAClient.setCredentials({ refresh_token: user.refreshToken });
    const url = 'GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints';
    const res = await GHAClient.request({ url });
    return res.data;
  } else {
    // ---- FITBIT WEB API LEGACY LOGIC ----
    // Use your existing Fitbit open-source library logic here
    return callLegacyV1Api(user.accessToken);
  }
}

2. UX 흐름 이전

유지를 극대화하려면 "중단 및 업그레이드" 패턴을 사용하세요. 이렇게 하면 사용자가 이미 앱을 사용하고 있을 때까지 다시 로그인하지 않아도 됩니다.

리디렉션 로직

Fitbit Web API 사용자가 특정 기능을 사용하면 이전을 트리거합니다.

app.get('/dashboard', async (req, res) => {
  const user = await db.users.find(req.user.id);

  if (user.apiVersion === 1) {
    // Render a "soft" migration page explaining the Google transition
    return res.render('migrate-to-google', {
      title: "Keep your data syncing",
      message: "Fitbit is moving to Google accounts. Re-connect now to stay updated."
    });
  }

  const data = await fetchSteps(user);
  res.render('dashboard', { data });
});

3. 주요 기술 전환

자바스크립트 이전 스크립트를 작성할 때는 다음과 같은 차이점에 유의하세요.

기능 Fitbit Web API (기존) Google Health API (Google-Identity)
토큰 엔드포인트 https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
인증 라이브러리 표준 오픈소스 Google 인증
범위 활동 https://www.googleapis.com/auth/googlehealth.activity_and_fitness
사용자 ID /oauth2/token 응답에서 반환된 Fitbit 인코딩 ID users.getIdentity 엔드포인트에서 반환된 사용자 ID

4. 유지 체크리스트

  • 세션 지속성: Google Health API access_token이 성공적으로 확인되고 데이터베이스에 저장될 때까지 사용자의 이전 Fitbit Web API 세션을 지우지 마세요.
  • 자동 취소: Google Health API 이전이 완료되면 POST 요청을 기존 Fitbit 취소 엔드포인트( https://api.fitbit.com/oauth2/revoke)에 사용합니다. 이렇게 하면 사용자의 Fitbit 설정에 '중복' 앱 권한이 표시되지 않습니다.
  • 오류 처리: Fitbit 호출에서 401 권한 없음이 반환되면 오류 메시지를 표시하는 대신 Google OAuth 흐름으로 자동 리디렉션합니다.