ما هو RFC 9457؟ وكيف يجب أن تُرجع واجهات برمجة التطبيقات الأخطاء؟

Ashley Innocent

Ashley Innocent

13 مارس 2026

ما هو RFC 9457؟ وكيف يجب أن تُرجع واجهات برمجة التطبيقات الأخطاء؟

Apidog للمؤسسات

نشر محلي

SSO & RBAC

متوافق مع SOC 2

استكشاف Apidog Enterprise

ملخص سريع

RFC 9457 (تفاصيل المشكلة لواجهات برمجة تطبيقات HTTP) هو التنسيق القياسي لاستجابات خطأ واجهة برمجة التطبيقات (API). إنه يستبدل تنسيقات الأخطاء المخصصة بهيكل متسق: النوع، العنوان، الحالة، التفاصيل، والمثال. ينفذ Modern PetstoreAPI معيار RFC 9457 عبر جميع استجابات الأخطاء مع تفاوض المحتوى المناسب وتفاصيل التحقق.

مقدمة

واجهة برمجة التطبيقات الخاصة بك تُرجع خطأ. كيف تبدو الاستجابة؟ إذا كنت مثل معظم واجهات برمجة التطبيقات، فقد اخترعت التنسيق الخاص بك:

{"error": "Invalid email"}
{"message": "Not found", "code": 404}
{"success": false, "errors": ["Email required"]}

كل واجهة برمجة تطبيقات لها تنسيق خطأ مختلف. يحتاج العملاء إلى معالجة أخطاء مخصصة لكل واجهة برمجة تطبيقات. لا توجد طريقة قياسية لتحليل الأخطاء أو عرضها للمستخدمين أو تسجيلها لأغراض التصحيح.

RFC 9457 يحل هذه المشكلة. إنه معيار من IETF يحدد كيفية إرجاع واجهات برمجة التطبيقات للأخطاء. بدلاً من اختراع التنسيق الخاص بك، فإنك تستخدم معيارًا مثبتًا يفهمه العملاء بالفعل.

استخدم Swagger Petstore القديم تنسيقات أخطاء مخصصة بدون أي اتساق. Modern PetstoreAPI يطبق RFC 9457 عبر جميع استجابات الأخطاء، مما يوفر تفاصيل خطأ منظمة وقابلة للقراءة آليًا.

💡
إذا كنت تقوم بإنشاء أو اختبار واجهات برمجة تطبيقات REST، فإن Apidog يساعدك في التحقق من صحة استجابات الأخطاء، واختبار توافق RFC 9457، وضمان أن واجهة برمجة التطبيقات الخاصة بك تُرجع هياكل أخطاء مناسبة. يمكنك تحديد تنسيقات الأخطاء المتوقعة، وتشغيل الاختبارات الآلية، واكتشاف الاستجابات غير الصحيحة.
زر

في هذا الدليل، ستتعلم ما هو RFC 9457، وكيفية تنفيذه بشكل صحيح، وكيف يستخدمه Modern PetstoreAPI لجميع استجابات الأخطاء.

مشكلة خطأ واجهة برمجة التطبيقات

قبل RFC 9457، اخترعت كل واجهة برمجة تطبيقات تنسيق الخطأ الخاص بها.

الاختلافات الشائعة في تنسيق الأخطاء

التنسيق 1: رسالة بسيطة

{"error": "User not found"}

التنسيق 2: الرمز والرسالة

{"code": "USER_NOT_FOUND", "message": "User not found"}

التنسيق 3: هيكل متداخل

{
  "success": false,
  "error": {
    "type": "NotFound",
    "message": "User not found"
  }
}

التنسيق 4: مصفوفة من الأخطاء

{
  "errors": [
    {"field": "email", "message": "Invalid email"}
  ]
}

مشاكل التنسيقات المخصصة

1. عدم الاتساق: يحتاج العملاء إلى تحليل مخصص لكل واجهة برمجة تطبيقات.

