UGLYPEAR AI تُكمل ترقية أعمالها: ضغط المستندات عالي الأداء × أساس هندسة بيانات RAGتعرّف على الأعمال الجديدة →

تطبيق عملي لواجهة برمجة الضغط (API): شرح مفصّل لوثائق واجهة RESTful

خلاصة سريعة: يوفّر SmartSlim Server من UGLYPEAR DATA واجهة RESTful API تضم أربع واجهات رئيسية: الرفع والضغط، الضغط الدفعي، الاستعلام عن الحالة، والإشعارات بالاستدعاء (Callback). تدعم طريقتَي مصادقة: API Key وBearer Token. يستغرق ضغط ملف PDF واحد بحجم 100 ميجابايت نحو 8 ثوانٍ، وضغط دفعة من 100 ملف نحو 12 ثانية. الحد الافتراضي للطلبات هو 60 طلبًا في الدقيقة، ويمكن رفعه إلى 300 في الإصدار المؤسسي. تعرض هذه المقالة جداول معمّلة لمعاملات الواجهات الأربع، وأمثلة استدعاء بـ Python/JavaScript/curl، وحلول معالجة الأخطاء. سنبدأ بنظرة عامة على الواجهة، ثم نشرح كل واجهة بالتفصيل.

إذا كنت تحتاج إلى تكامل محلي عبر SDK بدلاً من استدعاء HTTP، يُنصح أولاً بقراءة دليل تكامل SDK للضغط: استدعاء بعدة لغات Python/Java/C#.

أولًا: نظرة عامة على واجهات API

طُوّرت واجهة RESTful API لخادم SmartSlim Server باستخدام إطار FastAPI. جميع الواجهات تُعيد البيانات بصيغة JSON، وتدعم رفع الملفات عبر multipart/form-data. المسار الأساسي للواجهة هو /api/v1/، ويجب أن يحمل كل طلب معلومات المصادقة.

الواجهةالطريقةالمسارالوظيفةمتزامن/غير متزامن
الرفع والضغطPOST/api/v1/compressرفع ملف واحد وضغطهمتزامن (أقل من 50 ميجابايت) / غير متزامن
الضغط الدفعيPOST/api/v1/compress/batchرفع عدة ملفات وضغطها دفعة واحدةغير متزامن
الاستعلام عن الحالةGET/api/v1/status/{task_id}الاستعلام عن حالة مهمة الضغطمتزامن
الإشعار بالاستدعاءPOSTعنوان URL للاستدعاء على العميلإشعار فوري عند اكتمال الضغطدفع غير متزامن

طريقتا المصادقة: مصادقة API Key مناسبة لاستدعاءات الخادم، ومصادقة Bearer Token مناسبة لاستدعاءات الواجهة الأمامية. يقارن الجدول التالي بين خصائص الطريقتين.

طريقة المصادقةترويسة الطلبصلاحية المفتاحسيناريو الاستخدامالأمان
API KeyX-API-Key: your-keyدائمة (قابلة للإلغاء)استدعاء من جانب الخادممتوسط (يتطلب HTTPS)
Bearer TokenAuthorization: Bearer token24 ساعةاستدعاء من الواجهة الأماميةعالٍ (صلاحية قصيرة)

ثانيًا: شرح مفصّل لمعاملات كل واجهة

1. واجهة الرفع والضغط

تستقبل واجهة الرفع والضغط ملفًا واحدًا وتُعيد نتيجة الضغط. الملفات التي يقل حجمها عن 50 ميجابايت تُعيد رابط التنزيل فورًا بشكل متزامن، أما الملفات الأكبر من 50 ميجابايت فتُعيد معرّف المهمة بشكل غير متزامن.

المعاملالنوعإلزاميالقيمة الافتراضيةالوصف
filemultipart/fileنعم-الملف المراد ضغطه
formatstringلاكشف تلقائينوع الملف (pdf/image/ofd)
levelstringلاmediumمستوى الضغط (low/medium/high/ultra)
qualityintegerلا75عامل الجودة (1-100)
callback_urlstringلا-عنوان URL للإشعار غير المتزامن

2. واجهة الضغط الدفعي

تستقبل واجهة الضغط الدفعي عدة ملفات وتُعالجها بشكل غير متزامن، وتُعيد معرّف المهمة الدفعية. تدعم تحديد عدد العمليات المتزامنة، ويخضع الحد الأقصى للتزامن لقيود الترخيص.

المعاملالنوعإلزاميالقيمة الافتراضيةالوصف
filesmultipart/file[]نعم-قائمة الملفات المراد ضغطها (بحد أقصى 100 ملف)
levelstringلاmediumمستوى الضغط
qualityintegerلا75عامل الجودة
workersintegerلا4عدد العمليات المتزامنة (1-16)
callback_urlstringلا-عنوان URL للإشعار بالاكتمال

