المطلوب
تاخد لينك طويل وترجع لينك قصير، ولما حد يفتح القصير يتحوّل للطويل. السيستم ده قراءته أكتر بكتير من كتابته — زي مطعم الناس بتيجي تاكل فيه أكتر ما بتطلب منيو جديد.
الـ 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 الجاي ممكن يتخمّن |
Long URL
موجود في DB؟
ID جديد
Base62
احفظ
Checklist الـ URL Shortener
🧠 اختبر نفسك
١) ليه 302 أنسب لو عايز تعد الكليكات؟
لأن البراوزر بيرجعلك كل مرة، فالسيرفر بيشوف الفتحة. الـ 301 بيتخزن عند اليوزر.
٢) إيه ميزة base62 من ID على الهاش؟
مفيش تصادم، لأن الـ ID فريد أصلًا.
٣) إيه عيب إن الـ ID متسلسل ويتحوّل لـ base62؟
اللينك الجاي ممكن يتخمّن، وطول اللينك بيتغير مع الوقت.
٤) فين تحط الكاش؟
قدام الداتابيز، على تحويل اللينك القصير للطويل.