وثائق API V2

GenderAPI.io V2: الأخطاء والحدود وإعادة المحاولة

تعامل مع Problem Details وحدود الطلبات والخصم غير المؤكد في GenderAPI.io V2. افحص كل خطأ قبل تكرار الطلب، إذ يُخصم كل طلب بشكل مستقل.

الأخطاء ورموز حالة HTTP

تستخدم أخطاء التطبيق application/problem+json (RFC 9457). ابنِ منطقك على الحقلين الثابتين code وaction، لا على النص المقروء في detail. في أخطاء التحقق، يحتوي errors على مؤشرات JSON Pointer للحقول المعنية. اذكر request_id عند التواصل مع فريق الدعم. عند أعطال الوكيل أو النقل قد يختلف جسم الاستجابة، لذا تحقّق من Content-Type قبل تحليل JSON.

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

حالة HTTPالمعنى المعتادالخطوة التالية
400 / 413 / 415JSON غير صالح، أو جسم كبير جدًا، أو نوع وسائط غير مدعوم.صحّح الطلب.
401 / 403رُفض الوصول، أو قيد على الحساب، أو أرصدة غير كافية.افحص code؛ ثم صحّح الوصول، أو اشحن الأرصدة، أو انتظر تجديد التجربة حسب عنوان IP.
422مُدخل غير صالح أو خيارات غير متوافقة.صحّح الحقول المذكورة في errors.
404 / 405مسار غير معروف أو طريقة HTTP غير مدعومة.تحقّق من مسار نقطة النهاية ومن ترويسة الاستجابة Allow.
429حد لمعدل الطلبات أو للعمليات المتزامنة.انتظر المدة المحددة في Retry-After قبل إرسال طلب آخر.
500عطل غير متوقع في الخادم.تواصل مع فريق الدعم مع ذكر request_id؛ وتحقّق من الخصم قبل إعادة المحاولة.
502 / 503 / 504عطل لدى مزوّد الخدمة أو في إحدى التبعيات أو في الخصم، أو انتهاء المهلة.افحص code وaction وbilling_status قبل إعادة المحاولة.
مثال على استجابة JSON
{
  "type": "urn:genderapi:problem:validation_error",
  "title": "validation error",
  "status": 422,
  "detail": "A valid email address is required.",
  "instance": "urn:uuid:11111111-1111-4111-8111-111111111111",
  "code": "validation_error",
  "request_id": "11111111-1111-4111-8111-111111111111",
  "documentation": "https://api.genderapi.io/api/v2/errors",
  "action": "correct_request",
  "errors": [
    {
      "pointer": "/value",
      "message": "Invalid email address."
    }
  ],
  "meta": {
    "request_id": "11111111-1111-4111-8111-111111111111",
    "duration_ms": 12,
    "access": {
      "mode": "ip_trial",
      "reason": "api_key_missing"
    },
    "usage": {
      "charged_credits": 0,
      "remaining_credits": null,
      "billing_status": "not_charged",
      "resets_at": "2026-09-26T12:00:00.000Z",
      "limit": 10,
      "period_seconds": 86400
    }
  }
}

حقول استجابة الخطأ

الحقلالنوعيمكن أن يكون nullمثالالوصف
typestringلا"urn:genderapi:problem:validation_error"URI يحدد نوع المشكلة.
titlestringلا"validation error"عنوان قصير للخطأ يسهل على الإنسان قراءته.
statusintegerلا422رمز حالة HTTP.
detailstringلا"The request does not match the schema."شرح لهذا الخطأ تحديدًا.
instancestringلا"urn:uuid:550e8400-e29b-41d4-a716-446655440000"معرّف الطلب الفاشل.
codestringلا"validation_error"رمز خطأ ثابت قابل للقراءة آليًا.
request_idstringلا"550e8400-e29b-41d4-a716-446655440000"معرّف فريد لمحاولة HTTP هذه؛ ويُرسل أيضًا في X-Request-ID.
documentationstringلا"https://api.genderapi.io/api/v2/errors"رابط إلى فهرس الأخطاء، إن وُجد.
actionstringلا"correct_request"إجراء التصحيح المقترح، إن كان محددًا في فهرس الأخطاء.
errorsarray<object>لا[{"pointer":"/value","message":"must NOT have fewer than 1 characters"}]مشكلات التحقق، إن توفرت. يحتوي كل عنصر على pointer وmessage.
errors[].pointerstringلا"/value"JSON Pointer يحدد المُدخل غير الصالح.
errors[].messagestringلا"must NOT have fewer than 1 characters"شرح لمشكلة التحقق.

