Developer Platform · Production API · Read-only

منصة روافد للمطورين

واجهة عامة ومؤسسية قابلة للتكامل للوصول المنظم إلى المعرفة المنشورة، سجل المصادر، البحث، المزامنة، والخدمات البحثية. العقد الحالي هو Rawafid Public & Partner API v1.2.0 على مسار إنتاج ثابت.

API v1.2.0 · StableRead-only · Published-onlyOpenAPI 3.1 · JSON Schema 2020-12ETag · 304 · CORS · Request IDs

Production base URL: https://healthrenewal.org/api/v1

Machine-readable contract: https://healthrenewal.org/api/openapi.json

English developer documentation →

Quickstart

ابدأ خلال أقل من دقيقة

لا يحتاج المسار العام إلى مفتاح

جميع الأمثلة التالية هي طلبات قراءة. لا ترسل بيانات حساسة في query string، ولا تضع مفاتيح الشركاء في كود عميل عام أو تطبيق متصفح يمكن فحصه.

1. اكتشف العقد

curl -sS \
  'https://healthrenewal.org/api/v1'

2. اقرأ أحدث المحتوى

curl -sS \
  'https://healthrenewal.org/api/v1/content?limit=5'

3. ابحث

curl -sS \
  'https://healthrenewal.org/api/v1/search?q=autism&limit=5'

4. اكتشف أدلة بحثية

curl -sS \
  'https://healthrenewal.org/api/v1/evidence-discovery?q=autism&providers=europe_pmc,crossref,datacite&limit=5'

مثال JavaScript

const response = await fetch(
  'https://healthrenewal.org/api/v1/content?limit=5',
  { headers: { Accept: 'application/json' } }
);
if (!response.ok) throw new Error(`Rawafid API: ${response.status}`);
const payload = await response.json();
console.log(payload.data, payload.pagination);
Contract

العقد الرسمي، الإصدار وحدود الاستقرار

v1.2.0

إصدار API

/api/v1 هو المسار المستقر الحالي، والإصدار الدلالي داخل الاستجابات والعقد هو 1.2.0. لا تُعرض المسودات ولا المواد غير القابلة للفهرسة في واجهة المحتوى العامة.

OpenAPI

العقد الآلي منشور بصيغة OpenAPI 3.1.0 مع JSON Schema 2020-12. الاحتفاظ بسلسلة 3.1 هنا قرار توافق tooling، وليس ادعاء بأنها أحدث نسخة منشورة من مواصفة OpenAPI.

فتح OpenAPI JSON ↗

تغييرات Breaking

العقد العام يعامل v1 كواجهة مستقرة. أي تغيير يكسر أسماء الحقول أو دلالتها أو سلوك pagination يجب ألا يُدفع بصمت داخل التكاملات القائمة؛ التغييرات الإضافية غير الكاسرة يمكن أن تظهر داخل v1.

لا SDK إلزامي

لا تحتاج إلى SDK خاص. HTTP + JSON + OpenAPI هي نقطة التكامل الرسمية، ويمكن توليد عميل باستخدام tooling متوافق مع OpenAPI عند الحاجة.

Endpoint map

خريطة النقاط النهائية

GET · HEAD/OPTIONS حيث ينطبق
GET

Discovery

/api/v1

وصف آلي للإصدار، الموارد، OpenAPI والخلاصات.

GET

Content

/api/v1/content

قائمة المحتوى العام المنشور والقابل للفهرسة مع Cursor Pagination.

GET

Content detail

/api/v1/content/{slug}

تفاصيل مادة واحدة، بما فيها النص والمراجع وملف الحقوق.

GET

Content sources

/api/v1/content/{slug}/sources

المصادر المطبّعة المرتبطة بمادة عامة.

GET

Search

/api/v1/search

بحث مرتب في المحتوى العام، مع حد أعلى مختلف للمجهول والشريك.

GET

Source registry

/api/v1/sources

سجل المصادر العام مع publisher/type/q وOffset Pagination.

GET

Source detail

/api/v1/sources/{id}