2. معلومات مفقودة: بعض التنسيقات تفتقر إلى رموز الأخطاء، وبعضها يفتقر إلى التفاصيل، وبعضها يفتقر إلى كليهما.

3. لا يوجد هيكل قابل للقراءة آليًا: من الصعب التعامل مع الأخطاء برمجيًا.

4. ضعف التدويل: رسائل الخطأ مكتوبة باللغة الإنجليزية بشكل ثابت.

5. لا يوجد معيار لأخطاء التحقق من الصحة: كل واجهة برمجة تطبيقات تتعامل مع أخطاء على مستوى الحقول بشكل مختلف.

ما هو RFC 9457؟

RFC 9457 (تم نشره في يوليو 2023) يحدد "تفاصيل المشكلة لواجهات برمجة تطبيقات HTTP". إنه معيار IETF يحدد كيفية تنظيم واجهات برمجة التطبيقات لاستجابات الأخطاء.

الميزات الرئيسية

نوع وسائط قياسي: application/problem+json (أو application/problem+xml)

هيكل متسق: تتبع جميع الأخطاء نفس التنسيق

قابل للقراءة آليًا: يمكن للعملاء تحليل الأخطاء برمجيًا

قابل للتوسيع: يمكنك إضافة حقول مخصصة مع الحفاظ على التوافق

متوافق مع HTTP: يتكامل مع رموز حالة HTTP

RFC 9457 مقابل الأخطاء المخصصة

خطأ مخصص:

{"error": "Email is required"}

خطأ RFC 9457:

{
  "type": "https://petstoreapi.com/errors/validation-error",
  "title": "Validation Error",
  "status": 400,
  "detail": "The request contains invalid data",
  "instance": "/pets",
  "errors": [
    {
      "field": "email",
      "message": "Email is required"
    }
  ]
}

يوفر إصدار RFC 9457 ما يلي:

شرح هيكل RFC 9457

يحدد RFC 9457 خمسة حقول قياسية ويسمح بالتوسعات المخصصة.

الحقول القياسية

1. النوع (سلسلة، مطلوب)

مرجع URI يحدد نوع الخطأ. يجب أن يشير إلى وثائق سهلة القراءة.

"type": "https://petstoreapi.com/errors/validation-error"

إذا تم حذفه، يكون الافتراضي about:blank.

2. العنوان (سلسلة، مطلوب)

ملخص قصير وسهل القراءة لنوع الخطأ. يجب ألا يتغير بين الحدوث.

"title": "Validation Error"

3. الحالة (رقم، مطلوب)

رمز حالة HTTP. مدرج للراحة حتى لا يحتاج العملاء إلى تحليل الرؤوس.

"status": 400

4. التفاصيل (سلسلة، اختياري)

شرح سهل القراءة خاص بهذا الحدوث للخطأ.

"detail": "The email field must be a valid email address"

5. المثال (سلسلة، اختياري)

مرجع URI يحدد الحدوث المحدد للخطأ. غالبًا ما يكون مسار الطلب.

"instance": "/pets/019b4132-70aa-764f-b315-e2803d882a24"

التوسعات المخصصة

يمكنك إضافة حقول مخصصة لسياق إضافي:

{
  "type": "https://petstoreapi.com/errors/rate-limit-exceeded",
  "title": "Rate Limit Exceeded",
  "status": 429,
  "detail": "You have exceeded the rate limit of 100 requests per minute",
  "instance": "/pets",
  "retryAfter": 42,
  "limit": 100,
  "remaining": 0,
  "resetAt": "2026-03-13T10:30:00Z"
}

كيف ينفذ Modern PetstoreAPI معيار RFC 9457

Modern PetstoreAPI يستخدم RFC 9457 لجميع استجابات الأخطاء.

مثال 1: المورد غير موجود

GET /pets/invalid-id
404 Not Found
Content-Type: application/problem+json

