انتقل إلى المحتوى

عمليات الرفع ​

عمليات رفع قابلة للاستئناف: أنشئ جلسة رفع، وأرسل البايتات كاملة أو على أجزاء، وأكملها، وتابع مهمة الإكمال.

عمليات هذه المجموعة مع قاعدة الوصول وقاعدة إعادة المحاولة والمعلمات والاستجابات. يحمل كل طلب مفتاحًا: Authorization: Bearer <key> (راجع «المصادقة»).

العمليات ​

عرض قائمة الأجزاء المستلمة من عملية رفع ​

GET HEAD /api/v1/repositories/{repository}/uploads/{id}/parts

الوصول: إذن المستودع: upload.read; مفاتيح الملفات: write · إعادة المحاولة: آمن للتكرار (قراءة)

يعيد partBytes، وهو حجم الجزء الذي تحدد لعملية الرفع هذه عند إنشائها (8 MiB، ويُضاعَف الحجم للملفات التي تتطلب أكثر من 10 000 جزء؛ ولا يكون أقصر إلا الجزء الأخير)، والأجزاء المخزَّنة بالفعل مع رقمها التسلسلي وحجمها وSHA-256. اقرأه قبل استئناف رفع متعدد الأجزاء انقطع، وأرسل الأجزاء الناقصة فقط عبر putUploadPart. لا يراه إلا منشئ عملية الرفع؛ وبالنسبة لغيره تكون النتيجة 404.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
repositoryالمسارstringنعميطابق النمط ^[a-z0-9][a-z0-9_-]{0,63}$
idالمسارstring (uuid)نعم—

الاستجابة 200

الحقلالنوعمطلوبالقواعد
partBytesintegerلا8388608–1073741824; لكل جزء هذا الحجم عدا الجزء الأخير.
itemsمصفوفة من objectلا—
items[].indexintegerنعم0–9999
items[].sizeintegerنعم1–1073741824
items[].sha256stringنعمSHA-256: 64 رقمًا ست عشريًا بأحرف صغيرة

الاستجابات: 200, 400, 401, 403, 404, 409, 422, 503, 507

مثال

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/uploads/$ID/parts" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

رفع جزء واحد ​

PUT /api/v1/repositories/{repository}/uploads/{id}/parts/{index}

الوصول: إذن المستودع: upload.write; مفاتيح الملفات: write · إعادة المحاولة: أعد قراءة عملية الرفع، ثم قرّر

يخزّن المتن (body) جزءًا برقم index (يبدأ من 0) في عملية رفع متعدد الأجزاء معلّقة؛ ويجب أن يساوي طوله partBytes تمامًا (من listUploadParts)، أو المتبقي للجزء الأخير، وأن يكون X-Content-SHA256 هو SHA-256 بالنظام السداسي عشري وبأحرف صغيرة لهذه البايتات، وإلا كانت النتيجة 422. يجوز أن تصل الأجزاء بأي ترتيب، لكن عملية الرفع تقبل طلبًا واحدًا في كل مرة (والطلب المتزامن الآخر يحصل على 503 busy)؛ وإعادة إرسال جزء بقيمة التجزئة نفسها آمنة، أما قيمة تجزئة مختلفة لرقم مخزَّن بالفعل فهي 409 part_mismatch. وعند تخزين كل الأجزاء استدعِ completeUpload أو enqueueCompletion.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
repositoryالمسارstringنعميطابق النمط ^[a-z0-9][a-z0-9_-]{0,63}$
idالمسارstring (uuid)نعم—
indexالمسارintegerنعم0–9999
X-Content-SHA256الترويسةstringنعمSHA-256: 64 رقمًا ست عشريًا بأحرف صغيرة

نص الطلب (application/octet-stream)

الاستجابات: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

مثال

bash
curl -X PUT "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/uploads/$ID/parts/$INDEX" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "X-Content-SHA256: $X_CONTENT_SHA256" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @file

إكمال عملية رفع في الخلفية ​

POST /api/v1/repositories/{repository}/uploads/{id}/complete-async

الوصول: إذن المستودع: upload.complete; مفاتيح الملفات: write · إعادة المحاولة: أعد قراءة المهمة، ثم قرّر

يضع إكمال عملية رفع معلّقة في طابور خدمة العامل (worker) بدلًا من تنفيذه داخل الطلب، ويعيد المهمة فورًا مع 202؛ تابعها عبر getCompletionJob. وإعادة استدعائه لعملية الرفع نفسها تعيد المهمة نفسها، أما المهمة التي فشلت لسبب عابر فتُوضع في الطابور من جديد. وجود مهمة في الطابور لا يعني أن المُخرَج نُشر: النشر يعني الحالة completed فقط. والنتيجة 409 upload_state إذا لم تعد عملية الرفع معلّقة؛ و507 queue_full عندما يكون لدى المستدعي 100 مهمة مفتوحة أو لدى الخادم 10 000.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
repositoryالمسارstringنعميطابق النمط ^[a-z0-9][a-z0-9_-]{0,63}$
idالمسارstring (uuid)نعم—

الاستجابة 202

الحقلالنوعمطلوبالقواعد
idstring (uuid)نعم—
uploadIdstring (uuid)نعم—
repositorystringنعم—
ownerstringنعم—
statusstringنعمإحدى القيم: queued, running, completed, failed
generationintegerنعم0–2147483647
attemptsintegerنعم0 على الأقل
credentialIdstring (uuid)لامعرّف اختياري للمفتاح المُدار الذي بدأ العملية؛ وليس سرّه أبدًا.
errorCodestringنعميمكن أن يكون null

الاستجابات: 202, 400, 401, 403, 404, 405, 409, 422, 503, 507

مثال

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/uploads/$ID/complete-async" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

الحصول على مهمة إكمال ​

GET HEAD /api/v1/jobs/{id}

الوصول: إذن المستودع: job.read; مفاتيح الملفات: write · إعادة المحاولة: آمن للتكرار (قراءة)

يعيد حالة مهمة إكمال وُضعت في الطابور عبر enqueueCompletion: queued أو running أو completed (تم نشر عملية الرفع) أو failed مع errorCode، إضافةً إلى عدد المحاولات. يحاول العامل حتى خمس مرات بفواصل زمنية متزايدة؛ أما أخطاء مثل integrity_mismatch فتُفشِل المهمة فورًا. لا يراها إلا منشئ المهمة؛ وبالنسبة لغيره تكون النتيجة 404.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
idالمسارstring (uuid)نعم—

الاستجابة 200

الحقلالنوعمطلوبالقواعد
idstring (uuid)نعم—
uploadIdstring (uuid)نعم—
repositorystringنعم—
ownerstringنعم—
statusstringنعمإحدى القيم: queued, running, completed, failed
generationintegerنعم0–2147483647
attemptsintegerنعم0 على الأقل
credentialIdstring (uuid)لامعرّف اختياري للمفتاح المُدار الذي بدأ العملية؛ وليس سرّه أبدًا.
errorCodestringنعميمكن أن يكون null

الاستجابات: 200, 400, 401, 403, 404, 409, 422, 503, 507

مثال

bash
curl -X GET "$ARKVORY_URL/api/v1/jobs/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

إنشاء جلسة رفع ​

POST /api/v1/repositories/{repository}/uploads

الوصول: إذن المستودع: upload.create; مفاتيح الملفات: write · إعادة المحاولة: آمن للتكرار مع Idempotency-Key نفسه

يحجز عملية رفع لملف واحد يصفه name وsize (سلسلة نصية عشرية) وsha256 وlabels وmetadata الاختياريان؛ ويعيد 201 مع الجلسة (pending، صالحة لمدة 7 أيام) وLocation الخاص بها. المفتاح Idempotency-Key (من 1 إلى 128 حرفًا من الأحرف والأرقام و_.:-) مطلوب: المفتاح نفسه مع الوصف نفسه يعيد الجلسة نفسها، ومع وصف مختلف يكون الناتج 409 idempotency_mismatch. ويُحجز الحجم فورًا من حصة تخزين المستودع ومن سعة الخادم (507). بعد ذلك أرسل البايتات كاملة عبر putUploadContent، أو على أجزاء عبر putUploadPart ثم أنهِ بـ completeUpload.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
repositoryالمسارstringنعميطابق النمط ^[a-z0-9][a-z0-9_-]{0,63}$
Idempotency-Keyالترويسةstringنعمعدد الأحرف: 128 كحد أقصى

نص الطلب (application/json)

الحقلالنوعمطلوبالقواعد
namestringنعمعدد الأحرف: 1–240
sizestringنعمعدد صحيح بأرقام عشرية، يُرسَل كسلسلة نصية
sha256stringنعمSHA-256: 64 رقمًا ست عشريًا بأحرف صغيرة
labelsمصفوفة من stringلاعدد العناصر: 32 كحد أقصى; كل عنصر: عدد الأحرف: 64 كحد أقصى
metadataقاموس من stringلاعدد الإدخالات: 32 كحد أقصى