المعرفات والعلاقات وORCID/ROR والحقوق وإثبات منشأ الترجمة.

GET

Evidence discovery

/api/v1/evidence-discovery

Europe PMC وCrossref وDataCite افتراضيًا؛ Lens اختيار صريح.

GET

Lens manifest

/api/v1/lens

عقد آلي لحالة تكامل Lens والحصص والإسناد والخصوصية.

GET

Change stream

/api/v1/changes

مزامنة تفاضلية lossless باستخدام since ثم composite cursor.

GET

Statistics

/api/v1/stats

إحصاءات عامة لكتالوج API.

GET

Named collections

/api/v1/{resource}

articles، guides، research، conditions، tools وغيرها.

المجموعات المسماة تشمل: articles، guides، research، conditions، comparisons، tools، courses، learning-paths، resources، protocols، interventions، assessments، glossary، pages، sectors، categories وtags.

Public + Partner

المصادقة، النطاقات والحصص

القراءة العامة لا تتطلب مفتاحًا. عند وجود تكامل مؤسسي يمكن إرسال مفتاح اختياري عبر X-API-Key أو Authorization: Bearer …. المفتاح يظهر مرة واحدة عند الإصدار، ولا يخزن في قاعدة البيانات بنصه الخام؛ يخزن SHA-256 فقط.

content:read

قراءة المحتوى والمجموعات العامة.

sources:read

قراءة سجل المصادر والتفاصيل.

search:read

البحث واكتشاف الأدلة.

changes:read

مزامنة التغييرات.

stats:read

قراءة الإحصاءات العامة.

مثال طلب شريك من الخادم

curl -sS \
  -H 'X-API-Key: rawafid_live_REDACTED' \
  'https://healthrenewal.org/api/v1/content?limit=25'

الحصة الافتراضية للشريك الجديد في البنية الحالية هي 120 طلبًا/دقيقة و25,000 طلب/يوم، لكنها قابلة للتخصيص لكل شريك. اعتبر رؤوس الاستجابة هي المصدر التشغيلي النهائي: X-RateLimit-Minute-Limit، X-RateLimit-Minute-Remaining، X-RateLimit-Day-Limit، X-RateLimit-Day-Remaining. عند التجاوز يعود 429 وRetry-After.

قاعدة أمنية: مفتاح Partner API سر مؤسسي؛ لا تضعه في JavaScript عام، تطبيق ويب مكشوف، مستودع، سجل analytics أو URL.

Pagination & synchronization

أنواع pagination والمزامنة

لا يوجد أسلوب واحد لكل الموارد

المحتوى والمجموعات

استخدم pagination.next_cursor. المؤشر opaque ومركب من ترتيب النشر والمعرف؛ لا تحاول تحليله أو إنشاؤه بنفسك.

سجل المصادر

/sources يستخدم limit + offset ويعيد next_offset. لا تخلط هذا النموذج مع cursor الخاص بالمحتوى.

Change stream

ابدأ بـsince=ISO_DATE. إذا كان has_more=true احتفظ بقيمة since نفسها ومرر next_cursor في الصفحة التالية. المؤشر مركب من occurred_at + id حتى لا تضيع أحداث تتشارك التوقيت نفسه.

اكتشاف الأدلة

لكل مزود cursor مستقل: europe_pmc_cursor وcrossref_cursor وdatacite_cursor. الاسم cursor محفوظ فقط كـalias قديم لـEurope PMC.

# First change-stream page
curl -sS 'https://healthrenewal.org/api/v1/changes?since=2026-09-01T00:00:00Z&limit=100'

# Subsequent page: keep since and pass the opaque next_cursor
curl -sS 'https://healthrenewal.org/api/v1/changes?since=2026-09-01T00:00:00Z&limit=100&cursor=NEXT_CURSOR'
Data model

نموذج المحتوى وسجل المصادر

GET /api/v1/content يعرض فقط المحتوى الذي حالته published وقابل للفهرسة ووقت نشره قد حل. تفاصيل المادة تضيف النص المنظم/النصي، المراجع وملف الحقوق.

GET /api/v1/sources و/sources/{id} يوفران سجلًا عامًا للمصادر المستخدمة في مواد منشورة. التفاصيل قد تشمل related_identifiers، contributors مع ORCID، انتماءات مؤسسية مع ROR، الإصدارات، مواضع الاستشهاد، rights_profiles وtranslations.

العلاقات من روافد إلى المصدر يمكن تمثيلها آليًا بعلاقة DataCite-compatible مثل IsReferencedBy نحو الصفحة القانونية المنشورة، مع عدم اختلاق ORCID/ROR عند غياب تحقق موثوق.

Scholarly discovery

اكتشاف الأدلة: Europe PMC + Crossref + DataCite + Lens

GET /api/v1/evidence-discovery?q=... يستخدم افتراضيًا europe_pmc,crossref,datacite. فشل مزود واحد يُعزل ويظهر في حالة المزود بدل إسقاط بقية النتائج.

النتائج المطبّعة قد تتضمن العنوان، الملخص عند توفره، السنة، المجلة/الناشر، المؤلفين، DOI وPMID وPMCID وLens/OpenAlex عند توفرها، حالة الوصول المفتوح/السحب، الاستشهادات، وprovenance. DataCite creators/contributors وnameIdentifiers وrelatedIdentifiers تُقرأ عندما يقدمها السجل. ORCID وROR لا يُنشآن تخمينيًا.

Lens هو opt-in فقط

لا يدخل Lens في المجموعة الافتراضية. لاستخدامه أرسل providers=lens أو أضفه صراحة إلى المزودات. الاعتماد LENS_SCHOLARLY_API_TOKEN يبقى server-side.

الحصة التشغيلية المطبقة على Lens هي 10 طلبات/دقيقة و20,000 طلب/شهر مع fail-closed guard مشترك بين الخوادم. كل سجل Lens يحتفظ بـLens ID ورابط السجل الأصلي، وعند عرضه يجب إظهار Data Sourced from The Lens وفق سياسة الإسناد.

التوثيق التفصيلي لتكامل Lens → · Machine-readable Lens manifest ↗

HTTP semantics

Caching، CORS والطلبات الشرطية

Conditional GET

استجابات JSON العامة تنتج ETag، وبعض المسارات تضيف Last-Modified. استخدم If-None-Match أو If-Modified-Since لتحصل على 304 Not Modified عندما لا تتغير التمثيلات.

Request correlation

كل استجابة API تحمل X-Request-Id. احتفظ به عند الإبلاغ عن خطأ تشغيلي حتى يمكن ربط المشكلة بطلب محدد.

CORS

واجهة API تسمح GET, HEAD, OPTIONS عبر CORS، وتقبل Authorization وX-API-Key. استخدام مفتاح مؤسسي من متصفح عام غير موصى به لأن المفتاح سر.

Security headers

الاستجابات تضيف X-Content-Type-Options: nosniff وReferrer-Policy: no-referrer. بيانات API نفسها تحمل X-Robots-Tag: noindex, nofollow لأنها واجهة آلة وليست صفحة بحث، بينما صفحة التوثيق هذه قابلة للفهرسة.

مثال ETag

ETAG=$(curl -sSI 'https://healthrenewal.org/api/v1/content?limit=5' | awk -F': ' 'tolower($1)=="etag" {print $2}' | tr -d '\r')
curl -i -H "If-None-Match: $ETAG" 'https://healthrenewal.org/api/v1/content?limit=5'
Error contract

نموذج الأخطاء والحالات المتوقعة

الأخطاء تعود JSON مع error.code وerror.message وerror.request_id، وقد يظهر error.parameter لخطأ معلمة محددة.

400

معلمة، تاريخ أو cursor غير صالح.

401

مفتاح شريك غير صالح/منتهي/ملغى عند إرساله.

403

المفتاح صالح لكن لا يملك scope المطلوب.

404

المورد العام المطلوب غير موجود.

429

تجاوز حصة الشريك؛ راقب Retry-After.

