এন্ডপয়েন্ট, এন্ডপয়েন্ট, এন্ডপয়েন্ট

এই পৃষ্ঠায় REST API-এর প্রচলিত নিয়মাবলীর একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে, সাথে রয়েছে Google Health API-এর সাধারণ কাজগুলোর একটি সূচী এবং প্রতিটির উদাহরণ।

REST API কনভেনশন

গুগল হেলথ এপিআই, গুগল এপিআই ইমপ্রুভমেন্ট প্রপোজালস (এআইপি) স্ট্যান্ডার্ডগুলো অনুসরণ করে, বিশেষত এআইপি-১২৭ (এইচটিটিপি এবং জিআরপিসি ট্রান্সকোডিং) এবং এআইপি-১৩১ থেকে এআইপি-১৩৫ (স্ট্যান্ডার্ড মেথডস)। এই স্ট্যান্ডার্ডগুলো সংজ্ঞায়িত করে যে, কীভাবে একটি প্রোটো মেসেজ থেকে একটি এইচটিটিপি রিকোয়েস্টে ডেটা ম্যাপ করা হয়।

কোয়েরি প্যারামিটার

যখন ডেটা URL-এর অংশ হয়, তখন কোয়েরি প্যারামিটার ব্যবহার করা হয়। এটি প্রধানত GET রিকোয়েস্ট (কোনো রিসোর্স ফেচ করা) বা LIST রিকোয়েস্ট (ফিল্টারিং/পেজিনেশন)-এর জন্য ব্যবহৃত হয়, তবে DELETE অপারেশনের জন্যও এটি ব্যবহার করা হয়ে থাকে।

  • অবস্থান : URL-এর শেষে ? চিহ্নের পর যুক্ত করা হয়।
  • সিনট্যাক্স : কী-ভ্যালু জোড়া & দ্বারা পৃথক করা থাকে।
  • ম্যাপিং : অনুরোধ বার্তার প্রতিটি ফিল্ড, যা ইউআরএল পাথ টেমপ্লেটের অংশ নয়, একটি কোয়েরি প্যারামিটারের সাথে ম্যাপ করা হয়।
  • এর জন্য সেরা : সরল টাইপ (স্ট্রিং, ইন্ট, এনাম) এবং পুনরাবৃত্ত ফিল্ড।

উদাহরণ সিনট্যাক্স:

GET https://health.googleapis.com/v4/users/me/dataTypes/data-type/dataPoints?page_size=10&filter=data_type.interval.start_time >= "2025-10-01T00:00:00Z"

অনুরোধকারী শরীর

যখন ডেটা কোনো রিসোর্সের অবস্থা পরিবর্তন করে অথবা একটি URL-এর জন্য খুব বড় হয়, তখন রিকোয়েস্ট বডি ব্যবহার করা হয়। বডিটি সাধারণত রিসোর্সটিরই একটি JSON উপস্থাপনা। এটি সাধারণত POST , PATCH , এবং PUT অপারেশনের জন্য ব্যবহৃত হয়।

  • অবস্থান : HTTP পেলোডের ভিতরে (URL-এ দৃশ্যমান নয়)।
  • সিনট্যাক্স : একটি JSON অবজেক্ট হিসাবে ফরম্যাট করা।
  • ম্যাপিং : google.api.http অ্যানোটেশনে সংজ্ঞায়িত।
    • body: "*" মানে হলো সম্পূর্ণ বার্তাটিই মূল অংশ।
    • body: "resource_name" বলতে বোঝায় যে প্রোটোর শুধুমাত্র একটি নির্দিষ্ট ফিল্ডই হলো বডি।
  • এর জন্য সর্বোত্তম : জটিল অবজেক্ট, নেস্টেড মেসেজ এবং সংবেদনশীল ডেটা।

উদাহরণ সিনট্যাক্স:

POST https://health.googleapis.com/v4/users/me/dataTypes/data-type/dataPoints:rollUp
Content-Type: application/json

{
  "range": {
    "startTime": "2025-11-05T00:00:00Z",
    "endTime": "2025-11-13T00:00:00Z"
  },
  "windowSize": "3600s"
}

হাইব্রিড কেস