الاستجابة 201

الحقلالنوعمطلوبالقواعد
idstring (uuid)نعم—
repositorystringنعم—
statusstringنعمإحدى القيم: pending, available, cancelled
createdAtstring (date-time)نعم—
expiresAtstring (date-time)نعم—
descriptorobjectنعم—
descriptor.namestringنعمعدد الأحرف: 1–240
descriptor.sizestringنعمعدد صحيح بأرقام عشرية، يُرسَل كسلسلة نصية
descriptor.sha256stringنعمSHA-256: 64 رقمًا ست عشريًا بأحرف صغيرة
descriptor.labelsمصفوفة من stringلاعدد العناصر: 32 كحد أقصى; كل عنصر: عدد الأحرف: 64 كحد أقصى
descriptor.metadataقاموس من stringلاعدد الإدخالات: 32 كحد أقصى

الاستجابات: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

مثال

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/uploads" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>","size":"1024","sha256":"<sha256: SHA-256>"}'

الحصول على عملية رفع ​

GET HEAD /api/v1/repositories/{repository}/uploads/{id}

الوصول: إذن المستودع: upload.read; مفاتيح الملفات: write · إعادة المحاولة: آمن للتكرار (قراءة)

يعيد الجلسة مع status (pending، أو available بعد النشر، أو cancelled) وتاريخ انتهائها والواصف المُعلَن. بعد ضياع الردّ على putUploadContent أو completeUpload اقرأ هذا أولًا: القيمة available تعني أن المُخرَج نُشر بالمعرّف نفسه. لا يراها إلا منشئ عملية الرفع؛ وبالنسبة لغيره تكون النتيجة 404.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
repositoryالمسارstringنعميطابق النمط ^[a-z0-9][a-z0-9_-]{0,63}$
idالمسارstring (uuid)نعم—

الاستجابة 200

الحقلالنوعمطلوبالقواعد
idstring (uuid)نعم—
repositorystringنعم—
statusstringنعمإحدى القيم: pending, available, cancelled
createdAtstring (date-time)نعم—
expiresAtstring (date-time)نعم—
descriptorobjectنعم—
descriptor.namestringنعمعدد الأحرف: 1–240
descriptor.sizestringنعمعدد صحيح بأرقام عشرية، يُرسَل كسلسلة نصية
descriptor.sha256stringنعمSHA-256: 64 رقمًا ست عشريًا بأحرف صغيرة
descriptor.labelsمصفوفة من stringلاعدد العناصر: 32 كحد أقصى; كل عنصر: عدد الأحرف: 64 كحد أقصى
descriptor.metadataقاموس من stringلاعدد الإدخالات: 32 كحد أقصى

الاستجابات: 200, 400, 401, 403, 404, 409, 422, 503, 507

مثال

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/uploads/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

إلغاء عملية رفع ​

DELETE /api/v1/repositories/{repository}/uploads/{id}

الوصول: إذن المستودع: upload.cancel; مفاتيح الملفات: write · إعادة المحاولة: أعد قراءة عملية الرفع، ثم قرّر

يلغي عملية رفع معلّقة ويعيدها بالحالة cancelled؛ أما عملية الرفع المنشورة فلا يمكن إلغاؤها (409 upload_state). تُخفى البايتات المستلمة فورًا لكنها تبقى محجوزة من حصة التخزين إلى أن يزيلها التنظيف الفعلي أثناء التشغيل في المستودع (setCleanup، وهو معطّل افتراضيًا) بعد انقضاء فترة السماح.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
repositoryالمسارstringنعميطابق النمط ^[a-z0-9][a-z0-9_-]{0,63}$
idالمسارstring (uuid)نعم—

الاستجابة 200

الحقلالنوعمطلوبالقواعد
idstring (uuid)نعم—
repositorystringنعم—
statusstringنعمإحدى القيم: pending, available, cancelled
createdAtstring (date-time)نعم—
expiresAtstring (date-time)نعم—
descriptorobjectنعم—
descriptor.namestringنعمعدد الأحرف: 1–240
descriptor.sizestringنعمعدد صحيح بأرقام عشرية، يُرسَل كسلسلة نصية
descriptor.sha256stringنعمSHA-256: 64 رقمًا ست عشريًا بأحرف صغيرة
descriptor.labelsمصفوفة من stringلاعدد العناصر: 32 كحد أقصى; كل عنصر: عدد الأحرف: 64 كحد أقصى
descriptor.metadataقاموس من stringلاعدد الإدخالات: 32 كحد أقصى

