Ví dụ về cách triển khai

Để di chuyển từ API Fitbit Web cũ sang Google Health API, bạn sẽ chuyển từ các thư viện OAuth2 chung sang Thư viện xác thực của Google. Sau đây là một đề xuất về kiến trúc và cách triển khai mã giả được viết bằng JavaScript để xử lý trạng thái "Thư viện kép" này.

1. "Công tắc phần mềm trung gian"

Vì bạn không thể di chuyển tất cả người dùng cùng một lúc, nên phần phụ trợ cần xác định thư viện cần sử dụng dựa trên apiVersion hiện tại của người dùng được lưu trữ trong cơ sở dữ liệu của bạn.

Triển khai

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. Di chuyển quy trình trải nghiệm người dùng

Để tối đa hoá tỷ lệ giữ chân, hãy sử dụng mẫu "Gián đoạn và nâng cấp". Điều này đảm bảo người dùng không bị buộc phải đăng nhập lại cho đến khi họ đã tương tác với ứng dụng.

Logic chuyển hướng

Khi người dùng Fitbit Web API truy cập vào một tính năng cụ thể, hãy kích hoạt quá trình di chuyển:

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. Các quá trình chuyển đổi kỹ thuật chính

Khi viết tập lệnh di chuyển JavaScript, hãy lưu ý những điểm khác biệt sau:

Tính năng Fitbit Web API (Cũ) Google Health API (Google-Identity)
Token Endpoint (Điểm cuối mã thông báo) https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
Thư viện xác thực Mã nguồn mở tiêu chuẩn Xác thực của Google
Phạm vi hoạt động https://www.googleapis.com/auth/googlehealth.activity_and_fitness
User ID Mã nhận dạng được mã hoá của Fitbit được trả về trong phản hồi /oauth2/token Mã nhận dạng người dùng được trả về từ điểm cuối users.getIdentity

4. Danh sách kiểm tra tỷ lệ giữ chân

  • Tính liên tục của phiên: Đừng xoá phiên API Fitbit Web cũ của người dùng cho đến khi access_token của Google Health API được xác minh thành công và lưu vào cơ sở dữ liệu của bạn.
  • Tự động thu hồi: Sau khi quá trình di chuyển Google Health API hoàn tất, hãy sử dụng yêu cầu POST đến điểm cuối thu hồi Fitbit cũ: https://api.fitbit.com/oauth2/revoke. Điều này đảm bảo người dùng không thấy các quyền cho ứng dụng "trùng lặp" trong phần cài đặt Fitbit.
  • Xử lý lỗi: Nếu lệnh gọi Fitbit trả về lỗi 401 Không được phép, hãy tự động chuyển hướng đến quy trình OAuth của Google thay vì hiển thị thông báo lỗi.