البيانات الوصفية للوصول والخصم والطلب

الحقلالنوعيمكن أن يكون nullمثالالوصف
meta.request_idstringلا"550e8400-e29b-41d4-a716-446655440000"معرّف فريد لمحاولة HTTP هذه؛ ويُرسل أيضًا في X-Request-ID.
meta.duration_msintegerلا42مدة معالجة الطلب بالمللي ثانية.
meta.access.modestringلا"api_key"api_key أو ip_trial أو unauthenticated. عند استخدام حساب مدفوع، تحقّق من ظهور api_key.
meta.access.reasonstringنعمnullسبب الانتقال إلى التجربة حسب عنوان IP: api_key_missing أو api_key_invalid أو api_key_not_found؛ وإلا null.
meta.usage.charged_creditsintegerنعم1صافي الأرصدة المخصومة. صفر قبل الخصم أو بعد استرداد كامل مؤكد؛ وnull إذا لم يُؤكَّد الخصم.
meta.usage.remaining_creditsintegerنعم99الرصيد عند اكتمال العملية. قد يكون سالبًا؛ وnull إذا لم يتوفر أو لم يُؤكَّد الخصم.
meta.usage.billing_statusstringلا"confirmed"not_charged أو confirmed أو unconfirmed. تحقّق منه قبل إعادة محاولة تقدير فاشل.
meta.usage.resets_atstringنعم"2026-09-27T12:00:00.000Z"موعد تجديد التجربة حسب عنوان IP بتوقيت UTC (ISO 8601)؛ وnull لحسابات مفاتيح API أو إذا كان غير معروف.
meta.usage.limitintegerنعم10حصة التجربة حسب عنوان IP؛ وnull لحسابات مفاتيح API.
meta.usage.period_secondsintegerنعم86400مدة فترة التجربة حسب عنوان IP بالثواني؛ وnull لحسابات مفاتيح API.

إعادة المحاولة والخصم

كل طلب تقدير عملية جديدة، حتى عند إعادة إرسال طلب مطابق. تنطبق قواعد الأرصدة المعتادة على كل طلب. لا توجد حماية من الطلبات المكررة، لذا تجنّب إعادة المحاولة التلقائية بعد انقطاع الاتصال أو عندما لا تُعرف نتيجة العملية.

عند استجابة 429، انتظر المدة المحددة في Retry-After قبل إرسال طلب آخر. عند فشل التقديرات، افحص أولًا code وaction وmeta.usage.billing_status. عند billing_reconciliation_required أو الخصم غير المؤكد، تواصل مع فريق الدعم مع ذكر request_id قبل إعادة المحاولة.

قد يعيد الطلب المجمّع الناجح جزئيًا HTTP 200. افحص كل عنصر، وبعد تأكيد الخصم أعد إرسال العناصر الفاشلة فقط؛ إذ ستُخصم أرصدة العناصر الناجحة مرة أخرى إذا أُعيد إرسالها.

يعرّف X-Request-ID وmeta.request_id محاولة HTTP الحالية. اقرأ الرصيد الحالي عبر /usage. لا يبدأ HEAD تقديرًا مدفوعًا. لا تُخزَّن استجابات التقدير والحساب مؤقتًا.

يجب أن تتقبّل برامج العميل حقول الاستجابة الإضافية، وأن تحتفظ بقيم null عندما لا تتوفر المعلومة.

حدود الطلبات

تعامل مع HTTP 429 وRetry-After بدلًا من افتراض أن الطلبات ستُقبل دائمًا حتى هذه الحدود القصوى. سعة الخدمة مشتركة. القيم المعروضة هي الإعدادات الافتراضية الحالية للخدمة. تتضمن استجابات تحديد المعدل X-RateLimit-Limit وX-RateLimit-Remaining وX-RateLimit-Reset (بثواني Unix). وقيمة Retry-After مدة انتظار بالثواني. تصف هذه الترويسات حدود الطلبات، لا الأرصدة المتبقية. حتى قراءة /usage المجانية تُحتسب ضمن حدود معدل الطلبات.

الحدالقيمة
جسم طلب JSON64 KiB كحد أقصى
قيمة التقدير1–254 حرفًا
الطلب المجمّع50 عنصرًا مع مفتاح API؛ و10 عناصر في التجربة حسب عنوان IP
المعدل لكل حساب120 طلبًا في الدقيقة
المعدل لكل عنوان IP600 طلب في الدقيقة
العمليات المتزامنة2 لكل حساب؛ و16 على مستوى الخدمة كلها