الاستجابات: 200, 400, 401, 403, 404, 405, 409, 422, 503, 507

مثال

bash
curl -X DELETE "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/uploads/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

رفع الملف كاملًا في طلب واحد ​

PUT /api/v1/repositories/{repository}/uploads/{id}/content

الوصول: إذن المستودع: upload.write, upload.complete; مفاتيح الملفات: write · إعادة المحاولة: أعد قراءة عملية الرفع، ثم قرّر

يبثّ متن الطلب بوصفه المحتوى الكامل لعملية رفع معلّقة، ويقارنه بالحجم المُعلَن وSHA-256 (422 عند عدم التطابق)، وينشر المُخرَج؛ والردّ هو عملية الرفع بالحالة available. الطلب الذي انقطع لا يترك شيئًا يمكن استئنافه: اقرأ عملية الرفع عبر getUpload، ثم أرسل الملف من جديد من البايت صفر. لا يصلح لعملية رفع لها أجزاء بالفعل (409 upload_state)؛ كما يجب أن ينتهي الطلب الواحد خلال مهلة الرفع في الخادم (30 دقيقة افتراضيًا)، فأرسل الملفات الكبيرة على أجزاء.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
repositoryالمسارstringنعميطابق النمط ^[a-z0-9][a-z0-9_-]{0,63}$
idالمسارstring (uuid)نعم—

نص الطلب (application/octet-stream)

الاستجابة 200

الحقلالنوعمطلوبالقواعد
idstring (uuid)نعم—
repositorystringنعم—
statusstringنعمإحدى القيم: pending, available, cancelled
createdAtstring (date-time)نعم—
expiresAtstring (date-time)نعم—
descriptorobjectنعم—
descriptor.namestringنعمعدد الأحرف: 1–240
descriptor.sizestringنعمعدد صحيح بأرقام عشرية، يُرسَل كسلسلة نصية
descriptor.sha256stringنعمSHA-256: 64 رقمًا ست عشريًا بأحرف صغيرة
descriptor.labelsمصفوفة من stringلاعدد العناصر: 32 كحد أقصى; كل عنصر: عدد الأحرف: 64 كحد أقصى
descriptor.metadataقاموس من stringلاعدد الإدخالات: 32 كحد أقصى

الاستجابات: 200, 400, 401, 403, 404, 405, 409, 422, 503, 507

مثال

bash
curl -X PUT "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/uploads/$ID/content" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @file

إكمال عملية رفع ​

POST /api/v1/repositories/{repository}/uploads/{id}/complete

الوصول: إذن المستودع: upload.complete; مفاتيح الملفات: write · إعادة المحاولة: أعد قراءة عملية الرفع، ثم قرّر

يجمّع الأجزاء المخزَّنة بالترتيب، ويتحقق من الملف كاملًا مقابل الحجم المُعلَن وSHA-256، وينشر المُخرَج؛ ويعيد عملية الرفع بالحالة available. وإعادة استدعائه لعملية رفع منشورة تعيد النتيجة نفسها، فيصلح بذلك أيضًا لاستعادة إكمال ضاع ردّه. الجزء الناقص هو 409 parts_incomplete، وعدم تطابق المحتوى هو 422؛ وللملفات الكبيرة جدًا التي قد ينتهي فيها زمن الطلب استخدم enqueueCompletion بدلًا منه.

المعلمات

الاسمالموضعالنوعمطلوبالقواعد
repositoryالمسارstringنعميطابق النمط ^[a-z0-9][a-z0-9_-]{0,63}$
idالمسارstring (uuid)نعم—

الاستجابة 200

الحقلالنوعمطلوبالقواعد
idstring (uuid)نعم—
repositorystringنعم—
statusstringنعمإحدى القيم: pending, available, cancelled
createdAtstring (date-time)نعم—
expiresAtstring (date-time)نعم—
descriptorobjectنعم—
descriptor.namestringنعمعدد الأحرف: 1–240
descriptor.sizestringنعمعدد صحيح بأرقام عشرية، يُرسَل كسلسلة نصية
descriptor.sha256stringنعمSHA-256: 64 رقمًا ست عشريًا بأحرف صغيرة
descriptor.labelsمصفوفة من stringلاعدد العناصر: 32 كحد أقصى; كل عنصر: عدد الأحرف: 64 كحد أقصى
descriptor.metadataقاموس من stringلاعدد الإدخالات: 32 كحد أقصى

الاستجابات: 200, 400, 401, 403, 404, 405, 409, 422, 503, 507

مثال

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/uploads/$ID/complete" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Arkvory · ProAnimaStudio