PRODمنصة BaaS الأوروبية السياديةافتح لوحة المعلومات →

الهندسة · 9 دقيقة للقراءة

توافق PostgREST: ما يغطيه والبدائل

Affane Daylami · Fondateur · 3 أغسطس 2026

العودة إلى بلوق

يقوم PostgREST بتحويل مخطط PostgreSQL إلى REST API بدون واجهة خلفية للكتابة. إنها استجابة واضحة لحاجة محددة، وليست واجهة خلفية كاملة. يفسر الخلط بين الاثنين غالبية خيبات الأمل التي نقرأها في التعليقات عبر الإنترنت.

تم إنشاء هذا النص الإنجليزي تلقائيًا من النص الأصلي الفرنسي ولم تتم مراجعته بعد.
تمت ترجمة هذه الصفحة تلقائيًا. النسخة الإنجليزية موثوقة.

توضح هذه المقالة بالتفصيل ما يغطيه PostgREST فعليًا، وما يتركه لك، وتقارن البدائل الجادة - وصولاً إلى ما تغطيه Aurabase فعليًا داخليًا، ويتم التحقق منه في التعليمات البرمجية الخاصة به بدلاً من افتراضه.

الأساسيات

  • يقوم PostgREST بإنشاء REST API من مخطط Postgres: المرشحات، وتضمين العلاقات، واستدعاءات RPC، وRLS المستندة إلى JWT، ومواصفات OpenAPI - بدون سطر من التعليمات البرمجية الخلفية.
  • ما لا يفعله محليًا: إصدار JWTs، أو تخزين الملفات، أو الدفع في الوقت الفعلي، أو توفير مجمع اتصال مع تبديل الأدوار المتكامل.
  • في Aurabase، يعمل مشروع محرك Postgres على نسخة PostgREST v12.2.8 مخصصة حقيقية - وليس إعادة تنفيذ. يمر مشروع محرك MongoDB عبر طبقة REST خاصة بـ Aurabase، مستوحاة من نفس الاتفاقيات ولكن بحدود مختلفة.
  • تتراوح البدائل من PostgREST المستضافة ذاتيًا (كل شيء سيتم تجميعه حوله) إلى الواجهة الخلفية الكاملة (Supabase، Aurabase)، عبر واجهات برمجة تطبيقات GraphQL مثل Hasura أو PostGraphile.
#
التعريف

ما هو PostgREST بالضبط؟

PostgREST هو خادم ويب مستقل يقوم بتحويل قاعدة بيانات PostgreSQL موجودة إلى REST API، مباشرة من مخططها. لا توجد طبقة تطبيق للكتابة: تصبح الجداول وطرق العرض والوظائف مسارات، وتصبح أذونات SQL - الأدوار وسياسات RLS - طبقة التفويض.

بشكل ملموس، يغطي PostgREST خمس إمكانيات تظهر في جميع التقييمات تقريبًا:

  • التصفية الأفقية — حوالي ثلاثين عامل تشغيل (eq, gt, like, ilike, in, is, cs, ov, fts...) مباشرة في سلسلة الاستعلام.
  • التصفية العمودية والتضمين — ?select= تعرض الأعمدة وتضمين العلاقات عبر المفتاح الخارجي، على سبيل المثال customer:customers(email).
  • RPC — يستدعي POST /rpc/{fonction} مباشرة وظيفة SQL، والتي تصبح نقطة نهاية.
  • RLS مدفوعة بـ JWT - يقوم PostgREST بتبديل دور Postgres النشط وفقًا للرمز المميز المستلم (SET LOCAL ROLE)، بحيث يتم تطبيق سياساتك كما هي، بدون منطق تفويض مكرر من جانب التطبيق.
  • واجهة OpenAPI ذاتية الإنشاء — يتم استخلاص المواصفات من المخطط المكشوف، بدون ملف للمحافظة عليه يدويًا.
استعلام PostgREST النموذجيbash
curl "https://<gateway>/v1/db/<project_id>/orders \
  ?select=id,total,customer:customers(email) \
  &status=eq.paid \
  &order=created_at.desc" \
  -H "apikey: <votre-cle-api>"