{
  "type": "https://docs.petstoreapi.com/errors/not-found",
  "title": "Resource Not Found",
  "status": 404,
  "detail": "The requested pet does not exist",
  "instance": "/pets/invalid-id"
}

مثال 2: خطأ المصادقة

GET /pets
401 Unauthorized
Content-Type: application/problem+json

{
  "type": "https://docs.petstoreapi.com/errors/unauthorized",
  "title": "Authentication Required",
  "status": 401,
  "detail": "Valid authentication credentials are required to access this resource",
  "instance": "/pets"
}

مثال 3: تجاوز حد المعدل

GET /pets
429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 60

{
  "type": "https://docs.petstoreapi.com/errors/rate-limit-exceeded",
  "title": "Rate Limit Exceeded",
  "status": 429,
  "detail": "You have exceeded the rate limit of 100 requests per minute",
  "instance": "/pets",
  "limit": 100,
  "remaining": 0,
  "resetAt": "2026-03-13T10:31:00Z"
}

انظر وثائق معالجة الأخطاء في Modern PetstoreAPI لجميع أنواع الأخطاء.

أخطاء التحقق من الصحة مع RFC 9457

تحتاج أخطاء التحقق من الصحة إلى تفاصيل على مستوى الحقول. يسمح RFC 9457 بالتوسعات المخصصة لذلك.

تنسيق التحقق من الصحة في Modern PetstoreAPI

POST /pets
400 Bad Request
Content-Type: application/problem+json

{
  "type": "https://docs.petstoreapi.com/errors/validation-error",
  "title": "Validation Error",
  "status": 400,
  "detail": "The request contains 2 validation errors",
  "instance": "/pets",
  "errors": [
    {
      "field": "name",
      "message": "Name is required",
      "code": "REQUIRED_FIELD"
    },
    {
      "field": "species",
      "message": "Species must be one of: DOG, CAT, BIRD, FISH, REPTILE, OTHER",
      "code": "INVALID_ENUM_VALUE",
      "rejectedValue": "DRAGON"
    }
  ]
}

النقاط الرئيسية

مصفوفة الأخطاء (errors array): تحتوي على تفاصيل التحقق من الصحة على مستوى الحقول

الحقل (field): مسار JSON للحقل غير الصالح

الرسالة (message): رسالة خطأ سهلة القراءة

الرمز (code): رمز خطأ قابل للقراءة آليًا

القيمة المرفوضة (rejectedValue): القيمة التي تم رفضها (اختياري)

يسمح هذا التنسيق للعملاء بما يلي:

اختبار استجابات الأخطاء باستخدام Apidog

Apidog يساعدك على اختبار توافق RFC 9457.

حالة اختبار: خطأ التحقق من الصحة

// Apidog test script
pm.test("Returns RFC 9457 error format", () => {
  const response = pm.response.json();

  // Check required fields
  pm.expect(response).to.have.property("type");
  pm.expect(response).to.have.property("title");
  pm.expect(response).to.have.property("status");

  // Check status matches HTTP status
  pm.expect(response.status).to.equal(pm.response.code);

  // Check content type
  pm.expect(pm.response.headers.get("Content-Type"))
    .to.include("application/problem+json");
});

pm.test("Validation errors include field details", () => {
  const response = pm.response.json();

  pm.expect(response).to.have.property("errors");
  pm.expect(response.errors).to.be.an("array");

  response.errors.forEach(error => {
    pm.expect(error).to.have.property("field");
    pm.expect(error).to.have.property("message");
  });
});

حالة اختبار: عناوين URL لنوع الخطأ

pm.test("Error type URL is accessible", async () => {
  const response = pm.response.json();
  const typeUrl = response.type;

  // Verify type URL returns documentation
  const docResponse = await pm.sendRequest(typeUrl);
  pm.expect(docResponse.code).to.equal(200);
});

الترحيل من تنسيقات الأخطاء المخصصة

