VOL85: A Revisit to REST API Fundamentals
أهلًا وسهلا بكم في العدد الخامس والثمانين من النشرة الأسبوعية لاقرأ-تِك 🚀
لا تنسوا أهلنا من صالح الدعاء في هذا البرد,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد الخامس والثمانين من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية، من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة، ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
A Revisit to REST API Fundamentals
API Authentication Methods
Agile in Working Environment Using Single Paper
إصدارات - الإصدار الأول من مدونات فطين في تصميم النظم
A Revisit to REST API Fundamentals
بندرس دايمًا ال API Pillars في الجامعة أو في بداية شغلنا مع ال APIs ولكن بنقعد فترة طويلة مش قادرين نعكس دا علي شغلنا أو بنطبقها لأن لاقينا النظام كله كدا, النهارده هنراجع علي أهم خمس مبادىء مع Reflection ازاي نقدر نطبق كل مبدأ في شغلنا بسهولة .
1. Stateless
يعني كل Request بيبعت للـServer كل البيانات اللي محتاجها علشان يتنفّذ، من غير اعتماد على أي حالة متخزنة في الـServer بين الطلبات.
مثال
لو عندك API بيجيب بيانات المستخدم:
GET /users/15
Authorization: Bearer <token>
كل Request لازم يكون فيه الـToken، حتى لو نفس المستخدم كان عامل Request قبل كده.
ازاي نطبق المبدأ في الشغل
اوعى تعتمد على Session في الـServer فأي معلومة يحتاجها الـServer لازم تيجي مع كل Request.
استخدم Tokens (زي JWT) علشان تحقق الـAuthentication.
2. Client–Server Separation
الـClient (الموبايل/الويب) لازم مفصول تمامًا عن الـServer. كل واحد ليه دور واضح.
مثال
الـFrontend يطلب:
GET /productsالـBackend يرد بـJSON من غير ما يعرف إزاي الواجهة هتعرضه.
دا بيساعدنا في إعادة استخدام ال Backend مع (ويب, موبايل, تابلت) و بيسرع عملية التطوير لأن الفرق كلها تقدر تشتغل في نفس الوقت من غير ما يكون في اعتماديات بينهم.
ازاي نطبق المبدأ في الشغل
خليك مركز إن الـBackend يقدّم بيانات وعمليات بس.
بلاش تدمج لوجيك العرض (UI logic) جوّا الـAPI.
3. Uniform Interface
لازم يبقى فيه أسلوب ثابت وواضح للتعامل مع الـAPI. دا بيساعد على سهولة الفهم وتحسين وتسريع ال Maintainability لأن كل المبرمجين قادرين يفهموا الكود بسهولة.
مثال على Uniformity
استخدام HTTP Methods بشكل سليم:
GET = تعني دائما قراءة Resource
POST = تعني دائمًا إضافة Resource
استخدام نفس شكل الـEndpoints:
/users /users/<user_id>/ordersازاي نطبق المبدأ في الشغل
حافظ على Consistency في تسمية الـRoutes.
استخدم نفس شكل الردود (Response Format) في كل مكان.
بلاش تدمج أفعال في الـURL (زي /getUsers أو /deleteUser).
4. Cacheability
كل ال Responses من ال Server لازم توضح هي cacheable أو لاء
مثال
Response Header:
Cache-Control: max-age=3600
معناه إن البيانات دي صالحة لمدة ساعة.
ازاي نطبق المبدأ في الشغل
استخدم
Cache-Controlفي Endpoints اللي بياناتها مش بتتغير كتير.لو البيانات بتتغير باستمرار، استخدم
no-cacheأوno-store.
5. Layered System
الـClient مش لازم يعرف هو بيتعامل مع Server واحد ولا أكتر.
ده يسمح إنك تضيف Layers زي: Load Balancer, Caching Servers, Proxies.
مثال
العميل يبعت:
GET /products
وهو مش عارف إن الـRequest راح على Cache Layer قبل Server.
المبدأ دا بيدينا قابلية للتوسّع لو هنزود Servers أكثر ومعاها Load Balancer و بيزود الأمان لأنك تقدر تضيف Gateways و Security Filters.
ازاي نطبق المبدأ في الشغل
أنت كمبرمج Backend هتكتب الـAPI عادي.
تسيب موضوع الـInfrastructure لـDevOps بس لازم تكتب API نظيف يشتغل مع أي Layer بسهولة .
API Authentication Methods
أثناء تعاملنا مع ال APIs بنحتاج نعمل User Authentication واللي هي عبارة عن عملية التحقق من هوية المستخدم اللي باعت ال Request, ودا جانب هام جدُا في حماية الـ API وكذلك خصوصية وأمان المستخدمين.
فورقة وقلم و تعالوا نتعرف على أشهر 5 طرق من ال User Authentication Methods. 🚀
Basic Authentication
دا أبسط نوع وفيه بنبعت اسم المستخدم وكلمة المرور في ال Request في صيغة Base64 , طبعًا النوع دا منخفض الأمان ومش بنستخدمه في الـ Production Environment إلا علي HTTPS Connection, لأن ال Base64 Encoding بيتحل بأي Decoder على الإنترنت فلو ال Eequest اتعرض ل Eavesdrop Attack يقدر المهاجم بسهولة يعرف بيانات المستخدم.
الاستخدام المناسب:
مناسب للاستخدام في وقت التطوير أو الـ Testing
ممكن نستخدمه في التطبيقات الداخلية واللي ضامنين إنها على شبكة آمنة.
GET /protected-resource HTTP/1.1
Host: example.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=API Key Authentication
ال API Keys عبارة عن مفاتيح أو “رموز تعريف” بيصدرها ال API لل Clients ودور ال Client أنه يبعتها مع كل Request لل API كوسيلة تحقق من هوية المستخدم. ال Client ممكن يبعتها ك Query String أو يحطها في ال Request Header أو حتي ك Cookie.
وزي ال Basic Authentication لازم نستخدمه علي HTTPS Connection لأن لو أي حد عرف ال API Key هيقدر ينتحل شخصية ال Client ويستعمل ال API باسمه.
الاستخدامات المناسبة:
بتكون في بيئات التطوير و الاختبار أو في التطبيقات الداخلية
ممكن نستخدمه في الـ Production ولكن مع وسائل أخري نزود بيها معامل الأمان.
💡ونلاحظ واحدة من أهم عيوب الـ API Key إنه مش بيدي User-Specific Permissions لأنه مصمم بالأساس عشان يستخدم بين ال Apps أو ال Services وبعضها.
JWT-Based Authentication
ال JWT من أفضل و أشهر الطرق المستخدمة في الـ Authentication ونقدر نقول إنها شبه فكرة الـ API Key ولكن المفتاح - في الحالة دي ال Token - بيكون Encrypted بطريقة أحسن من الـ API Key.
ومن أكبر مميزاتها إنك مش مضطر تخزن ال Token لكل Client علي ال Server زي ما بنعمل مع الـ API Keys وده بيخليها طريقة Scalable واتكلمنا عن ال JWT في ورقة كاملة نشجعكم تقرأوها.
OAuth 2.0
الطريقة دي مستخدمة عشان نعمل User Authentication للمستخدم بدون ما نعرف اسمه أو كلمة مروره بشكل حقيقي ودا مناسب في حالة الـ Third-Party Authentication واللي تعتبر شكل شائع من أشكال الـ Authentication هذه الأيام.
Agile in Working Environment Using Single Paper
يبدو تطبيق الـ Agile في كثير من المؤسسات كمشروع ضخم يحتاج إلى اجتماعات لا تنتهي، والـ Presentations، والـ Plans المعقدة.لكن الحقيقة أن فشل الـ Teams لا يحدث بسبب نقص الـ Frameworks، بل بسبب غياب التركيز، وعدم وضوح الـ Roles، وضعف الاتساق مع الـ Execution.
ومن هنا تأتي قيمة خطة الـ Agile ذات الورقة الواحدة، التي تختصر رحلة الـ Transformation في صفحة واحدة عملية يمكنها توجيه الـ Team بدون تعقيد.
لماذا الورقة الواحدة فعّالة؟
لأنها تجبرك على:
التخلص من الـ Theoretical details غير الضرورية
صناعة فهم مشترك بين الـ Management والـ Teams
جعل الـ Process مرئي وقابل للقياس
الاعتماد على أقل عدد من الـ Rules التي تحقق أكبر قيمة
الـ Agile ليس عن إضافة المزيد، بل عن تقليل الـ Waste مع زيادة الـ Value.
مكونات خطة الـ Agile في ورقة واحدة
قم بتقسيم الورقة إلى 6 أقسام رئيسية:
1- الرؤية (Agile Vision)
ما الـ Problem الذي نريد حله؟
كيف يبدو الـ Success بعد الـ Agile؟
مثال: “تسليم الـ Value كل أسبوعين، مع شفافية أعلى والـ Feedback أسرع.”
2- تشكيل الفرق (Team Setup)
توزيع الـ Squads و الـ Members داخل كل فريق
تحديد: من الـ Product Owner؟ من الـ Scrum Master؟ من الـ Developers؟
3 نقاط مختصرة تلخص الـ Responsibilities لكل دور
3- الجدول الزمني والاجتماعات (Cadence & Events)حدد فقط الـ Timing:
مدونات فطين في تصميم النظم - الإصدار الأول 🚀
كتابة هذا الكتاب لم تكن قرارًا مخططًا... بل كانت نتيجة لتراكمات من الحيرة، الإحباط، والدهشة اللي بيواجهوا أغلب الشباب حاليًا خصوصًا في رحلة البحث عن تعلم مهارات تصميم النظم واللي أصبحت من المهارات الأساسية في الانترفيوهات بالإضافة لكونها مهمة فعلًا على جميع المستويات.
على مدار سنوات من العمل داخل شركات تكنولوجية متعددة، وجدت نفسي مرارًا أواجه بعض الأسئلة زي:
لماذا صُمّم هذا النظام بهذه الطريقة؟
لماذا لم نرَ المشكلة إلا بعد فوات الأوان؟
هل كان يمكن أن نصمم الأمر بشكل أبسط؟
الإجابات كانت دائمًا معقدة، وتعود لأبعاد تقنية وتنظيمية ونفسية أيضًا.
هذا الكتاب ليس دليلًا أكاديميًا، بل هو مجموعة من التجارب والخبرات العملية كتبتها بعين المهندس الذي يراقب، يسأل، ويُخطئ ثم يتعلّم. المجموعة دي لم يتم ترجمتها للعربية من مدونات الشركات العالمية .. بل تم اعادة شرحها وتبسيطها باللغة العربية بأسلوب مختلف حتى تتسم بالبساطة بالإضافة لتميزها بالرسوم التوضيحية الجذابة.
اخترت اسم "فَطين" لأنه الشخصية التي تمنيت لو كانت موجودة معي منذ البداية— يسأل الأسئلة الصحيحة، ويفكّر بصوت عالٍ، ويحكي لك الدروس المستفادة.
إن كنت مهندسًا في بداية الطريق، أو تعمل منذ سنين ولديك خبرة متوسطة أو متقدمة في تصميم وبناء النظم فهذا الكتاب كتبته لك ليكون مرجعًا عمليًا لك يساعدك في تطوير مهاراتك التحليلية والفكرية في بناء وتطوير النظم الضخمة.
يتناول الكتاب ما يعادل من 15 تجربة عملية مميزة من داخل الشركات العالمية في تصميم النظم الضخمة بأكتر من 160 صفحة ويضم الآتي :
Introduction Into System Design
How Uber Serves Over 40 Million Reads Per Second
How Discord Stores Trillions of Messages
Dropbox's Chrono: Scalable, Consistent and Metadata Caching Solution
Unlocking Notion's Power - The Data Model Explained
How Shopify Mitigates Deadlocks in High Concurrency Environments
How LinkedIn Improves Microservices Performance With Protobuf
How Figma Secures Internal Web Applications
How GitHub Improves Reliability of Code Push Processing
How Meta Leverages AI For Efficient Incident Response
How Stripe Architected Massive Scale Observability Solution on AWS
Change Data Capture at Pinterest
How Canva Built Scalable and Reliable Content Usage Counting Service
How Netflix Migrates Critical Traffic at Scale With No Downtime
How Slack Handles Billions of Tasks in Milliseconds
How YouTube Supports Billions of Users With MySQL
System Design Comprehensive Guide
تقدروا تشوفوا النسخة كاملة من هنا كـ E-Book ، وحاولنا نخليها بسعر رمزي يناسب الجميع 👇
وكمان وفرناه على Kindle عشان الناس اللي بتحب تجربة القراءة على الـ Kindle منحرمهاش من التجربة الممتعة دي 🎉
بفضل الله أصبح متاح حاليا دعمنا من خلال الرعاة والشراكات وفعلنا الـ Sponsorship واحنا بنرحب بجميع الشراكات مع المؤسسات والشركات وأصحاب الأعمال لبناء مجتمع عربي يشجع على القراءة والتعلم ومشاركة التجارب والخبرات العملية في هندسة البرمجيات.
دورك كشريك أو راعي هيكون محوري في دعم المحتوى وتوسيع نطاق تأثيره. فانضم لرحلتنا وكن جزءًا من صناعة مستقبل التكنولوجيا في المنطقة 🚀
تقدروا تشوفوا التفاصيل كاملة من هنا والـ Analytics بتاعتنا من خلال اقرأ-تِك والنشرة الأسبوعية 👇
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇









