🔵 GET Method
-
الغرض: جلب بيانات من السيرفر (قراءة فقط) Read Only (Retrieve) data.
- من اسمها كدا انا ب get data من ال server، فبالتالي انا ببعت ال request دا من غير payload (request body)
-
آمن؟ نسبيًا غير مناسب لحاجات حساسة (زي Password)
-
Idempotent؟ ✅ نعم – تقدر تعيد نفس الطلب وهيرجع نفس النتيجة
- لو عايز اجيب data كبيره وليكن مثلا عندي category اسمها courses فانا هحدد ال recourse بس الي هو courses وكدا هجيب كل الكورسات الي عندي بكل الداتا بتاعتهم
لو عايز جزء معين من الكورسات اقدر ازود query parameter
سواء في كورسات مشتركين في key و value، او اقدر احدد عدد صفح عايزه pagination
قدر اضيف فلتر للـ data الي عايزها وليكن عايزه يرتب الكورسات الاول ابجدي وبعدين يتجاهل اول ١٠ ويجيب الباقي
اقدر اجيب كورس واحد بس بالبيانات بتاعته عن طريق ال path parameter لو انا عارف ال id الخاص بالكورس دا فبالتالي كدا حجم ال request دا هيعتمد علي حجم الداتا الي عايز اجيبها response - مثال:
GET /books?id=15
→ يرجّع كل كتاب له id معين
🟠 POST Method
-
الغرض: إنشاء كائن جديد أو تنفيذ عملية تحتاج Body
- وطالما هكتب data فانا اكيد محتاج احدد هكتبها فين🤷 فبالتالي هنا برضو بعد ال endpoint بحدد ال resource الي عايز ازود عليه بيانات
🔹 واكيد طبعا لازم اكتب البيانات دي، وليكن عايز اضيف كورس جديد، فهحتاج يكون عندي payload (body) فيه كل البيانات الخاصه بالكورس دا، واكيد لازم اكون عارف كل ال keys الموجوده في اي object جوا ال resource دا علشان مقعش في ال bad request
🔹 حجم ال request هنا معتمد علي حجم ال object الموجود ف الكورس دا، فهنا هو حجمه ثابت علي عكس ال GET
🔹 والنقطه المشتركه ان الاتنين معتمدين على header parameters
🔹 ممكن تكون accept لو ال app بتاعي دا بيقبل مثلا JSON data بس
🔹 الـ authentication
🔹 وكذلك ال Authorization مهم، المفروض مين يوصل لل data ومين يضيف ويعدل -
مكان البيانات: في Body من الطلب
-
آمن؟ أكتر شوية من GET لأنه مش بيظهر في الـ URL
-
Idempotent؟ ❌ لأ – كل طلب ممكن يغيّر حاجة أو يعمل حاجة جديدة
-
مثال:
POST /register
→ يسجل مستخدم جديد
🚀الخلاصة: 👈
🔹 الـ Get ليس لها body ولكن الـ Post لها body
🔹 في الـ Get يتم وضع الـ Parameter في الـ URL في الـ Post يتم وضعها في الـ Body
🧐 طيب إمتى نستخدم POST بدل GET؟
✅ في الحالات اللي:
البيانات المطلوبة كبيرة أو معقدة (ما تنفعش كـ Parameter في URL لأن له Max length وبالتالي يتم إرسالها في الـ Body بإستخدام الـ Post
الطلب يحتوي على معلومات حساسة (مثال: استعلام بناءً على رقم بطاقة او في حالة تسجيل الدخول )
الطلب بيحتاج فلترة معقدة جدًا أو قواعد مخصصة
- الـ Requirement مذكور فيها هذا
السيرفر نفسه بيطلب POST (حتى لو بيرجع بيانات)
في حالة رفع الصور.