إذا كنت تستخدم تنسيقات أخطاء مخصصة، فإليك كيفية الترحيل إلى RFC 9457.

الخطوة 1: إضافة رأس Content-Type

ابدأ بإرجاع application/problem+json:

Content-Type: application/problem+json

الخطوة 2: ربط الحقول الموجودة

اربط التنسيق المخصص الخاص بك بـ RFC 9457:

قبل:

{
  "error": "USER_NOT_FOUND",
  "message": "User not found"
}

بعد:

{
  "type": "https://api.example.com/errors/user-not-found",
  "title": "User Not Found",
  "status": 404,
  "detail": "User not found"
}

الخطوة 3: دعم كلا التنسيقين (فترة انتقالية)

استخدم تفاوض المحتوى لدعم كلا التنسيقين:

Accept: application/json ← إرجاع التنسيق المخصص
Accept: application/problem+json ← إرجاع تنسيق RFC 9457

الخطوة 4: إهمال التنسيق المخصص

بعد ترحيل العملاء، قم بإهمال التنسيق المخصص وإرجاع RFC 9457 بشكل افتراضي.

الخاتمة

يوفر RFC 9457 تنسيقًا قياسيًا لاستجابات خطأ واجهة برمجة التطبيقات. إنه يستبدل تنسيقات الأخطاء المخصصة بهيكل متسق وقابل للقراءة آليًا يمكن للعملاء تحليله برمجيًا.

Modern PetstoreAPI ينفذ RFC 9457 عبر جميع استجابات الأخطاء، مما يوضح كيفية تنظيم الأخطاء بشكل صحيح مع تفاصيل التحقق من الصحة المناسبة، وعناوين URL لنوع الخطأ، ورموز حالة HTTP.

استخدم Apidog لاختبار توافق RFC 9457، والتحقق من هياكل الأخطاء، والتأكد من أن واجهة برمجة التطبيقات الخاصة بك تُرجع استجابات أخطاء مناسبة.

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

هل RFC 9457 مطلوب لواجهات برمجة تطبيقات REST؟

لا، ولكنه المعيار الموصى به. استخدام RFC 9457 يجعل واجهة برمجة التطبيقات الخاصة بك أكثر اتساقًا وأسهل على العملاء للاندماج معها.

هل يمكنني استخدام RFC 9457 مع XML؟

نعم، يحدد RFC 9457 كلا من تنسيقات JSON (application/problem+json) و XML (application/problem+xml).

هل يجب علي دائمًا تضمين جميع الحقول القياسية الخمسة؟

type و title و status مطلوبة. أما detail و instance فهي اختيارية ولكن يوصى بها للحصول على سياق أفضل للخطأ.

هل يمكنني إضافة حقول مخصصة لاستجابات RFC 9457؟

نعم، RFC 9457 قابل للتوسيع. يمكنك إضافة حقول مخصصة مثل errors، retryAfter، أو traceId للحصول على سياق إضافي.

كيف أتعامل مع أخطاء التحقق من الصحة باستخدام RFC 9457؟

أضف مصفوفة errors مخصصة تحتوي على تفاصيل على مستوى الحقول. يوضح Modern PetstoreAPI هذا النمط في استجابات أخطاء التحقق من الصحة.

ماذا يجب أن يشير إليه عنوان URL لنوع الخطأ؟

يجب أن يشير إلى وثائق سهلة القراءة تشرح نوع الخطأ والأسباب المحتملة وكيفية إصلاحه.

هل أحتاج إلى تغيير رموز حالة HTTP عند استخدام RFC 9457؟

لا، يعمل RFC 9457 مع رموز حالة HTTP القياسية. يجب أن يتطابق حقل status في الاستجابة مع رمز حالة HTTP.

كيف أختبر توافق RFC 9457؟

استخدم Apidog للتحقق من بنية استجابة الخطأ، والتحقق من الحقول المطلوبة، والتأكد من تطابق أنواع المحتوى مع مواصفات RFC 9457.

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات