الترقيم
جميع نقاط النهاية القائمية تدعم الترقيم القائم على الإزاحة. يوفّر SDK أيضاً مولّداً غير متزامن للتنقل عبر جميع الصفحات.
كيف يعمل الترقيم
تستخدم كلمات الترقيم القائم على الإزاحة عبر معاملَي offset-based pagination pagelimit للاستعلام. يتضمن غلاف الاستجابة بيانات الترقيم الوصفية في حقل meta.
| المعامل | النوع | الافتراضي | الحد الأقصى | الوصف |
|---|---|---|---|---|
| page | integer | 1 | — | رقم الصفحة، يبدأ من 1. |
| limit | integer | 20 | 100 (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_keytypescript
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. كل طلب يضيف تأخيراً، فصفحات أقل = إنجاز أسرع.