"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > دليل لتصميم REST API واتفاقيات التسمية

دليل لتصميم REST API واتفاقيات التسمية

تم النشر بتاريخ 2024-11-06
تصفح:615

Guide to REST API Design and Naming Conventions

يعد تصميم واجهات برمجة تطبيقات RESTful بشكل فعال أمرًا بالغ الأهمية لإنشاء أنظمة قابلة للتطوير وقابلة للصيانة وسهلة الاستخدام. على الرغم من وجود معايير معينة، فإن الكثير منها ليس قواعد صارمة، بل هو أفضل الممارسات لتوجيه تصميم واجهة برمجة التطبيقات. أحد الأنماط المعمارية المستخدمة على نطاق واسع لواجهات برمجة التطبيقات هو MVC (Model-View-Controller)، ولكنه وحده لا يعالج الجوانب الدقيقة لتصميم واجهة برمجة التطبيقات مثل التسمية والبنية. في هذه المقالة، سنتعرف على الإرشادات الأساسية لبناء واجهات برمجة تطبيقات REST.

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

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

/users للوصول إلى مجموعة المستخدمين.
/users/{userId} للوصول إلى مستخدم معين.
الاتساق: يجب أن تكون واجهة برمجة التطبيقات (API) بديهية. إذا كان بإمكان المستخدم جلب قائمة الموارد من /users، فيجب أن يتوقع أن يكون قادرًا على جلب الموارد الفردية عن طريق إضافة معرف: /users/{userId}.

المجموعة مقابل المورد الفردي:

يتم تمثيل مجموعة الموارد باسم الجمع: /users، /products.
يتم تمثيل مورد واحد عن طريق إلحاق المعرف الفريد لذلك المورد: /users/{userId}, /products/{productId}.

  1. طرق HTTP تحدد الإجراء، وليس URI يجب ألا يتم تضمين الإجراء الذي يتم تنفيذه (سواء كان استرداد البيانات أو إنشاء إدخالات جديدة أو تحديث البيانات الموجودة) في معرف URI. بدلاً من ذلك، تحدد طريقة HTTP الإجراء.

طرق HTTP الشائعة وحالات استخدامها:
الحصول على: استرداد البيانات من الخادم.

مثال: يقوم GET /products بإرجاع قائمة بجميع المنتجات.
مثال: يقوم GET /users/{userId} باسترداد المستخدم بمعرف المستخدم المحدد.
POST: إنشاء مورد جديد على الخادم.

مثال: يقوم POST /users بإنشاء مستخدم جديد.
PUT: استبدال مورد موجود ببيانات جديدة (تحديث كامل).

مثال: يستبدل PUT /users/{userId} بيانات المستخدم بالكامل ببيانات جديدة.
التصحيح: تحديث جزئي لمورد موجود (تحديث جزئي).

مثال: يقوم PATCH /users/{userId} بتحديث السمات المحددة فقط، مثل رقم الهاتف.
حذف: حذف مورد.

مثال: DELETE /users/{userId} يحذف المستخدم باستخدام معرف المستخدم المحدد.

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

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

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

الحل: لإدارة الجلسة، استخدم أنظمة تخزين مركزية أو موزعة مثل Redis أو آلية مصادقة عديمة الحالة مثل JWT (JSON Web Token).

  1. جداول الموارد مقابل جداول قاعدة البيانات لا ينبغي أن يحتوي تصميم واجهة برمجة التطبيقات (API) لديك على تعيين واحد لواحد بين جداول قاعدة البيانات ونقاط نهاية واجهة برمجة التطبيقات (API). يجب أن تكشف واجهة برمجة التطبيقات (API) عن موارد منطقية وذات معنى قد تجمع بيانات من جداول أو مصادر متعددة.

مثال:
قد يقوم GET /orders/{orderId} باسترداد تفاصيل الطلب، ودمج المعلومات من الطلبات، وorder_items، وجداول العملاء.

  1. المرونة في أنواع البيانات واجهات برمجة تطبيقات REST ليست مقيدة بأنواع البيانات أو بنيات الجدول الخاصة بقاعدة البيانات. يمكنك تنظيم ردودك بطريقة تخدم عملاء واجهة برمجة التطبيقات (API) على أفضل وجه. على الرغم من أن تنسيق JSON هو التنسيق الأكثر استخدامًا، إلا أنه يمكنك إرجاع البيانات بتنسيقات أخرى مثل XML أو CSV إذا لزم الأمر.

مثال: قد تقوم نقطة نهاية GET /reports/{reportId} بإرجاع تقرير بتنسيقات متنوعة (JSON، CSV، PDF) بناءً على معلمات الاستعلام أو الرؤوس في الطلب.
مثال على بنية واجهة برمجة التطبيقات
لربط كل هذه المبادئ معًا، إليك نموذج لبنية واجهة برمجة التطبيقات (API) التي تتبع أفضل الممارسات التالية:

الحصول على /المنتجات: استرداد كافة المنتجات.
GET /products/{productId}: استرداد تفاصيل منتج معين.
POST / المنتجات: إنشاء منتج جديد.
PUT /products/{productId}: يستبدل المنتج بمعرف المنتج.
التصحيح /المنتجات/{productId}: يقوم بتحديث المنتج جزئيًا.
حذف /المنتجات/{productId}: لحذف المنتج.
في هذه البنية، يتم تعريف الموارد بوضوح، وتحدد أساليب HTTP الإجراء الذي سيتم اتخاذه، مما يضمن واجهة برمجة تطبيقات نظيفة وبديهية.

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

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

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/rahul_ranjan_7200/guide-to-rest-api-design-and-naming-conventions-46co?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3