رقم الطلب المكوّن من 19 خانة في رد واجهة API تغيّرت آخر أرقامه بعد التنسيق، فكيف أحافظ عليه؟

لأن JavaScript، الذي يعمل به المتصفح، يحفظ الأعداد الصحيحة بدقة حتى 9007199254740991 فقط، وأي عدد أطول يُقرَّب حين تُعاد كتابة JSON. منسّق JSON يعرض كل عدد من هذا النوع في تحذير لتنتبه قبل النسخ. والحل الدائم أن يرسل النظام المعرّفات نصوصًا بين علامتي تنصيص.

نُشر في · دقائق قراءة: 2

ما الذي حدث بالضبط؟

رد من واجهة برمجة لمنصة أو بوابة دفع فيه رقم طلب طويل:

{"order_id":1234567890123456789}

بعد التصغير في الأداة:

{"order_id":1234567890123456800}

آخر ثلاث خانات تغيرت من 789 إلى 800. الطول نفسه 32 بايت، فلا شيء في الحجم يلفت انتباهك. لكن الأداة تعرض تحت النتيجة تحذيرًا بعنوان: أعداد صحيحة أكبر من أن تُحفظ بدقة في JavaScript، وقد تغيّرت في الناتج، ويليه العدد الأصلي 1234567890123456789.

لماذا 9007199254740991 تحديدًا؟

JavaScript يخزن كل الأعداد بطريقة واحدة تحفظ بدقة كل عدد صحيح حتى هذا الحد، وهو 2 أس 53 ناقص 1. بعده تبدأ الفجوات: لا يستطيع التمييز بين كل عددين متتاليين، فيختار أقرب عدد يستطيع حفظه. مثال صغير يوضح الحد: 9007199254740991 يبقى كما هو ولا تحذير، أما 9007199254740993، وهو أكبر منه باثنين، فيصبح 9007199254740992 مع تحذير.

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

كيف تحافظ على الرقم؟

  1. لا تنسخ الناتج إن ظهر تحذير الأعداد الكبيرة. ارجع إلى النص الأصلي، فالرقم فيه صحيح.
  2. إن كنت تحتاج قراءة الرد فقط، فاقرأ الرقم من النص الأصلي لا من الناتج.
  3. الحل الدائم في المصدر: اطلب من مطوّر النظام أو ابحث في توثيق الواجهة عن خيار يعيد المعرّفات نصوصًا. بعض الواجهات توفر حقلًا نصيًا موازيًا للمعرّف الرقمي، فراجع توثيقها.
  4. حين يكون المعرّف نصًا، مثل "order_id":"1234567890123456789"، تحفظه الأداة كما هو تمامًا لأنها لا تمس النصوص.

أين تظهر المشكلة نفسها؟

ليس في هذه الأداة وحدها. أي برنامج يقرأ JSON بأعداد JavaScript العادية سيقرّب الرقم بالطريقة نفسها: لوحة تحكم مبنية على الويب، أو إضافة جداول، أو أداة تحويل. لذلك تصلح الأداة هنا كاختبار سريع: الصق ردًا من الواجهة، فإن ظهر التحذير فاعلم أن معرّفاتها ستتضرر في أي مكان يقرؤها بالطريقة نفسها.

وإن كنت ستحوّل الرد إلى جدول عبر محوّل CSV و JSON، فتحقق من أرقام الطلبات في الناتج قبل الاعتماد عليه، أو اجعلها نصوصًا في المصدر أولًا. ويمكنك فحص الرد أولًا في منسّق ومدقّق JSON.

أسئلة شائعة

هل تتأثر الأسعار العشرية بهذا؟

لا. التحذير يخص الأعداد الصحيحة الطويلة، من 16 خانة فأكثر، التي تتجاوز الحد. الأسعار العادية لا تقترب منه.

كم عددًا يعرض التحذير؟

حتى 20 عددًا في النتيجة الواحدة، وهذا يكفي لتعرف أن المشكلة قائمة.

هل يمكن أن تحفظ الأداة الرقم الطويل عددًا دون تقريب؟

لا. تستخدم محلّل المتصفح القياسي ولا تصلح شيئًا، والحل أن يكون المعرّف نصًا.