3. واجهة الاستعلام عن الحالة

تستعلم واجهة الاستعلام عن الحالة عبر معرّف المهمة عن حالة ونتائج مهمة الضغط غير المتزامنة الحالية.

حقل الإرجاعالنوعالوصف
task_idstringالمعرّف الفريد للمهمة
statusstringالحالة (pending/processing/completed/failed)
progressintegerنسبة التقدم (0-100)
download_urlstringرابط تنزيل نتيجة الضغط (بعد الاكتمال)
original_sizeintegerحجم الملف الأصلي (بالبايت)
compressed_sizeintegerحجم الملف بعد الضغط (بالبايت)
errorstringرسالة الخطأ (عند الفشل)

ثالثًا: أمثلة استدعاء بثلاث لغات

فيما يلي أمثلة استدعاء بثلاث لغات: curl وPython وJavaScript. جميع الأمثلة تتناول رفع وضغط ملف PDF واحد.

اللغةالكود الأساسيالوصف
curlcurl -X POST -H "X-API-Key: key" -F "file=@doc.pdf" -F "level=medium" http://localhost:8000/api/v1/compressاستدعاء من سطر الأوامر
Pythonrequests.post(url, headers={"X-API-Key":key}, files={"file":open("doc.pdf","rb")}, data={"level":"medium"})مكتبة requests
JavaScriptfetch(url, {method:"POST", headers:{"X-API-Key":key}, body:formData})واجهة Fetch API

رابعًا: تحديد المعدل ومعالجة الأخطاء

تمتلك واجهة API آلية متكاملة لتحديد المعدل ومعالجة الأخطاء. إن فهم رموز حالة HTTP ورموز الأخطاء هو الأساس لكتابة كود استدعاء متين.

رمز حالة HTTPرمز الخطأالمعنىالإجراء المقترح
200-نجاحتحليل بيانات الاستجابة
400INVALID_PARAMخطأ في المعاملاتالتحقق من معاملات الطلب
401UNAUTHORIZEDفشل المصادقةالتحقق من API Key/Token
413FILE_TOO_LARGEتجاوز حد حجم الملفاستخدام الرفع المجزأ
429RATE_LIMITEDكثرة الطلباتإعادة المحاولة مع تراجع أسي
500INTERNAL_ERRORخطأ في الخادمإعادة المحاولة أو التواصل مع الدعم
503SERVICE_UNAVAILABLEالخدمة غير متاحةالانتظار ثم إعادة المحاولة

تفاصيل استراتيجية تحديد المعدل: 60 طلبًا في الدقيقة و10 طلبات متزامنة في الثانية افتراضيًا، و300 طلب في الدقيقة و30 طلبًا متزامنًا في الثانية في الإصدار المؤسسي. عند تجاوز الحد يتم إرجاع 429، وتتضمن ترويسة الاستجابة حقلَي X-RateLimit-Remaining (العدد المتبقي) وX-RateLimit-Reset (الطابع الزمني لإعادة الضبط). يُنصح بتنفيذ تراجع أسي على جانب العميل: عند استلام 429 انتظر ثانية ثم أعد المحاولة، وعند الفشل انتظر ثانيتين، ثم 4 ثوانٍ، وبحد أقصى 3 محاولات.

نوع الملفالحجم الأصليالحجم بعد الضغطزمن الضغطنسبة الضغط
PDF (مسح ضوئي)80 ميجابايت8.2 ميجابايت6.5 ثانية89.8%
PDF (إصدار إلكتروني)15 ميجابايت3.1 ميجابايت1.2 ثانية79.3%
صورة JPEG12 ميجابايت2.8 ميجابايت0.8 ثانية76.7%
صورة PNG25 ميجابايت6.5 ميجابايت1.5 ثانية74.0%
مستند OFD30 ميجابايت5.2 ميجابايت2.0 ثانية82.7%

إذا كنت بحاجة إلى فهم مبادئ تصميم قائمة انتظار مهام الضغط الأساسية، يمكنك الرجوع إلى تصميم قائمة انتظار مهام الضغط. وإذا كنت تحتاج إلى نشر خدمة API عبر Docker، يمكنك الرجوع إلى نشر خدمة الضغط عبر Docker.

خامسًا: الأسئلة الشائعة FAQ

س1: كيف تتم مصادقة استدعاء واجهة برمجة الضغط؟

تدعم واجهة برمجة الضغط في خادم SmartSlim Server من UGLYPEAR DATA طريقتَي مصادقة: مصادقة API Key (إدخال المفتاح في ترويسة X-API-Key، مناسبة لاستدعاءات الخادم)، ومصادقة Bearer Token (إدخال JWT Token في ترويسة Authorization، مناسبة لاستدعاءات الواجهة الأمامية). يظل مفتاح API صالحًا بشكل دائم، ولكن يمكن إلغاؤه في أي وقت، بينما يبلغ عمر صلاحية الـ Token 24 ساعة ويحتاج إلى تجديد دوري. في بيئة الإنتاج يُنصح بطريقة API Key لبساطتها وموثوقيتها.

