Logo

توثيق واجهة برمجة التطبيقات

وصول برمجي للقراءة فقط إلى مجموعات البيانات والمنظمات العامة. واجهة برمجة التطبيقات العامة حالياً في مرحلة المعاينة — أنشئ مفتاحاً من لوحة التحكم للوصول المبكر.

واجهة برمجة التطبيقات العامة غير متاحة بعد

يصف هذا التوثيق واجهة REST المخطط لها. نقاط النهاية أدناه ليست فعّالة بعد — أمثلة الشيفرة للمعاينة فقط وستُرجع أخطاء إلى أن تُطلَق الواجهة.

مقدمة

توفر واجهة برمجة تطبيقات نظام البيانات المفتوحة للمطورين وصولاً برمجياً للقراءة فقط إلى مجموعات البيانات المنشورة علناً والمنظمات التي تنشرها — نفس الدليل الذي يمكنك تصفحه عبر /datasets و/organizations، متوفرة بصيغة JSON عبر HTTPS.

متوفر حالياً

  • · عرض والبحث في مجموعات البيانات العامة
  • · عرض والبحث في المنظمات
  • · قراءة مجموعة بيانات أو منظمة واحدة عبر المعرف (slug)
  • · بيانات وصفية للتوزيعات (الصيغة، الاسم) لكل مجموعة بيانات

غير متوفر بعد

  • · إنشاء أو تعديل البيانات عبر واجهة برمجة التطبيقات
  • · تنزيل ملفات التوزيعات عبر واجهة برمجة التطبيقات
  • · إنشاء مفاتيح API ذاتياً (قريباً)

البدء السريع

  1. 1

    أنشئ حساباً

    سجّل وأنشئ مساحة عملك — كل مفتاح API مرتبط بحساب مستخدم.

  2. 2

    أنشئ مفتاح API

    انتقل إلى صفحة مفاتيح API في لوحة التحكم لطلب الوصول. تُعرض المفاتيح مرة واحدة فقط عند الإنشاء — احتفظ بها في مكان آمن.

  3. 3

    أرسل أول طلب لك

    curl "https://api.opendatasystem.io/v1/datasets?limit=5" \
      -H "Authorization: Bearer <your_api_key>"
  4. 4

    اقرأ الاستجابة

    تحقق من حقل success، ثم اقرأ data، وفي حال القوائم، pagination.

المصادقة

تتم مصادقة كل طلب باستخدام رمز الحامل (bearer token) — مفتاح API الخاص بك — يُرسل ضمن ترويسة Authorization.

Authorization: Bearer <your_api_key>

المفاتيح مرتبطة بحسابك وترث الصلاحيات المحددة عند إنشائها (للقراءة فقط حالياً). تعامل مع المفتاح كما تتعامل مع كلمة المرور — أعد إصداره من لوحة التحكم إذا تعرض للانكشاف.

الرابط الأساسي

جميع نقاط النهاية نسبية إلى هذا الرابط الأساسي، مع ترقيم إصدار ضمن /v1:

https://api.opendatasystem.io/v1

صيغة الطلب

الطلبات هي HTTPS بسيطة مع معاملات في سلسلة الاستعلام — لا حاجة لجسم طلب (request body) لنقاط النهاية للقراءة أدناه.

الترويسة
Authorization
القيمة
Bearer <your_api_key>
الترويسة
Accept
القيمة
application/json

صيغة الاستجابة

كل استجابة هي كائن JSON يحتوي على علم success. تُعيد نقاط نهاية القوائم مصفوفة ضمن data بالإضافة إلى كائن pagination؛ أما الموارد المفردة فتُعيد data ككائن دون ترقيم صفحات.

استجابة قائمة

{
  "success": true,
  "data": [ /* … */ ],
  "pagination": {
    "currentPage": 1,
    "limit": 20,
    "totalItems": 128,
    "totalPages": 7,
    "next": 2,
    "prev": null
  }
}

ترقيم الصفحات

يتم ترقيم صفحات نقاط نهاية القوائم باستخدام معاملي page وlimit. الحجم الافتراضي للصفحة هو 20؛ والحد الأقصى هو 100.

GET https://api.opendatasystem.io/v1/datasets?page=2&limit=20

يكون next وprev في الاستجابة إما رقم الصفحة المجاورة أو null عند عدم وجودها.

استجابات الأخطاء

تستخدم الأخطاء نفس بنية الاستجابات الناجحة، مع success: false وmessage قابلة للقراءة.

{
  "success": false,
  "message": "Organization not found."
}
الحالة
401
المعنى
مفتاح API مفقود أو غير صالح
الحالة
404
المعنى
المورد غير موجود أو غير عام
الحالة
422
المعنى
معاملات استعلام غير صالحة
الحالة
429
المعنى
تم تجاوز حد معدل الطلبات لهذا المفتاح

حدود معدل الطلبات

يحمل كل مفتاح API حصته الخاصة من الطلبات كل ساعة — 1000 طلب/ساعة افتراضياً. الطلبات التي تتجاوز هذه الحصة تتلقى استجابة 429 حتى تُعاد النافذة الزمنية. يمكن تخصيص الحد لكل مفتاح من لوحة تحكم مفاتيح API.

نقاط نهاية مجموعات البيانات

تُعاد فقط مجموعات البيانات المنشورة (الحالة ACTIVE) والعامة (مستوى الظهور PUBLIC).

GET/datasets

عرض مجموعات البيانات العامة عبر جميع المنظمات.

معاملات الاستعلام