503

خدمة داخلية أو مزود مطلوب غير متاح مؤقتًا. لا تحول 503 إلى نتيجة فارغة ناجحة.

{
  "error": {
    "code": "invalid_parameter",
    "message": "...",
    "parameter": "q",
    "request_id": "..."
  },
  "meta": { "api_version": "1.2.0" }
}
Rights & provenance

الحقوق، إعادة الاستخدام وProvenance الترجمة

الوضع المحافظ الافتراضي للمحتوى هو link_and_citation_only ما لم توجد رخصة صريحة تسمح بأكثر. وجود record في API أو availability للـmetadata لا يمنح تلقائيًا حق إعادة نشر الملخص أو النص الكامل أو الصور أو مجموعة بيانات المزود.

rights_profiles تفصل بين إتاحة metadata وحق إعادة استخدامها وبين إتاحة المحتوى وحق إعادة استخدامه. القيمة unknown تعني أن الإذن غير مثبت، لا أنها موافقة.

translations يمكن أن يسجل الحقل المترجم، لغة المصدر والهدف، طريقة الترجمة، الأداة/الإصدار عند الاستخدام الآلي، هوية المترجم والمراجع وORCID/ROR عند توفر تحقق، وحالة المراجعة. الترجمة المحلية لا تُعرض كأنها metadata أصلية بلا provenance.

Feeds

RSS وJSON Feed

الخلاصات تدعم validators وطلبات 304. إذا تعذر الوصول إلى كتالوج المحتوى الأساسي فإنها تعيد 503 مع Retry-After بدل نشر خلاصة فارغة تبدو سليمة.

Operational contract

ضوابط تشغيلية وأمنية

Published-only

واجهة المحتوى العامة لا تعيد مسودات أو مواد خارج نافذة النشر أو مواد robots_index=false.

Read-only

هذه الوثائق لا تعرض API عامة للكتابة في المحتوى. عمليات الإدارة منفصلة عن العقد العام.

Provider isolation

اكتشاف الأدلة يعزل أعطال المزودات ويعيد حالة كل مزود، مع عدم جعل Lens مزودًا افتراضيًا.

Secret boundaries

اعتمادات المزودات الخارجية ومفاتيح Partner API لا تُعرض في الاستجابات العامة أو المستودع. مفاتيح الشركاء تتحقق من digest مخزن وليس من plaintext.

FAQ

أسئلة تكامل متكررة

هل أحتاج مفتاح API للبدء؟

لا. ابدأ بالواجهة العامة. المفتاح المؤسسي اختياري ويستخدم عندما نحتاج تعريف الشريك، scopes وحصصًا مضبوطة.

هل يمكنني سحب المكتبة كلها عبر البحث؟

لا يُنصح بتحويل endpoint البحث إلى bulk crawler. استخدم pagination للمحتوى، change stream للمزامنة التفاضلية، والخلاصات أو واجهات الحصاد المناسبة للمهمة.

هل next_since كافٍ للمزامنة متعددة الصفحات؟

استخدم next_cursor طالما has_more=true. next_since موجود للتوافق كـtimestamp checkpoint ولا يحل محل المؤشر المركب عند وجود صفحات لاحقة.

هل API تعني أن كل البيانات قابلة لإعادة التوزيع؟

لا. افحص ملف الحقوق ورخصة المصدر وشروط المزود. الإتاحة التقنية ليست ترخيصًا.

أين أجد العقد الآلي؟

https://healthrenewal.org/api/openapi.json. ويمكن بدء الاكتشاف من https://healthrenewal.org/api/v1.

Institutional integration

التكامل المؤسسي والدعم

لطلب Partner API، نطاقات مختلفة، مراجعة interoperability أو الإبلاغ عن مشكلة مع X-Request-Id، تواصل عبر contact@healthrenewal.org.

عند الإبلاغ عن مشكلة: أرسل المسار، وقت الطلب، حالة HTTP، وX-Request-Id. لا ترسل مفتاح API كاملًا بالبريد.