وثائق أصول Core

توثيق محرك حالة العالم الحتمي ومراجع API.

وثائق بوابة القرار

نموذج الخطأ

يستخدم Asset Core رموز حالة HTTP القياسية مع استجابات أخطاء تفاصيل المشكلة RFC 9457. تصف هذه المرجعية نموذج الخطأ وظروف الخطأ الشائعة. تم تصميمها لتكون مستقرة حتى يتمكن العملاء من بناء منطق إعادة المحاولة والتصحيح المتوقع.

نظرة عامة

تُعاد الأخطاء كحمولات application/problem+json مع تصنيف مستقر، ورموز قابلة للقراءة الآلية، وإرشادات اختيارية لإعادة المحاولة. يشير رمز حالة HTTP إلى فئة الخطأ، بينما يوفر الجسم تفاصيل محددة. اعتبر حقل code كمعرف قياسي قابل للقراءة الآلية.

الهيكل

استجابة خطأ الكتابة/القراءة (تفاصيل المشكلة)

{
  "type": "urn:assetcore:error:CONTAINER_NOT_FOUND",
  "title": "NotFoundError",
  "status": 404,
  "detail": "Container 1001 not found",
  "code": "CONTAINER_NOT_FOUND",
  "retryable": false,
  "hint": "Verify the container ID",
  "server_correlation_id": "wr-0000000000000001-0000000000000042",
  "client_correlation_id": "client-req-2026-01-15",
  "details": {
    "container_id": 1001
  }
}

تفاصيل حقول الخطأ

الحقلالنوعالوصف
typeسلسلةنوع URI وفقًا لـ RFC 9457 (يستخدم Asset Core urn:assetcore:error:\CODE“)
titleسلسلةاسم فئة الخطأ القصير (ValidationError, NotFoundError)
statusعدد صحيحرمز حالة HTTP
detailسلسلةتفسير قابل للقراءة البشرية
codeسلسلةمعرف الخطأ القابل للقراءة الآلية (SCREAMING_SNAKE_CASE)
retryableبوليانيما إذا كان يجب على العملاء إعادة المحاولة
retry_after_msعدد صحيحتلميح اختياري لإعادة المحاولة بعد في المللي ثانية (429/503)
hintسلسلةتلميح اختياري للإصلاح
auth_reasonسلسلةسبب رفض المصادقة الاختياري (فقط عندما يكون الكشف هو reason_code)
server_correlation_idسلسلةمعرف الارتباط المعين من قبل الخادم (اختياري)
client_correlation_idسلسلةمعرف الارتباط المقدم من العميل (اختياري)
detailsكائنتفاصيل هيكلية اختيارية
core_errorكائنحمولة خطأ أساسي مسلسلة اختيارية (للكتابة فقط)

حقول

رموز حالة HTTP

الحالةالمعنىمتى تستخدم
200 OKنجاحتم إكمال الطلب بنجاح
400 Bad Requestطلب غير صالحJSON مشوه، حقول مفقودة
401 Unauthorizedغير مصادق عليهمفقود أو رمز حامل غير صالح
403 Forbiddenغير مسموحلا يمتلك المستخدم الإذن أو الوصول إلى مساحة الأسماء
404 Not Foundالمورد غير موجودالحاوية أو الفئة غير موجودة
409 Conflictتعارض الحالةتصادم مفتاح الاستقلالية، موجود بالفعل
422 Unprocessable Entityفشل التحققلم يتم استيفاء شروط العملية
425 Too Earlyقراءة قديمةلم يتم الوصول إلى الحد الأدنى من تسلسل العالم (نقاط النهاية للقراءة)
429 Too Many Requestsمحدودية المعدلحدود الحصة أو حدود معدل المصادقة
500 Internal Server Errorخطأ في الخادمفشل غير متوقع
503 Service Unavailableغير متاح مؤقتًامحمل بشكل زائد، يتم إيقاف التشغيل

رموز الأخطاء الشائعة

أخطاء الحاويات

الرمزالحالةالوصف
CONTAINER_NOT_FOUND404الحاوية المحددة غير موجودة
CONTAINER_ALREADY_EXISTS409معرف الحاوية قيد الاستخدام بالفعل
WRONG_CONTAINER_KIND422العملية غير مدعومة لهذا النوع من الحاويات