একটি AIP-134 অনুবর্তী Update মেথড বা PATCH অপারেশনে, উভয়ই ব্যবহৃত হয়। URL-এ রিসোর্সের নাম থাকে, বডিতে আপডেট করা রিসোর্স ডেটা থাকে এবং একটি কোয়েরি প্যারামিটার (সাধারণত update_mask ) নির্দিষ্ট করে দেয় কোন ফিল্ডগুলো পরিবর্তন করতে হবে।

PATCH https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id
Content-Type: application/json

{
  "endpointUri": "https://myapp.com/new-webhooks/health"
}

এক নজরে মূল পার্থক্যসমূহ

বৈশিষ্ট্য কোয়েরি প্যারামিটার অনুরোধের মূল অংশ
এআইপি নির্দেশিকা অনুসন্ধান, ফিল্টারিং এবং পঠন কার্যক্রমের জন্য ব্যবহৃত হয়। লেখার কাজের জন্য ব্যবহৃত হয়।
দৃশ্যমানতা ব্রাউজার হিস্ট্রি এবং সার্ভার লগে দেখা যায়। ইউআরএল থেকে লুকানো।
জটিলতা সমতল বা পুনরাবৃত্ত কাঠামোর মধ্যে সীমাবদ্ধ। গভীরভাবে নেস্টেড JSON অবজেক্ট সমর্থন করে।
এনকোডিং অবশ্যই URL-এনকোড করতে হবে (উদাহরণস্বরূপ, স্পেস %20 হয়ে যাবে)। স্ট্যান্ডার্ড JSON এনকোডিং।

তারিখ

গুগল হেলথ এপিআই-তে সমস্ত তারিখ YYYY-MM-DD ফরম্যাটে প্রদর্শিত হয়। নিউট্রিশন এপিআই নিম্নলিখিত শর্ত সাপেক্ষে তারিখের মানের জন্য ISO-8601 স্ট্যান্ডার্ড সমর্থন করে:

  • চার অঙ্কের বছর YYYY
  • ০০০০-৯৯৯৯ পরিসরের মধ্যে থাকা বছরের মান
  • ISO-8601 স্ট্যান্ডার্ড বা অন্য কোনো যুগ দ্বারা আরোপিত শুরুর তারিখের বিধিনিষেধের কোনো প্রয়োগ নেই।

হেডার

গুগল হেলথ এপিআই এন্ডপয়েন্টগুলো কার্যকর করার জন্য উপযুক্ত হেডার এবং অ্যাক্সেস টোকেন ব্যবহার করা প্রয়োজন। GET এবং POST উভয় অনুরোধের জন্য নিম্নলিখিত হেডারটি ব্যবহার করার পরামর্শ দেওয়া হয়:

Authorization: Bearer access-token
Accept: application/json

এপিআই টাস্ক সূচক

এই বিভাগে গুগল হেলথ এপিআই-এর সাধারণ কাজগুলোর একটি সূচি এবং প্রতিটির উদাহরণ দেওয়া হয়েছে।

Fitbit বা Google ইউজার আইডি সংগ্রহ করুন

কোনো ব্যবহারকারী Google OAuth 2.0-এর মাধ্যমে সম্মতি দেওয়ার পর, টোকেন রেসপন্সে Fitbit বা Google ইউজার আইডি থাকে না। ইউজার আইডি পেতে, getIdentity এন্ডপয়েন্টটি কল করুন। getIdentity Fitbit লিগ্যাসি ইউজার আইডি এবং Google ইউজার আইডি উভয়ই রিটার্ন করে।

আমরা সুপারিশ করি যে, কোনো নতুন ব্যবহারকারী OAuth-এর মাধ্যমে সম্মতি দেওয়ার সাথে সাথেই আপনি getIdentity এন্ডপয়েন্টটি কল করে উভয় ইউজার আইডি সংরক্ষণ করুন। এটি আপনার ইন্টিগ্রেশনে ব্যাকওয়ার্ড এবং ফরোয়ার্ড কম্প্যাটিবিলিটি নিশ্চিত করে।

উদাহরণস্বরূপ:

অনুরোধ

GET https://health.googleapis.com/v4/users/me/identity
Authorization: Bearer access-token
Accept: application/json

প্রতিক্রিয়া

{
  "name": "users/me/identity",
  "legacyUserId": "A1B2C3",
  "healthUserId": "111111256096816351"
}

সারাদিন ধরে সংগৃহীত ইন্ট্রাডে বা বিস্তারিত ডেটা পান।

একটি নির্দিষ্ট ডেটা টাইপের জন্য সমর্থিত বিরতিতে দিনব্যাপী সংগৃহীত ইন্ট্রাডে বা বিস্তারিত ডেটা পেতে, সেই ডেটা টাইপের list এন্ডপয়েন্টটি ব্যবহার করুন।

উদাহরণস্বরূপ:

অনুরোধ

GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints
Authorization: Bearer access-token
Accept: application/json

প্রতিক্রিয়া

{
  "dataPoints": [
    {
      "dataSource": {
        "recordingMethod": "PASSIVELY_MEASURED",
        "device": {
          "manufacturer": "",
          "displayName": "Charge 6"
        },
        "platform": "FITBIT"
      },
      "steps": {
        "interval": {
          "startTime": "2026-03-04T07:05:00Z",
          "startUtcOffset": "0s",
          "endTime": "2026-03-04T07:06:00Z",
          "endUtcOffset": "0s",
          "civilStartTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 4
            },
            "time": {
              "hours": 7,
              "minutes": 5
            }
          },
          "civilEndTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 4
            },
            "time": {
              "hours": 7,
              "minutes": 6
            }
          }
        },
        "count": "40"
      }
    },
...
  ],
  "nextPageToken": "Xm5h-6L0viZxIlRuWjx5bmvy98zj85uG34tuMn16mu2pntsnZI32iqhq"
}

একটি নির্দিষ্ট সময় অন্তর সিভিল শুরুর সময় অনুযায়ী ডেটা ফিল্টার করুন

সিভিল টাইম বা কোনো ব্যবধান অনুযায়ী ডেটা ফিল্টার করতে filter প্যারামিটারসহ list এন্ডপয়েন্টটি ব্যবহার করুন।

উদাহরণস্বরূপ:

অনুরোধ

GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints?filter=steps.interval.civil_start_time >= "2026-03-04T00:00:00"
Authorization: Bearer access-token
Accept: application/json

প্রতিক্রিয়া

{
  "dataPoints": [
    {
      "dataSource": {
        "recordingMethod": "PASSIVELY_MEASURED",
        "device": {
          "manufacturer": "",
          "displayName": "Charge 6"
        },
        "platform": "FITBIT"
      },
      "steps": {
        "interval": {
          "startTime": "2026-03-04T07:05:00Z",
          "startUtcOffset": "0s",
          "endTime": "2026-03-04T07:06:00Z",
          "endUtcOffset": "0s",
          "civilStartTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 4
            },
            "time": {
              "hours": 7,
              "minutes": 5
            }
          },
          "civilEndTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 4
            },
            "time": {
              "hours": 7,
              "minutes": 6
            }
          }
        },
        "count": "40"
      }
...
  ],
  "nextPageToken": "Xm5h-6L0viZxIlRuQjp5bml1bZ4ve2dhNmZvMnt4Yn7qIGQhbHN3YQ"
}

নমুনা পর্যবেক্ষণের ভৌত সময় অনুসারে ডেটা ফিল্টার করুন

নমুনা পর্যবেক্ষণের ভৌত সময় অনুসারে ডেটা ফিল্টার করতে filter প্যারামিটারসহ list এন্ডপয়েন্টটি ব্যবহার করুন।

উদাহরণস্বরূপ:

অনুরোধ

GET https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints?filter=body_fat.sample_time.physical_time >= "2026-03-01T00:00:00Z"
Authorization: Bearer access-token
Accept: application/json

প্রতিক্রিয়া

{
  "dataPoints": [
    {
      "name": "users/2515055256096816351/dataTypes/body-fat/dataPoints/1234567890",
      "dataSource": {
        "recordingMethod": "UNKNOWN",
        "application": {
          "packageName": "",
          "webClientId": "",
          "googleWebClientId": "google-web-client-id"
        },
        "platform": "GOOGLE_WEB_API"
      },
      "-->bodyFat<--": {
        "sampleTime": {
          "physicalTime": "2026-03-10T10:00:00Z",
          "utcOffset": "0s",
          "civilTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 10
            },
            "time": {
              "hours": 10
            }
          }
        },
        "percentage": 20
      }
    }
  "nextPageToken": ""
}