يقوم طلب HTTP واحد بتصفية الطلبات المدفوعة، وتضمين البريد الإلكتروني للعميل عبر مفتاح خارجي، والفرز حسب التاريخ - دون الحاجة إلى كتابة مسار واحد يدويًا.

يتبع RPC نفس المنطق: تصبح وظيفة SQL المكتوبة بالفعل في قاعدة البيانات الخاصة بك نقطة نهاية POST، مع تمرير وسيطاتها في JSON.

استدعاء RPCbash
curl -X POST "https://<gateway>/v1/db/<project_id>/rpc/monthly_revenue" \
  -H "apikey: <votre-cle-api>" \
  -H "Content-Type: application/json" \
  -d '{"year": 2026, "month": 8}'

هذا المبدأ — مخطط Postgres هو المصدر الوحيد للحقيقة لواجهة برمجة التطبيقات — هو ما يجعل PostgREST قابلاً للتنبؤ به: كل تغيير في السلوك يمر عبر ترحيل SQL، وليس عبر طبقة تطبيق منفصلة يمكن اشتقاقها من المخطط الفعلي. المشروع مفتوح المصدر، وتم تطويره على GitHub، بشكل مستقل عن أي مزود BaaS معين.

#
حدود

ما لا يفعله PostgREST

يقوم PostgREST بحل طبقة CRUD. ولا يحل بقية الواجهة الخلفية للتطبيق. تحدث أربعة عيوب بشكل منهجي بين الفرق التي تعتمده بمفردها.

  • المصادقة — لا يوجد إصدار JWT أو إدارة متكاملة للمستخدم. يجب عليك إنشائه في SQL أو تفويضه إلى خدمة خارجية.
  • تخزين الملفات - لا شيء. يبقى أن يتم توصيل حاوية S3 أو ما يعادلها بشكل منفصل.
  • الوقت الفعلي — يستجيب PostgREST لطلبات HTTP لمرة واحدة، ولا يدفع أي أحداث.
  • مجمع الاتصال — يتصل PostgREST نفسه بـ Postgres، لكنه لا يدمج أي مجمعات متقدمة. على نطاق واسع، تصبح إدارتها قرارًا تشغيليًا في حد ذاتها: يتعارض المجمع في وضع المعاملة الكلاسيكية مع آلية إعادة تحميل مخطط PostgREST (انظر أدناه كيف تحل Aurabase هذا الحل الوسط).
معلومات

لا يعد أي من أوجه القصور هذه عيبًا في التصميم: يقوم PostgREST بمهمة محددة (المخطط → REST API)، طوعًا. وهذا المحيط الضيق هو الذي يجعل سلوكه قابلاً للتنبؤ به.

تستحق النتيجة العملية أن يتم ذكرها بوضوح: بدون المصادقة، تصبح سياسات RLS الخاصة بك هي الحدود الأمنية الوحيدة بين العميل المجهول وبياناتك. السياسة المكتوبة بشكل سيئ على الدور anon لا يتم تجاوزها بواسطة طبقة تطبيق إضافية - لا يوجد شيء.

#
تم التحقق من الكود

PostgREST في Aurabase: ما يتم تغطيته حقًا

في مشروع محرك Aurabase Postgres - المحرك الافتراضي - تقوم البوابة بتوجيه كل طلب CRUD مباشرة إلى مثيل PostgREST v12.2.8 المخصص لهذا المشروع، نسختين متماثلتين، في موقع مشترك مع مجموعة Postgres الخاصة بالمستأجر. هذا ليس توافقًا تقريبيًا: إنه ثنائي PostgREST نفسه، مع نفس المشغلين، ونفس التضمين، ونفس RPC، ونفس RLS الذي يحركه JWT.

