導入事例

以前の Fitbit Web API から Google Health API に移行するには、一般的な OAuth2 ライブラリから Google Auth Library に移行します。この「デュアル ライブラリ」状態を処理するためのアーキテクチャの提案と、JavaScript で記述された疑似コードの実装を以下に示します。

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. 主な技術移行

JavaScript 移行スクリプトを作成する際は、次の違いに注意してください。

機能 Fitbit Web API(レガシー) Google Health API(Google-Identity)
トークン エンドポイント https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
Auth ライブラリ 標準オープンソース 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 Unauthorized が返された場合、エラー メッセージを表示する代わりに、Google OAuth フローに自動的にリダイレクトします。