পরিধানযোগ্য ডিভাইসের মতো ডেটা উৎস দ্বারা ডেটা ফিল্টার করুন

একটি নির্দিষ্ট 'ডেটা সোর্স ফ্যামিলি'-র ডেটা পেতে reconcile এন্ডপয়েন্টটি ব্যবহার করুন। এটি করার জন্য, কোয়েরি প্যারামিটার হিসেবে dataSourceFamily প্যারামিটারটি উল্লেখ করুন।

নিম্নলিখিত সারণিতে সমর্থিত dataSourceFamily বিকল্পগুলি বর্ণনা করা হয়েছে:

বিকল্প বর্ণনা
users/me/dataSourceFamilies/all-sources ডিফল্ট মান। এতে উপলব্ধ সকল ডেটা উৎসের ডেটা অন্তর্ভুক্ত রয়েছে।
users/me/dataSourceFamilies/google-wearables গুগল এবং ফিটবিট ট্র্যাকার ডিভাইস (যেমন ফিটবিট ট্র্যাকার এবং পিক্সেল ওয়াচ) থেকে প্রাপ্ত ডেটা অন্তর্ভুক্ত। ম্যানুয়ালি লগ করা ডেটা বাদ দেওয়া হয়েছে।
users/me/dataSourceFamilies/google-sources এর মধ্যে গুগলের নিজস্ব ডেটা অন্তর্ভুক্ত, যেমন ট্র্যাকার ডিভাইস থেকে প্রাপ্ত ডেটা এবং ম্যানুয়ালি লগ করা ডেটা।

এখানে ২০২৬-০৩-০৩ তারিখের পরের দিনের জন্য শুধুমাত্র ট্র্যাকারে রেকর্ড করা ঘুম ফিল্টার করার একটি উদাহরণ দেওয়া হলো:

অনুরোধ

GET https://health.googleapis.com/v4/users/me/dataTypes/sleep/dataPoints:reconcile?dataSourceFamily=users/me/dataSourceFamilies/google-wearables&filter=sleep.interval.civil_end_time >= "2026-03-03"
Authorization: Bearer access-token
Accept: application/json

প্রতিক্রিয়া

{
  "dataPoints": [
    {
      "name": "users/2515055256096816351/dataTypes/sleep/dataPoints/2724123844716220216",
      "dataSource": {
        "recordingMethod": "DERIVED",
        "device": {
          "displayName": "Charge 6"
        },
        "platform": "FITBIT"
      },
      "sleep": {
        "interval": {
          "startTime": "2026-03-03T20:57:30Z",
          "startUtcOffset": "0s",
          "endTime": "2026-03-04T04:41:30Z",
          "endUtcOffset": "0s"
        },
        "type": "STAGES",
        "stages": [
          {
            "startTime": "2026-03-03T20:57:30Z",
            "startUtcOffset": "0s",
            "endTime": "2026-03-03T20:59:30Z",
            "endUtcOffset": "0s",
            "type": "AWAKE",
            "createTime": "2026-03-04T04:43:40.937183Z",
            "updateTime": "2026-03-04T04:43:40.937183Z"
          },
…
          {
            "startTime": "2026-03-04T04:07:30Z",
            "startUtcOffset": "0s",
            "endTime": "2026-03-04T04:41:30Z",
            "endUtcOffset": "0s",
            "type": "AWAKE",
            "createTime": "2026-03-04T04:43:40.937183Z",
            "updateTime": "2026-03-04T04:43:40.937183Z"
          }
        ],
        "metadata": {
          "stagesStatus": "SUCCEEDED",
          "processed": true,
          "main": true
        },
        "summary": {
          "minutesInSleepPeriod": "464",
          "minutesAfterWakeUp": "0",
          "minutesToFallAsleep": "0",
          "minutesAsleep": "407",
          "minutesAwake": "57",
          "stagesSummary": [
            {
              "type": "AWAKE",
              "minutes": "56",
              "count": "12"
            },
            {
              "type": "LIGHT",
              "minutes": "198",
              "count": "19"
            },
            {
              "type": "DEEP",
              "minutes": "114",
              "count": "10"
            },
            {
              "type": "REM",
              "minutes": "94",
              "count": "4"
            }
          ]
        },
        "createTime": "2026-03-04T04:43:40.337983Z",
        "updateTime": "2026-03-04T04:43:40.937183Z"
      }
    }
  ],
  "nextPageToken": ""
}

