הטמעה לדוגמה

כדי לעבור מ-Fitbit Web API מדור קודם אל Google Health API, תצטרכו לעבור מספריות OAuth2 כלליות אל Google Auth Library. בהמשך מוצגת הצעה לארכיטקטורה ומימוש של פסאודו-קוד שנכתב ב-JavaScript כדי לטפל במצב הזה של 'ספרייה כפולה'.

1. האפשרות 'החלפת תוכנת ביניים'

אי אפשר להעביר את כל המשתמשים בבת אחת, ולכן ה-Backend צריך לקבוע באיזו ספרייה להשתמש על סמך 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. העברת תהליך חוויית המשתמש

כדי למקסם את שיעור השימור, כדאי להשתמש בתבנית הפרעה ושדרוג. כך המשתמש לא נאלץ להתחבר מחדש עד שהוא כבר משתמש באפליקציה.

לוגיקת הפניה לכתובת אחרת

כשמשתמש ב-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)
Token Endpoint https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
ספריית אימות קוד פתוח רגיל אימות גוגל
היקף פעילות https://www.googleapis.com/auth/googlehealth.activity_and_fitness
מזהה המשתמש מזהה מקודד של Fitbit שמוחזר בתגובה של ‎ /oauth2/token מזהה המשתמש שמוחזר מנקודת הקצה users.getIdentity

4. רשימת משימות לשמירת נתונים

  • שמירת נתוני הסשן: אל תנקו את נתוני הסשן הישנים של Fitbit Web API של המשתמש עד שתוודאו ש-access_token של Google Health API אומת ונשמר במסד הנתונים שלכם.
  • ביטול אוטומטי: אחרי השלמת ההעברה ל-Google Health API, צריך להשתמש בבקשת POST לנקודת הקצה של ביטול הגישה בגרסה הקודמת של Fitbit: https://api.fitbit.com/oauth2/revoke. כך מוודאים שהמשתמש לא יראה הרשאות שניתנות לאפליקציה 'כפולות' בהגדרות Fitbit.
  • טיפול בשגיאות: אם קריאה ל-Fitbit מחזירה 401 Unauthorized, צריך להפנות אוטומטית לזרימת Google OAuth במקום להציג הודעת שגיאה.