التصاميم · فصل ٨

تصميم URL Shortener

Short links · 301 vs 302 · base62 · cache
🎯 الهدف: تاخد لينك طويل وترجّع قصير، والقراية تفضل سريعة لأن الناس بتفتح اللينك أكتر ما بتعمله.

المطلوب

تاخد لينك طويل وترجع لينك قصير، ولما حد يفتح القصير يتحوّل للطويل. السيستم ده قراءته أكتر بكتير من كتابته — زي مطعم الناس بتيجي تاكل فيه أكتر ما بتطلب منيو جديد.

الـ API ونوع التحويل

  • POST /api/v1/data/shorten يرجّع اللينك القصير.
  • GET /api/v1/shortUrl يعمل redirect للطويل.
301 Permanent

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

302 Temporary

كل مرة بيعدي عليك، فتقدر تعمل analytics للكليكات. السيرفر بيشوف كل فتحة.

الـ hash يبقى طوله كام؟

بنستخدم حروف [0-9a-zA-Z] = ٦٢ حرف. ٧ حروف = 62⁷ ≈ ٣٫٥ تريليون. كفاية جدًا لمعظم الحالات.

الطريقةإزايملاحظات
Hash + تصادمتعمل hash (زي SHA-1) وتاخد أول ٧ حروف. لو اتكرر، تزود حاجة وتعيدلازم تسأل الداتابيز كل مرة. Bloom filter يساعد
Base62 من IDتاخد ID فريد (من فصل المولّد) وتحوّله لـ base62مفيش تصادم. طوله بيتغير، والـ ID الجاي ممكن يتخمّن

Checklist الـ URL Shortener

🧠 اختبر نفسك
١) ليه 302 أنسب لو عايز تعد الكليكات؟
لأن البراوزر بيرجعلك كل مرة، فالسيرفر بيشوف الفتحة. الـ 301 بيتخزن عند اليوزر.
٢) إيه ميزة base62 من ID على الهاش؟
مفيش تصادم، لأن الـ ID فريد أصلًا.
٣) إيه عيب إن الـ ID متسلسل ويتحوّل لـ base62؟
اللينك الجاي ممكن يتخمّن، وطول اللينك بيتغير مع الوقت.
٤) فين تحط الكاش؟
قدام الداتابيز، على تحويل اللينك القصير للطويل.