একটি নির্দিষ্ট সময়সীমার মধ্যে ডেটা পয়েন্টগুলিকে একত্রিত করুন

ব্যবহারকারীর ভৌত সময় (UTC-তে) অনুযায়ী datetime পরিসরের মধ্যে, সেকেন্ডে একটি উইন্ডোতে ডেটা পয়েন্টগুলোর সমষ্টি ফেরত পেতে rollUp এন্ডপয়েন্টটি ব্যবহার করুন।

rollUp এন্ডপয়েন্টটি কল করার সময়, আপনাকে অবশ্যই ব্যবহারকারীর সিভিল টাইম অনুযায়ী প্রয়োজনীয় তারিখের পরিসর উল্লেখ করে রিকোয়েস্ট বডি প্রদান করতে হবে। উদাহরণস্বরূপ:

অনুরোধ

POST https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints:rollUp
Authorization: Bearer access-token
Accept: application/json

{
  "range": {
    "startTime": "2026-02-17T17:00:00Z",
    "endTime": "2026-02-17T17:59:59Z"
  },
  "windowSize": "30s"
}

প্রতিক্রিয়া

{
  "rollupDataPoints": [
    {
      "startTime": "2026-02-17T17:55:00Z",
      "endTime": "2026-02-17T17:55:30Z",
      "steps": {
        "countSum": "41"
      }
    },
    {
      "startTime": "2026-02-17T17:54:00Z",
      "endTime": "2026-02-17T17:54:30Z",
      "steps": {
        "countSum": "31"
      }
    },
...
  ]
}

একদিন বা একাধিক দিনের ডেটা একত্রিত করুন

যখন আপনি একটি একক দিন বা একাধিক দিনের (যা windowSize নামে পরিচিত) ডেটা একত্রিত করতে চান, তখন dailyRollUp এন্ডপয়েন্টটি ব্যবহার করা উচিত। অনুরোধের বডিতে প্রয়োজনীয় ব্যবধানের জন্য বন্ধ-খোলা বেসামরিক সময়সীমা প্রদান করুন। ডেটার ধরনের উপর নির্ভর করে, আপনি উক্ত ব্যবধানের যোগফল বা গড় পাবেন।

উদাহরণস্বরূপ:

অনুরোধ

POST https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints:dailyRollUp
Authorization: Bearer access-token
Accept: application/json

{
  "range": {
    "start": {
      "date": {
        "year": 2026,
        "month": 2,
        "day": 26
      },
      "time": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "nanos": 0
      }
    },
    "end": {
      "date": {
        "year": 2026,
        "month": 2,
        "day": 26
      },
      "time": {
        "hours": 23,
        "minutes": 59,
        "seconds": 59,
        "nanos": 0
      }
    }
  },
  "windowSizeDays": 1
}

প্রতিক্রিয়া

{
  "rollupDataPoints": [
    {
      "civilStartTime": {
        "date": {
          "year": 2026,
          "month": 2,
          "day": 26
        },
        "time": {}
      },
      "civilEndTime": {
        "date": {
          "year": 2026,
          "month": 2,
          "day": 26
        },
        "time": {
          "hours": 23,
          "minutes": 59,
          "seconds": 59
        }
      },
      "steps": {
        "countSum": "3822"
      }
    }
  ]
}

ব্যবহারকারীর স্বাস্থ্য তথ্য প্রবেশ করান বা আপডেট করুন

ব্যবহারকারীর Fitbit অ্যাপের ডেটা যোগ বা আপডেট করতে patch এন্ডপয়েন্ট ব্যবহার করুন।

এখানে একটি উদাহরণ দেওয়া হল যেখানে একজন ব্যবহারকারী 'স্কেলস আর আস' কোম্পানির 'হিউম্যানস্কেল' নামক একটি স্কেলে তার শরীরের চর্বির পরিমাণ রেকর্ড করেছেন। ২০২৬-০৩-১০ তারিখে ব্যবহারকারীর শরীরের চর্বির নতুন পরিমাপ হল ২০%।

অনুরোধ

PATCH https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints/1234567890
Authorization: Bearer access-token
content-length: 329