في مشروع محرك MongoDB، القصة مختلفة. ليس لدى MongoDB ما يعادل PostgREST: يتم توجيه هذه الطلبات إلى خدمة Aurabase داخلية، والتي تعيد تنفيذ مجموعة فرعية من نفس الاصطلاحات - أسماء مشغلين متطابقة، وبناء جملة ?select= مع التضمين، ورؤوس Prefer وContent-Range - ولكن على محرك مستند، وليس محركًا علائقيًا. هذه الطبقة لها حدودها الخاصة: يتم رفض التضمين المطلوب في التمثيل الذي يتم إرجاعه بواسطة طفرة بشكل صريح بدلاً من تجاهله بصمت، ولا يوجد مسار RPC مكافئ لوظائف SQL.

التمييز مهم عند الاختيار

يعد التوافق الكامل مع PostgREST - بما في ذلك RPC وRLS - حقيقة لمحرك Postgres، وليس ضمانًا عبر المحركات. إذا كان مشروعك يعتمد على وظائف SQL المكشوفة في RPC، فإن محرك Postgres هو الخيار الوحيد اعتبارًا من اليوم.

تتناقض التفاصيل الفنية مع الحدس: تظل كل نسخة PostgREST مخصصة متصلة مباشرة بـ Postgres الأساسي، دون المرور عبر مجمع PgBouncer المنشور لهذا المستأجر. السبب المفترض: قد يؤدي وضع تجميع المعاملات إلى تعطيل إعادة تحميل مخطط PostgREST، الذي يعتمد على LISTEN/NOTIFY - اتصال مستمر، غير متوافق مع التجمع الذي يعيد تدوير الاتصال لكل معاملة.

تفصيل آخر مفيد في الإنتاج: يمكن إيقاف المشروع غير النشط مؤقتًا لتوفير الموارد. يؤدي الطلب الأول في مشروع نائم إلى تنبيهه ويتلقى 503 مع تأخير إعادة المحاولة، وهو الوقت المناسب لمثيل PostgREST المخصص للعودة - وهو حل وسط مفترض بين التكلفة وزمن الوصول البارد، وليس حادثًا مخفيًا.

#
مقارنة

ما هي البدائل لـ PostgREST الموجودة؟

PostgREST له استخدام واضح: مخطط Postgres هو مصدر الحقيقة، ويريد الفريق تجنب كتابة طبقة CRUD يدويًا. وبصرف النظر عن هذه الحالة المحددة، توجد العديد من مجموعات البدائل اعتمادًا على ما تريد إضافته - بدءًا من لا شيء على الإطلاق (الاستضافة الذاتية فقط) إلى الواجهة الخلفية الكاملة الجاهزة للاستخدام.

يقارن الجدول أدناه ما يغطيه كل خيار محليًا وما يتركه لك بشكل صريح - دون الحكم على القيمة على البنية التي اختارها كل مشروع.

PostgREST مستضافة ذاتيًاواجهة برمجة تطبيقات REST ذاتية الإنشاء (المرشحات، والتضمين، وRPC، وRLS).المصادقة، والتخزين، والوقت الفعلي، وواجهة المستخدم الإدارية - كل شيء يمكن تجميعه معًا.
سوباباسPostgREST + auth (GoTrue)، والتخزين، والوقت الحقيقي، ووظائف الحافة.مكدس غير متجانس (Elixir/Go/TS/Node) يتم تجميعه حسب الخدمة.
هاسورا / بوست جرافيلواجهة برمجة تطبيقات GraphQL التي تم إنشاؤها تلقائيًا من Postgres.نهج GraphQL، وليس REST - مقارنة مخصصة أدناه.
مباشرواجهة المستخدم الإدارية + واجهة برمجة تطبيقات REST/GraphQL العامة ونظام إدارة قواعد البيانات المتعددة.مصمم لإدارة البيانات/CMS، وليس واجهة خلفية كاملة للتطبيق.
إطار عمل مصنوع يدويًا (Express، FastAPI، Rails...)السيطرة الكاملة على كل طريق.CRUD، والتحقق من الصحة، والمصادقة، والتجميع - كلها مكتوبة بخط اليد.
أوراباسيReal PostgREST مخصص لكل مشروع Postgres + المصادقة والتخزين والوقت الفعلي ووظائف الحافة والذكاء الاصطناعي المدمج بالفعل.في محرك MongoDB، تمت إعادة بناء طبقة REST بواسطة Aurabase — وليس PostgREST نفسها.

