الترقيم

جميع نقاط النهاية القائمية تدعم الترقيم القائم على الإزاحة. يوفّر SDK أيضاً مولّداً غير متزامن للتنقل عبر جميع الصفحات.

كيف يعمل الترقيم

تستخدم كلمات الترقيم القائم على الإزاحة عبر معاملَي offset-based pagination pagelimit للاستعلام. يتضمن غلاف الاستجابة بيانات الترقيم الوصفية في حقل meta.

المعاملالنوعالافتراضيالحد الأقصىالوصف
pageinteger1رقم الصفحة، يبدأ من 1.
limitinteger20100 (Free: 20)النتائج في الصفحة.

حد حجم الصفحة في الخطة المجانية

حسابات الخطة المجانية محدودة بحد أقصى 20 نتيجة في الصفحة. الخطط المدفوعة تدعم حتى 100.

بيانات الترقيم الوصفية في الاستجابات

كل استجابة مُرقَّمة تتضمن هذه الحقول في كائن meta:

paginated-response.json
{  "data": [ ...20 words... ],  "error": null,  "meta": {    "requestId": "req_01j9...",    "responseTimeMs": 14,    "page": 1,    "limit": 20,    "total": 47432,    "totalPages": 2372  }}
الحقلالوصف
meta.pageرقم الصفحة الحالية.
meta.limitعدد النتائج في الصفحة كما طُلب.
meta.totalإجمالي عدد السجلات المطابقة عبر جميع الصفحات.
meta.totalPagesإجمالي عدد الصفحات. يساوي Math.ceil(total / limit).

جلب الصفحات يدوياً

جلب صفحة محددة بتمرير معامل page:

bash
GET /v1/words?letters=5&page=2&limit=20Authorization: Bearer klmt_live_your_key
typescript
import { KalimaLab } from '@kalimalab/sdk'const client = new KalimaLab({ apiKey: process.env.KALIMALAB_API_KEY! })// Fetch page 2 of 5-letter wordsconst page2 = await client.words.search({ letters: 5, page: 2, limit: 20 })console.log(`Page ${page2.meta.page} of ${page2.meta.totalPages}`)console.log(`Total results: ${page2.meta.total}`)

جلب صفحات متعددة يدوياً

typescript
async function fetchAllFiveLetterWords() {  const allWords = []  let page = 1  while (true) {    const result = await client.words.search({ letters: 5, page, limit: 100 })    allWords.push(...result.data)    if (page >= result.meta.totalPages) break    page++  }  return allWords}

مولّد SDK غير المتزامن (موصى به)

يوفّر SDK طريقة paginate() تُعيد مولّداً غير متزامناً. هذه هي الطريقة الأكثر راحةً للتنقل عبر مجموعات النتائج الكبيرة:

paginate.ts
import { KalimaLab } from '@kalimalab/sdk'const client = new KalimaLab({ apiKey: process.env.KALIMALAB_API_KEY! })// Iterate through every page of 5-letter wordsfor await (const page of client.words.paginate({ letters: 5, limit: 100 })) {  console.log(`Processing page ${page.meta.page}/${page.meta.totalPages}`)  for (const word of page.data) {    console.log(word.arabic)  }}// You can break earlyfor await (const page of client.words.paginate({ pos: 'verb' })) {  processPage(page.data)  if (page.meta.page >= 5) break // Stop after 5 pages}

جمع جميع النتائج دفعةً واحدة

typescript
// Convenience: collect all pages into a flat arrayasync function collectAll<T>(  generator: AsyncGenerator<{ data: T[]; meta: { totalPages: number; page: number } }>): Promise<T[]> {  const all: T[] = []  for await (const page of generator) {    all.push(...page.data)  }  return all}const allVerbs = await collectAll(client.words.paginate({ pos: 'verb' }))

نقاط النهاية المُرقَّمة

نقاط النهاية التالية تدعم معاملَي page وlimit:

GET /v1/wordsعرض الكلمات والبحث فيها.
GET /v1/rootsعرض الجذور العربية.
GET /v1/patternsعرض الأوزان الصرفية.
GET /v1/lettersعرض الأحرف مع بيانات التردد.
GET /v1/proverbsعرض الأمثال العربية.
GET /v1/grammar/prepositionsعرض حروف الجر.
GET /v1/grammar/conjunctionsعرض حروف العطف.

نصيحة للأداء

عند جلب مجموعات بيانات كبيرة، استخدم القيمة القصوى لـ limit (100 للخطط المدفوعة) لتقليل عدد رحلات HTTP. كل طلب يضيف تأخيراً، فصفحات أقل = إنجاز أسرع.