أخطاء التوازن

الرمزالحالةالوصف
INVALID_QUANTITY422يجب أن تكون الكمية أكبر من الصفر
INSUFFICIENT_BALANCE422رصيد غير كافٍ للعملية
INVALID_OPERATION422العملية ستتجاوز الحد أو غير صالحة

أخطاء المثيل

الرمزالحالةالوصف
INSTANCE_NOT_FOUND404المثيل المحدد غير موجود
ALREADY_ATTACHED409المثيل لديه بالفعل والد
NOT_ATTACHED422المثيل ليس لديه والد لفصله
HAS_CHILDREN422يجب فصل الأطفال قبل الحرق
WOULD_CREATE_CYCLE422الربط سيخلق دورة

أخطاء الفتحات

الكودالحالةالوصف
SLOT_OUT_OF_BOUNDS422فهرس الفتحة يتجاوز سعة الحاوية
SLOT_OCCUPIED409الفتحة تحتوي بالفعل على مثيل
SLOT_EMPTY422الفتحة لا تحتوي على مثيل

أخطاء المخطط

الرمزالحالةالوصف
UNREGISTERED_CLASS404الفئة المحددة غير مسجلة
CLASS_ALREADY_EXISTS409معرف الفئة مسجل بالفعل
SHAPE_ALREADY_REGISTERED409الشكل موجود بالفعل لهذه الفئة
UNREGISTERED_CLASS_SHAPE422الشكل مطلوب ولكنه غير مسجل

أخطاء النظام

الرمزالحالةالوصف
INVALID_REQUEST400JSON مشوه أو معلمات غير صالحة
PAYLOAD_TOO_LARGE413جسم الطلب يتجاوز الحدود المكونة
UNSUPPORTED_MEDIA_TYPE415نوع المحتوى ليس JSON
INTEGER_OVERFLOW500تجاوز عددي (خطأ)
SERVICE_UNAVAILABLE503النظام مثقل أو يتم إيقافه

أمثلة

طلب غير صحيح (400)

JSON غير صالح:

{
  "type": "urn:assetcore:error:INVALID_REQUEST",
  "title": "ValidationError",
  "status": 400,
  "detail": "Failed to parse JSON body",
  "code": "INVALID_REQUEST",
  "retryable": false,
  "details": {
    "position": 42,
    "expected": "string"
  }
}

غير موجود (404)

الحاوية غير موجودة:

{
  "type": "urn:assetcore:error:CONTAINER_NOT_FOUND",
  "title": "NotFoundError",
  "status": 404,
  "detail": "Container 1001 does not exist",
  "code": "CONTAINER_NOT_FOUND",
  "retryable": false,
  "details": {
    "container_id": 1001
  }
}

الصراع (409)

مفتاح التكرار قد تم استخدامه بالفعل بمحتوى مختلف:

{
  "type": "urn:assetcore:error:IDEMPOTENCY_CONFLICT",
  "title": "ConflictError",
  "status": 409,
  "detail": "Idempotency key 'create-1001' was used with different request content",
  "code": "IDEMPOTENCY_CONFLICT",
  "retryable": false,
  "details": {
    "idempotency_key": "create-1001"
  }
}

الكيان غير القابل للمعالجة (422)

رصيد غير كافٍ:

{
  "type": "urn:assetcore:error:INSUFFICIENT_BALANCE",
  "title": "ValidationError",
  "status": 422,
  "detail": "Insufficient balance: requested 500, available 100",
  "code": "INSUFFICIENT_BALANCE",
  "retryable": false,
  "details": {
    "container_id": 1001,
    "class_id": 100,
    "key": 1,
    "requested": 500,
    "available": 100
  }
}

الخدمة غير متاحة (503)

نظام مثقل:

{
  "type": "urn:assetcore:error:SERVICE_UNAVAILABLE",
  "title": "UnavailableError",
  "status": 503,
  "detail": "System is at capacity, please retry later",
  "code": "SERVICE_UNAVAILABLE",
  "retryable": true,
  "retry_after_ms": 100,
  "details": {
    "queue_depth": 1000
  }
}