null أم حذف الحقل
الخلاصة: `null` تعني أن الحقل موجود بلا قيمة؛ وحذفه يعني أن الحقل غير موجود. أجسام PATCH ودمج التهيئة والتعبئة المسبقة للنماذج هي حيث يعض الفرق.

الخلاصة: أرسل null عندما يجب أن يميز المستهلك «مُسح» من «لم يُمس» — في جسم PATCH، الحذف يترك الحقل كما هو وnull الصريح يمسحه — وأبقِ اصطلاحًا واحدًا لكل حقل لتبقى الاستجابات وعمليات دمج التهيئة ثابتة.
الفرق
{ "nickname": null }
موجود، لكنه فارغ. يعرف المستهلك أن الحقل مُسح صراحةً.
{ }
غائب. لا يستطيع المستهلك التمييز بين «لم يُضبط قط» و«غير مدعوم».
في JavaScript يكون التمييز ملموسًا:
'nickname' in obj // false — absent
obj.nickname === null // true — present and null
obj.nickname === undefined // true — both cases
أين يهم الأمر
أجسام PATCH. {"nickname": null} يمسح اللقب. و{} لا يغيّر شيئًا. إن عامل المعالج «null» و«مفقود» بالشيء نفسه، فلا يستطيع المستخدمون مسح الحقل أبدًا — يمكنهم فقط ضبط سلسلة فارغة، وهذا شيء مختلف.
نفّذ بحضور المفتاح لا بالقيمة:
if (Object.hasOwn(patch, 'nickname')) {
target.nickname = patch.nickname; // null allowed
}
دمج التهيئة. الحذف يرث الافتراضي؛ وnull يعطّله صراحةً. هذه بالضبط طريقة عمل قيم Helm وKubernetes.
التعبئة المسبقة للنموذج. null يُعرض فارغًا وكذلك الحقل المفقود، لكن الإرسال يختلف: كان له قيمة ثم مُسح ← أرسل null؛ لم يُملأ قط ← احذفه. بلا التمييز، يبدو المسح مطابقًا لعدم اللمس.
الاتفاقيات
| الحالة | الاتفاقية |
|---|---|
| أجسام الاستجابة | أبقِ null؛ شكل ثابت وأنواع أبسط |
| طلبات PATCH | null يمسح، والحذف يحفظ |
| PUT (استبدال كامل) | الحذف يعني الحذف — يُستبدل المستند كله |
| دمج التهيئة | الحذف = الافتراضي، وnull = معطّل |
| قاعدة البيانات | null للمجهول أو غير المنطبق؛ و'' للفارغ المعروف |
أبقِ أشكال الاستجابة ثابتة. إن قائمة تحمل بعض عناصرها avatar وبعضها لا تفرض فحوص 'avatar' in item في كل موقع استدعاء. وavatar: null أسهل في الاستهلاك.
ثلاثة أشياء لا تفعلها
لا تستخدم "" للدلالة على null. لقب فارغ ولقب غير مضبوط حالتان مختلفتان في معظم المجالات.
لا تستخدم 0 أو -1 كقيم حارس. الصفر عدد مشروع، والقيمة الحارسة تفسد كل متوسط تحسبه.
لا تخلط الاصطلاحات بحسب نقطة النهاية. اصطلاحان يعنيان مساري كود في كل عميل.
الأسئلة الشائعة
ما الذي يقرر بين null والحقل المحذوف؟
اسأل هل يحتاج المستهلك إلى التمييز بين «مُسح صراحةً» و«لم يُضبط قط». في جسم PATCH يجب ذلك، لذا null يمسح والغياب يحفظ؛ وفي الاستجابات، إبقاء null يجعل الشكل ثابتًا وأنواع العميل أبسط.
كيف تميز نقطة نهاية PATCH بين المسح والترك؟
افحص حضور المفتاح لا القيمة: Object.hasOwn(patch, 'nickname') يخبرك أن الحقل أُرسل، وعندها فقط عيّنه، بما في ذلك null. إن عامل المعالج null والمفقود بالشيء نفسه، فلا يستطيع المستخدمون مسح الحقل أبدًا ولا يجدون بديلًا سوى سلسلة فارغة.
لماذا ينبغي أن تبقي أجسام الاستجابة على null؟
الشكل الثابت يعني أن العملاء لا يحتاجون إلى فحص 'avatar' in item لكل مفتاح اختياري. وعندما تحمل بعض عناصر القائمة avatar ويحذفه بعضها، يتكرر ذلك الفحص في كل موقع استدعاء ويسهل الخطأ فيه.