يعد ترقيم صفحات استجابات واجهة برمجة التطبيقات (API) أمرًا بالغ الأهمية لمعالجة مجموعات البيانات الكبيرة بكفاءة. فيما يلي الاستراتيجيات الأكثر شيوعًا:
1. الترقيم المستند إلى الإزاحة (SKIP/LIMIT)
- كيف تعمل: يرسل العميل معلمات
offset(عدد السجلات التي يجب تخطيها) وlimit(الحد الأقصى لعدد السجلات المراد إرجاعها). - المزايا: بسيطة للتنفيذ والفهم.
- العيوب: قد تكون غير فعالة للإزاحات الكبيرة جدًا حيث لا يزال يتعين على قاعدة البيانات معالجة السجلات التي تم تخطيها ثم تجاهلها. قد تؤدي إلى نتائج غير متسقة إذا تمت إضافة البيانات أو حذفها بين الطلبات (على سبيل المثال، قد يظهر عنصر في صفحات متعددة أو يتم تخطيه تمامًا).
- مثال:
/api/items?offset=10&limit=10(يحصل على العناصر من 11 إلى 20)
2. الترقيم المستند إلى المؤشر (Keyset Pagination)
- كيف تعمل: بدلاً من الإزاحة، يرسل العميل "مؤشرًا" (عادةً معرفًا أو طابعًا زمنيًا لآخر عنصر من الصفحة السابقة). ثم يقوم الخادم بإرجاع العناصر "بعد" هذا المؤشر.
- المزايا: أكثر كفاءة لمجموعات البيانات الكبيرة حيث لا يعيد مسح السجلات السابقة. أكثر قوة لتغييرات البيانات (الإضافات/الحذف) بين الطلبات، مما يوفر "لقطة" بيانات أكثر استقرارًا.
- العيوب: قد يكون تنفيذه أكثر تعقيدًا. يتطلب ترتيب فرز متسق ومعرفًا فريدًا ومتسلسلًا (أو مجموعة من الحقول) ليعمل كمؤشر. لا يمكن القفز بسهولة إلى رقم صفحة عشوائي.
- مثال:
/api/items?after_id=12345&limit=10(يحصل على 10 عناصر بعد العنصر ذي المعرف 12345)
3. الترقيم المستند إلى الصفحة (Page Number/Page Size)
- كيف تعمل: يرسل العميل معلمات
page_numberوpage_size. هذا في الأساس غلاف سهل الاستخدام للترقيم المستند إلى الإزاحة (offset = (page_number - 1) * page_size). - المزايا: بديهية للمستخدمين، تسمح بالانتقال المباشر إلى أرقام صفحات محددة.
- العيوب: يرث عدم الكفاءة وعدم الاتساق في الترقيم المستند إلى الإزاحة.
- مثال:
/api/items?page=2&page_size=10(يحصل على الصفحة الثانية من 10 عناصر)
اعتبارات رئيسية للتنفيذ:
- العدد الإجمالي: قرر ما إذا كنت ستدرج
total_count(العدد الإجمالي للعناصر) في الاستجابة. هذا مفيد لعناصر واجهة المستخدم مثل "الصفحة 1 من 10"، ولكن حسابها قد يكون مكلفًا لمجموعات البيانات الكبيرة جدًا. غالبًا ما يتجاهل الترقيم المستند إلى المؤشر هذا. - الفرز: يتطلب الترقيم دائمًا ترتيب فرز متسق ليكون منطقيًا.
- معالجة الأخطاء: ماذا يحدث إذا كان
offsetأوpage_numberخارج النطاق؟ - الأمان: تأكد من التحقق من صحة معلمات الترقيم لمنع إساءة الاستخدام (على سبيل المثال، قيم
limitكبيرة جدًا). - HATEOAS (Hypermedia as the Engine of Application State): بالنسبة لواجهات برمجة التطبيقات RESTful، فكر في تضمين روابط للصفحات
nextوprevوfirstوlastفي الاستجابة لتوجيه العملاء.