{
  "name": "bodyFatName",
  "dataSource": {

    "recordingMethod": "ACTIVELY_MEASURED",
    "device": {
      "formFactor": "SCALE",
      "manufacturer": "Scales R Us",
      "displayName": "HumanScale"
    }
  },
  "bodyFat": {
    "sampleTime": {
      "physicalTime": "2026-03-10T10:00:00Z"
    },
    "percentage": 20
  }
}

প্রতিক্রিয়া

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4main.DataPoint",
    "name": "users/2515055256096816351/dataTypes/body-fat/dataPoints/1234567890",
    "dataSource": {
      "recordingMethod": "ACTIVELY_MEASURED",
      "device": {
        "formFactor": "SCALE",
        "manufacturer": "Scales R Us",
        "displayName": "HumanScale"
      },
      "application": {
        "googleWebClientId": "618308034039.apps.googleusercontent.com"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "bodyFat": {
      "sampleTime": {
        "physicalTime": "2026-03-10T10:00:00Z"
      },
      "percentage": 20
    }
  }
}

একটি খাদ্যদ্রব্য নথিভুক্ত করুন

কোনো খাদ্যদ্রব্য লগ করতে, nutrition-log data points এন্ডপয়েন্টে একটি POST রিকোয়েস্ট পাঠান। রিকোয়েস্ট বডিতে একটি DataPoint থাকে, যার মধ্যে একটি nutritionLog অবজেক্ট থাকে। আরও তথ্যের জন্য, পুষ্টি নির্দেশিকা দেখুন।

উদাহরণস্বরূপ:

অনুরোধ

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T12:00:00Z",
      "endTime": "2026-06-16T12:30:00Z"
    },
    "foodDisplayName": "Banana",
    "mealType": "LUNCH",
    "energy": {
      "kcal": 105
    },
    "totalCarbohydrate": {
      "grams": 27
    },
    "totalFat": {
      "grams": 0.3
    }
  }
}

প্রতিক্রিয়া

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/2515055256096816351/dataTypes/nutrition-log/dataPoints/567890",
    "dataSource": {
      "recordingMethod": "ACTIVELY_MEASURED",
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T12:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T12:30:00Z",
        "endUtcOffset": "0s"
      },
      "energy": {
        "kcal": 105
      },
      "totalCarbohydrate": {
        "grams": 27
      },
      "totalFat": {
        "grams": 0.3
      },
      "mealType": "LUNCH",
      "foodDisplayName": "Banana"
    }
  }
}

ব্যবহারকারীর স্বাস্থ্য তথ্য মুছে ফেলুন

কোনো ব্যবহারকারীর Fitbit অ্যাপের ডেটার একটি অ্যারে মুছে ফেলার জন্য batchDelete এন্ডপয়েন্টটি ব্যবহার করুন।

এখানে এমন একটি উদাহরণ দেওয়া হল যেখানে একজন ব্যবহারকারী পূর্বে একটি স্কেলে তার শরীরের চর্বি রেকর্ড করেছিলেন, কিন্তু তিনি সেই রেকর্ডটি মুছে ফেলতে চান। মূল ইনসার্ট অ্যাকশন থেকে user-id এবং data-point-id ব্যবহার করে:

অনুরোধ

POST https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints:batchDelete
Authorization: Bearer access-token
Accept: application/json
content-length: 93

{
  "names": [
    "users/2515055256096816351/dataTypes/body-fat/dataPoints/1234567890"
  ]
}

প্রতিক্রিয়া

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4main.BatchDeleteDataPointsResponse"
  }
}

ডিভাইসের তথ্য খুঁজুন

ব্যবহারকারীর অ্যাকাউন্টের সাথে যুক্ত ডিভাইসগুলোর তালিকা পেতে list এন্ডপয়েন্টটি ব্যবহার করুন। এর মধ্যে ডিভাইসটির মডেলের তথ্য ( deviceVersion ) এবং গুগল হেলথ মোবাইল অ্যাপের সাথে শেষবার সিঙ্ক্রোনাইজ করার সময় ( lastSyncTime ) অন্তর্ভুক্ত থাকে।

তালিকার কনফিগারেশন এবং সিঙ্ক সম্পর্কিত তথ্য সিঙ্ক সংক্রান্ত সমস্যা সমাধান করতে অথবা শেষ সিঙ্কের পর থেকে পুরোনো ডেটা সংগ্রহ করতে সহায়ক।

উদাহরণস্বরূপ:

অনুরোধ

GET https://health.googleapis.com/v4/users/me/pairedDevices
Authorization: Bearer access-token
Accept: application/json

প্রতিক্রিয়া

{
  "pairedDevices": [
    {
      "name": "users/me/pairedDevices/123456",
      "deviceType": "TRACKER",
      "batteryStatus": "High",
      "batteryLevel": 88,
      "lastSyncTime": "2026-03-04T07:05:00Z",
      "deviceVersion": "Charge 6",
      "macAddress": "00:11:22:33:44:55",
      "features": [
        "STEPS",
        "HEART_RATE"
      ]
    }
  ]
}

ঐতিহাসিক ডেটা অনুসন্ধান করুন

গুগল হেলথ এপিআই-এর অন্যতম প্রধান সুবিধা হলো দীর্ঘ সময় ধরে একজন ব্যবহারকারীর কর্মক্ষমতা ট্র্যাক করা এবং তার স্বাস্থ্যের গুরুত্বপূর্ণ লক্ষণগুলো পর্যবেক্ষণ করা। আপনি একজন ব্যবহারকারীর ডেটা যত দিন আগে থেকে রেকর্ড করা হয়েছে, তত দিন পর্যন্ত কোয়েরি করতে পারেন; আপনার অ্যাপ্লিকেশন কী পরিমাণ ঐতিহাসিক ডেটা গ্রহণ করতে পারবে, তার উপর এই এপিআই কোনো সীমাবদ্ধতা বা বিধিনিষেধ আরোপ করে না।

তবে, ঐতিহাসিক ডেটা কোয়েরি করা এখনও স্ট্যান্ডার্ড রেট লিমিট দ্বারা নিয়ন্ত্রিত হয়। সিস্টেমের স্থিতিশীলতা বজায় রাখতে এবং অতিরিক্ত পেলোড প্রতিরোধ করতে, গুগল হেলথ এপিআই এন্ডপয়েন্ট-নির্দিষ্ট পেজ সাইজ সহ স্বয়ংক্রিয় পেজিনেশন ব্যবহার করে। নিম্নলিখিত সীমা এবং আচরণ লক্ষ্য করুন:

  • স্বয়ংক্রিয় পেজিনেশন: আপনি যদি দীর্ঘ পরিসরের ডেটা কোয়েরি করেন, তাহলে এপিআইটি সেই এন্ডপয়েন্টের জন্য নির্ধারিত পেজ সাইজ ক্যাপ পর্যন্ত ফলাফলের শুধুমাত্র প্রথম পৃষ্ঠাটি একটি nextPageToken সহ ফেরত দেবে। পরবর্তী পৃষ্ঠাগুলির জন্য আপনাকে অবশ্যই nextPageToken ব্যবহার করতে হবে।
  • পরিবর্তনশীল পেজ সাইজ: সর্বোচ্চ সীমা এন্ডপয়েন্ট এবং ডেটা টাইপের উপর নির্ভর করে। বেশিরভাগ ডেটা টাইপের জন্য, পেজ সাইজ সর্বোচ্চ ১০,০০০-এ সীমাবদ্ধ। তবে, exercise এবং sleep মতো নির্দিষ্ট কিছু ডেটা টাইপের জন্য, ডিফল্ট এবং সর্বোচ্চ পেজ সাইজ ২৫-এ সীমাবদ্ধ। উদাহরণস্বরূপ, যদি কোনো ক্লায়েন্ট গত ১০ বছরের সমস্ত স্লিপ ডেটার জন্য অনুরোধ করে, তবুও এপিআই প্রথম পেজে শুধুমাত্র ২৫টি স্লিপ সেশন ফেরত দেবে।
  • রোলআপ ডেট রেঞ্জের সীমাবদ্ধতা: ডেটা রোলআপ এবং অ্যাগ্রিগেশন এন্ডপয়েন্টগুলির (যেমন rollUp এবং dailyRollUp ) ক্ষেত্রে, ডেটা টাইপের উপর ভিত্তি করে কোয়েরির ডেট রেঞ্জ সীমাবদ্ধ করা হয়:
    • calories-in-heart-rate-zone , heart-rate , active-minutes এবং total-calories জন্য সর্বোচ্চ ১৪ দিনের সীমা।
    • অন্যান্য সকল রোলআপ ডেটা টাইপের জন্য সর্বোচ্চ সময়সীমা ৯০ দিন।

আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় ঐতিহাসিক ডেটার পরিমাণের উপর নির্ভর করে, সম্পূর্ণ ডেটাসেটটি পুনরুদ্ধার করতে পৃষ্ঠাগুলি ক্রমানুসারে অতিক্রম করার প্রয়োজন হবে। আপনার অ্যাপ্লিকেশনের ডেটা সিঙ্ক্রোনাইজেশন প্রক্রিয়া ডিজাইন করার সময় এই বিষয়টি মাথায় রাখুন।

সর্বোত্তম পারফরম্যান্স নিশ্চিত করতে এবং এপিআই ত্রুটি এড়াতে, ঐতিহাসিক ডেটা কোয়েরি করার সময় এই নির্দেশিকাগুলি অনুসরণ করুন:

পর্যায়ক্রমিক ডেটা সিঙ্ক (হট বনাম কোল্ড লোড)

  • প্রাথমিক "হট" লোড: প্রধান লোড সিকোয়েন্স চলাকালীন শুধুমাত্র সাম্প্রতিকতম ৭-১৪ দিনের ডেটা ফেচ এবং রেন্ডার করা হয়। এটি নিশ্চিত করে যে ব্যবহারকারীরা দীর্ঘ সময় ধরে চলা কোয়েরির জন্য অপেক্ষা না করেই অবিলম্বে ডেটা দেখতে পান।
  • ব্যাকগ্রাউন্ড "কোল্ড" লোড: প্রধান UI রেন্ডার হওয়ার পরে, পুরোনো ঐতিহাসিক ডেটা পুনরুদ্ধারের কাজটি একটি অ্যাসিঙ্ক্রোনাস, কম-অগ্রাধিকারের কিউ বা ব্যাকগ্রাউন্ড প্রসেসের কাছে অর্পণ করা।

অ্যাগ্রিগেশনের জন্য কোয়েরি চাংকিং

  • যেহেতু রোলআপ এবং ডেইলি রোলআপ এন্ডপয়েন্টগুলো একটি সর্বোচ্চ তারিখের পরিসীমা (ডেটা টাইপের উপর নির্ভর করে ১৪ বা ৯০ দিন) আরোপ করে, তাই আপনাকে অবশ্যই বড় হিস্টোরিক্যাল অ্যাগ্রিগেশন কোয়েরিগুলোকে এই সীমার মধ্যে ছোট ছোট, ধারাবাহিক ব্যবধানে বিভক্ত করতে হবে।
  • কনকারেন্সি সীমা মেনে চলতে এবং UI অগ্রগতি সূচক স্থির রাখতে এই সাব-কোয়েরিগুলোকে নিরাপদে ব্যাচ বা ক্রমানুসারে চালান।

পূর্ব-একত্রিত রোল-আপগুলির সুবিধা নিন

পূর্ব-সংগৃহীত সারসংক্ষেপ এন্ডপয়েন্ট (যেমন DailyRollUpDataPoints ) ব্যবহার করার জন্য ওভারভিউ ড্যাশবোর্ড এবং ট্রেন্ড চার্টগুলোকে পুনর্গঠন করুন। এটি ব্যাকএন্ডে কম্পিউটিং ওভারহেড এবং ক্লায়েন্টে নেটওয়ার্ক ট্রান্সফার টাইম ব্যাপকভাবে হ্রাস করবে।

স্থিতিস্থাপক ত্রুটি পরিচালনা (স্মার্ট রিট্রাই)

  • রেট লিমিট ( 429 Too Many Requests ) এবং সার্ভার গেটওয়ে টাইমআউটের ( 504 Gateway Timeout ) সম্মুখীন হলে কঠোর এক্সপোনেনশিয়াল ব্যাকঅফ হ্যান্ডলিং প্রয়োগ করুন। বড়, ব্যর্থ পেলোডগুলো কখনোই তাৎক্ষণিকভাবে পুনরায় চেষ্টা করবেন না। তাৎক্ষণিক পুনঃপ্রচেষ্টা ব্যাকএন্ডের যানজট বাড়ায় এবং সিস্টেমের অবনতিকে আরও জটিল করে তোলে।