القائمة

التحقق من العنوان مقابل التطبيع: مهمتان مختلفتان

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

تاريخ النشر

  • بيانات اختبار
  • عنوان
  • التحقق

يعامل التحقق من العنوان والتطبيع كنشاط واحد في معظم المشاريع، والخلط بينهما يستهلك من الفرق وقتا حقيقيا. أحدهما يعيد تنسيق قيمة حتى تتطابق كتابتان مختلفتان للعنوان نفسه؛ والآخر يحاول الإجابة عما إذا كان العنوان موجودا وقابلا للتسليم إليه. وكلاهما يستخدم بيانات مختلفة، ويفشل بطرق مختلفة، ويستحق في مجموعة الاختبار تأكيدات مختلفة تماما.

تفصل هذه المقالة بين الاثنين، وتشرح لماذا لا تحتفظ أي جهة بقائمة عناوين عالمية كاملة، وتصف ما يستطيع النظام ادعاءه بصدق بعد تشغيل أي منهما.

ماذا يفعل التطبيع فعليا؟

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

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

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

ما الذي يحاول التحقق إثباته؟

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

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

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

والثالث وجودي: هل يوجد فعلا مبنى بهذا الرقم في هذا الشارع. هذا يحتاج مجموعة بيانات محلية موثوقة، ولا تنشر إلا بعض البلدان مجموعة كاملة بما يكفي للإجابة عليه.

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

السؤال ما يطلبه ما يحتاجه
بنيوي هل توجد الحقول المطلوبة، وهل المحارف في المجموعة المسموحة، وهل الطول معقول لا بيانات مرجعية إطلاقا
علائقي هل يقع الرمز البريدي في نطاق تستخدمه المنطقة المذكورة، وهل يتسق رمز الولاية معه، وهل يوافق البلد رمز تقسيمه بيانات مرجعية، دون قاعدة عناوين
وجودي هل يوجد فعلا مبنى بهذا الرقم في هذا الشارع مجموعة بيانات محلية موثوقة، ولا تنشرها إلا بعض البلدان

هل توجد قاعدة عناوين عالمية؟

لا توجد واحدة كاملة وموثوقة ومحدثة. يحتفظ مشغلو البريد ببيانات تسليمهم لأقاليمهم وبشروطهم، وكثير منهم لا ينشر قائمة على مستوى العنوان إطلاقا. وحيث توجد مجموعات وطنية، فهي تغطي ذلك البلد وبلغته وبنيته. ولا يوجد سجل واحد يمكن لمزود أن يراجعه ليقرر إن كان عنوان عشوائي في أي مكان على الأرض موجودا.

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

والخلاصة العملية أن عبارة عنوان متحقق منه ليست ادعاء يقدر نظامك على سنده عالميا. أما صحيح بنيويا ومتسق مع البيانات المرجعية المتاحة لنا فهذا ادعاء يقدر على سنده، وهو الذي يستحق أن يوضع في الوثائق.

لماذا يهم الترتيب هنا؟

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

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

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

للمطورين: القواعد والتجاوزات ومجموعات الاختبار

لا تحاول التحقق من عنوان بتعبير نمطي واحد. فالتنوع يسكن الأجزاء التي يكون التعبير النمطي أسوأ ما فيها—أسماء الشوارع وتفاصيل الوحدات وأنظمة الكتابة غير اللاتينية—واليقين يسكن الأجزاء التي تستطيع فحصها مقابل قائمة. احفظ الأنماط لفحوص الطول والمحارف، وأبق فحوص المرجع في البيانات.

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

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

ولمجموعة اختبار، أكد السلوكين باستقلال: أن مدخلا غير مرتب معينا يطبع إلى سلسلة قياسية متوقعة، وأن زوجا غير متسق من الحقول يرفض. وعندما تتغير القائمة المرجعية، يجب أن تتحرك المجموعة الثانية وحدها.

الخطوات التالية

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

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

تابع القراءة

أدلة منشئ العناوين الوهمية