المعامل
search
النوع
string
الوصف
المطابقة مع العنوان والوصف.
المعامل
page
النوع
integer
الوصف
رقم الصفحة، الافتراضي 1.
المعامل
limit
النوع
integer
الوصف
عدد العناصر في الصفحة، الافتراضي 20، الحد الأقصى 100.

مثال على الاستجابة

{
  "success": true,
  "data": [
    {
      "id": 42,
      "title": "Global Temperature Trends 2024",
      "slug": "global-temperature-trends-2024",
      "description": "Monthly temperature anomalies …",
      "state": "ACTIVE",
      "visibility": "PUBLIC",
      "viewCount": 48312,
      "downloadCount": 9847,
      "updatedAt": "2026-05-15T00:00:00Z",
      "organization": {
        "name": "Open Climate Institute",
        "slug": "open-climate-institute"
      },
      "distributions": [
        { "format": "CSV" },
        { "format": "JSON" }
      ]
    }
  ],
  "pagination": {
    "currentPage": 1,
    "limit": 20,
    "totalItems": 1,
    "totalPages": 1,
    "next": null,
    "prev": null
  }
}
GET/datasets/{slug}

الحصول على مجموعة بيانات عامة واحدة عبر المعرف (slug).

مثال على الاستجابة

{
  "success": true,
  "data": {
    "id": 42,
    "title": "Global Temperature Trends 2024",
    "slug": "global-temperature-trends-2024",
    "description": "Monthly temperature anomalies …",
    "state": "ACTIVE",
    "visibility": "PUBLIC",
    "downloadCount": 9847,
    "organization": {
      "name": "Open Climate Institute",
      "slug": "open-climate-institute"
    },
    "distributions": [
      { "format": "CSV", "name": "temperature_anomalies.csv" }
    ]
  }
}

تُعاد التوزيعات متداخلة ضمن استجابة مجموعة البيانات، بعنصر واحد لكل ملف منشور (CSV، JSON، XML، XLSX). لا توجد بعد نقطة نهاية منفصلة للتوزيعات — تنزيل الملفات والاستعلام عن السجلات الفردية عبر واجهة برمجة التطبيقات مخطط له في إصدار مستقبلي.

نقاط نهاية المنظمات

GET/organizations

عرض المنظمات التي تنشر على المنصة.

معاملات الاستعلام

المعامل
search
النوع
string
الوصف
المطابقة مع الاسم والوصف.
المعامل
page
النوع
integer
الوصف
رقم الصفحة، الافتراضي 1.
المعامل
limit
النوع
integer
الوصف
عدد العناصر في الصفحة، الافتراضي 20، الحد الأقصى 100.

مثال على الاستجابة

{
  "success": true,
  "data": [
    {
      "id": 7,
      "name": "Open Climate Institute",
      "slug": "open-climate-institute",
      "description": "Non-profit research institute …",
      "state": "ACTIVE",
      "website": "https://openclimate.org",
      "datasetCount": 12,
      "memberCount": 4
    }
  ],
  "pagination": {
    "currentPage": 1,
    "limit": 20,
    "totalItems": 1,
    "totalPages": 1,
    "next": null,
    "prev": null
  }
}
GET/organizations/{slug}

الحصول على الملف العام لمنظمة واحدة.

مثال على الاستجابة

{
  "success": true,
  "data": {
    "id": 7,
    "name": "Open Climate Institute",
    "slug": "open-climate-institute",
    "description": "Non-profit research institute …",
    "website": "https://openclimate.org",
    "email": "contact@openclimate.org",
    "state": "ACTIVE",
    "datasetCount": 12,
    "memberCount": 4,
    "followerCount": 231,
    "metadata": { "region": "Global", "founded": "2010" }
  }
}

إدارة مفاتيح API

تُنشأ المفاتيح وتُدار من لوحة التحكم الخاصة بك، وليس عبر واجهة برمجة التطبيقات نفسها. لكل مفتاح اسم، وحد لمعدل الطلبات، وتاريخ انتهاء اختياري، وأعلام صلاحيات للقراءة/الكتابة (الوصول العام حالياً للقراءة فقط).

بنية مورد المفتاح

{
  "id": 12,
  "name": "Production integration",
  "keyPreview": "a1b2c3d4",
  "permissions": { "read": true, "write": false },
  "rateLimitPerHour": 1000,
  "lastUsedAt": "2026-06-28T10:15:00Z",
  "expiresAt": null,
  "createdAt": "2026-01-04T09:00:00Z"
}

تُعرض قيمة المفتاح الكاملة مرة واحدة فقط عند الإنشاء — احتفظ بها في مكان آمن. تُعرض بعد ذلك معاينة قصيرة فقط.

أفضل الممارسات

  • تحقق دائماً من حقل success قبل قراءة data — لا تفترض أن الاستجابة ناجحة دائماً.
  • استخدم التصفية عبر search والترقيم بدلاً من سحب قوائم كبيرة غير مصفاة.
  • خزّن الاستجابات مؤقتاً حيثما كان ذلك منطقياً — مجموعات البيانات والمنظمات المنشورة لا تتغير كل ثانية.
  • تعامل مع استجابات 429 عبر إعادة المحاولة التدريجية (backoff) واحترم الحد الساعي لمفتاحك.
  • لا تكشف مفتاح API الخاص بك أبداً في كود جانب العميل، أو السجلات، أو المستودعات العامة.
  • واجهة برمجة التطبيقات هذه في مرحلة معاينة — قد تتغير نقاط النهاية قبل الإصدار المستقر.