س2: ما صيغ الملفات التي تدعمها واجهة برمجة الضغط؟

تدعم واجهة برمجة الإصدار الخدمي PDF والصور (jpg/jpeg/tif) وصيغة OFD، بحد أقصى 1 جيجابايت للملف الواحد. تدعم واجهة برمجة الإصدار الشبكي 10 فئات رئيسية بأكثر من 40 صيغة (بما في ذلك الفيديو والصوت ومستندات Office وغيرها)، بحد أقصى 10 جيجابايت للملف الواحد. عند الاستدعاء يُحدَّد نوع الملف عبر معامل format، وفي حال عدم تمريره يُكشف تلقائيًا. انتبه إلى أن الإصدار الخدمي يدعم فقط PDF/الصور/OFD، أما جميع الصيغ فتتطلب الإصدار الشبكي.

س3: هل يوجد حد لتردد استدعاء واجهة برمجة الضغط؟

نعم، توجد استراتيجية تحديد معدّل لحماية استقرار الخدمة. الحد الافتراضي: 60 طلبًا في الدقيقة، و10 طلبات متزامنة في الثانية. عند التجاوز يُعاد رمز الحالة 429، وتتضمن ترويسة الاستجابة حقلَي X-RateLimit-Remaining وX-RateLimit-Reset. يمكن رفع الحد في الإصدار المؤسسي إلى 300 طلب في الدقيقة و30 متزامنًا في الثانية. يُنصح بتنفيذ آلية تراجع أسي على جانب العميل، وعند استلام 429 انتظر 1-2-4 ثوانٍ بشكل متزايد.

س4: كيف تتعامل واجهة برمجة الضغط مع الملفات الكبيرة؟

بالنسبة للملفات الكبيرة (التي تتجاوز 50 ميجابايت) يُنصح باستخدام واجهة الرفع المجزأ، حيث يُقسَّم الملف إلى أجزاء بحجم 5 ميجابايت، وبعد اكتمال رفع جميع الأجزاء يُخطر النظام بدمج الملف وضغطه. بعد اكتمال الضغط يمكن الحصول على النتيجة عبر الإشعار بالاستدعاء أو عبر الاستعلام الدوري عن الحالة. ضغط الملفات الكبيرة غير متزامن ولا يحجب استدعاءات API. يستغرق ضغط ملف PDF بحجم 100 ميجابايت نحو 8 ثوانٍ، وفيديو 1 جيجابايت نحو 90 ثانية، ويُولَّد رابط التنزيل تلقائيًا عند الاكتمال.

الخلاصة

توفّر واجهة RESTful API لخادم SmartSlim Server من UGLYPEAR DATA أربع واجهات رئيسية — الرفع والضغط، الضغط الدفعي، الاستعلام عن الحالة، والإشعار بالاستدعاء — لتغطية جميع السيناريوهات من ملف واحد إلى المعالجة الدفعية. طريقتا مصادقة للاختيار: API Key للخادم، وBearer Token للواجهة الأمامية. استراتيجية تحديد المعدل واضحة: 60 طلبًا في الدقيقة افتراضيًا و300 في الإصدار المؤسسي، مع رمز 429 يُرافقه إعادة المحاولة بتراجع أسي. ضغط PDF ممسوح ضوئيًا بحجم 80 ميجابايت إلى 8.2 ميجابايت في 6.5 ثانية فقط، بنسبة ضغط 89.8%.

احفظ ثلاث نقاط: أولًا، الملفات الأقل من 50 ميجابايت تُعيد النتيجة متزامنًا، أما الأكبر فتحتاج إلى الاستعلام بمعرّف المهمة؛ ثانيًا، عند رمز 429 نفّذ إعادة المحاولة بتراجع أسي، ولا تكرر المحاولة بعناد؛ ثالثًا، للملفات الكبيرة استخدم واجهة الرفع المجزأ بمقاطع 5 ميجابايت. اختيار الواجهة والمعاملات الصحيحة يجعل استدعاء واجهة برمجة الضغط في غاية البساطة. إذا كنت تفضّل تكامل SDK محليًا بدلاً من استدعاء HTTP، يمكنك الرجوع إلى دليل تكامل SDK للضغط.

هل تحتاج إلى ضغط الملفات؟ جرّب SmartSlim من UGLYPEAR DATA

مبني على محرك ضغط Rust ذاتي التطوير، يدعم 10 فئات رئيسية بأكثر من 40 صيغة تشمل PDF والصور والفيديو وOffice وOFD، مع ضغط محلي لا تغادر فيه البيانات نطاقك.