هناك نقطة غالبًا ما يتم الاستهانة بها عند اختيار "الاستضافة الذاتية": يظل PostgREST نفسه خفيفًا للتشغيل، ولكن عملية الإنتاج (تحديث الإصدار، والتوفر العالي، والارتباط مع المجمع، والمراقبة) تظل مسؤوليتك بالكامل - إن هذه العملية، وليس البرنامج، هي التي تمتصها الأنظمة الأساسية المُدارة.

للحصول على مقارنة تفصيلية بين أساليب GraphQL - pg_graphql وHasura وPostGraphile - راجع مقالتنا المخصصة لواجهة برمجة تطبيقات GraphQL على Postgres.

#
القرار

كيفية الاختيار

أربع حالات تظهر في أغلب الأحيان. يعتمد الاختيار الصحيح بشكل أساسي على ما ترغب في تجميعه وصيانته بنفسك.

  • أنت فقط تريد واجهة برمجة تطبيقات REST بدلاً من مخطط Postgres الحالي، ولا شيء آخر. يعد PostgREST المستضاف ذاتيًا كافيًا: فهو يفعل بالضبط ما يفعله، ولا يلزم تثبيت أي شيء آخر.
  • أنت بحاجة إلى مصادقة إضافية وتخزين ووقت حقيقي، وأنت جاهز لتجميع العديد من الخدمات. يلبي Supabase أو PostgREST المصحوب بمكدس التطبيقات الخاص بك هذه الحاجة.
  • أنت تفضل GraphQL على REST. يغطي Hasura أو PostGraphile هذه الأرضية - وهو خيار معماري مختلف، وليس بديلاً مباشرًا لـ PostgREST.
  • أنت تريد واجهة Postgres خلفية كاملة دون تجميع عدة خدمات منفصلة معًا. هذه هي الزاوية التي مستندات الموحدة لبنية الصدأ: PostgREST الحقيقي لطبقة CRUD، محاطة أصلاً بوظائف المصادقة والتخزين والوقت الفعلي والحافة.
#
الأسئلة المتداولة

الأسئلة الشائعة

ما هو PostgREST؟+
PostgREST هو خادم ويب مفتوح المصدر يقوم بتحويل قاعدة بيانات PostgreSQL موجودة إلى REST API، مباشرة من مخططها: تصبح الجداول وطرق العرض والوظائف مسارات، بدون واجهة خلفية للكتابة.
هل يمكن لـ PostgREST استبدال الواجهة الخلفية الكاملة؟+
لا، يغطي PostgREST طبقة CRUD (المرشحات، والتضمين، وRPC، وRLS) ولكن ليس انبعاث JWT، أو تخزين الملفات، أو الوقت الفعلي. تتطلب الواجهة الخلفية الكاملة تجميع هذه الطوب بنفسك، أو اعتماد منصة تدمجها بالفعل.
هل Aurabase 100% متوافق مع PostgREST؟+
في مشروع محرك Postgres، نعم: يقوم Aurabase بتوجيه إلى مثيل PostgREST الفعلي، وليس إعادة التنفيذ. في مشروع محرك MongoDB، لا: طبقة REST هي مجموعة فرعية من اتفاقيات PostgREST التي أعيد بناؤها بواسطة Aurabase على محرك المستندات، بحدود مختلفة (لا يوجد RPC، تم رفض التضمين عند الطفرات).
كيفية الحصول على REST API التلقائي على Postgres دون كتابة الواجهة الخلفية؟+
هناك خياران رئيسيان: تثبيت PostgREST بنفسك أمام قاعدة البيانات الخاصة بك (يقرأ الرسم التخطيطي ويكشف المسارات)، أو استخدام منصة تدمجها بالفعل - Supabase أو Aurabase، على سبيل المثال - لتجنب استغلال المثيل بالإضافة إلى استخدامه.

هل أنت جاهز للنشر؟

الواجهة الخلفية الخاصة بك في خمس دقائق.

لا حاجة لبطاقة ائتمان · 500 ميجابايت مجانًا · 50000 MAU