freeCodeCamp/guide/arabic/rest-api/index.md

106 lines
6.7 KiB
Markdown
Raw Normal View History

---
title: Rest API Design
localeTitle: بقية واجهة برمجة التطبيقات تصميم
--- ### التاريخ
REST لتقف على **إعادة** تقديم **S** tate **T** ransfer protocol. حدد روي فيلدنغ REST في أطروحته لنيل درجة الدكتوراه عام 2000.
### ما هذا؟
تم تطوير REST لتوفير واجهة موحدة لـ
* تحديد الموارد
* التلاعب في الموارد
* رسائل وصفية ذاتية
* استخدام Hypermedia كمحرك لدولة التطبيق (HATEOS)
### أفضل الممارسات
* \#### أساسيات
| الطريقة | http://api.co/v2/cars | http://api.co/v2/cars/1234 |
| --- | --- | --- | | الحصول على | قائمة جميع السيارات | استرجاع سيارة فردية | POST | إنشاء سيارة جديدة | خطأ | | ضع | استبدال مجموعات السيارات بأخرى جديدة | استبدل السيارة بالمعرف 1234 | | حذف حذف جميع السيارات | حذف سيارة بمعرف 1234 |
_ملاحظة أثناء عمليات PUT إما العميل أو الخادم يمكن إنشاء معرف_
* #### الأسماء هي أفعال جيدة سيئة
* استخدم الأسماء للإشارة إلى الموارد مثل `cars` `fruits` وما إلى ذلك.
* استخدام الأفعال لإعلانات العمل `convertMilesToKms` ، `getNutritionalValues`
* #### مفرد أم جمع؟
استخدم القواعد الصحيحة للإعلان
**تجنب** `/person/145`
**تفضل** `/people/154` افترض أن تعود 154 شخصًا من قائمة الأشخاص
* #### استخدم الغلاف
استخدام أي شخص من الأنماط أدناه وتكون **متسقة!**
| أنماط القضية مثال | | ------------- | ------------- | | **UpperCamelCase** | `http://api.fintech.cp/DailyTransactions/Today` | | **lowerCamelCase** | `http://api.fintech.cp/dailyTransactions/today` |
| **snake\_case** | `http://api.fintech.cp/daily_transactions/today` |
* #### **العلاقات والموارد**
* يمكن لموارد يكون `one-to-many` ، `many-to-many` ، `many-to-one` علاقات الخ رسم خريطة بشكل صحيح أمر بالغ الأهمية.
* **واحد إلى العديد من** الخرائط
على سبيل المثال ، تشير `Tickets/145/messages/4` إلى علاقة رأس بأطراف بين `tickets` `messages` . معنى `1` تذكرة لديها رسائل `N` الرسالة ليست موردًا مستقلًا. لا يمكن أن يكون لديك `/messages/4` .
* **العديد من العديد من** الخرائط
على سبيل المثال ، `/usergroups/345/users/56` يقترح اختيار مجموعة المستخدم 345th والحصول على المستخدم مع معرف 56. ومع ذلك ، قد يكون مستخدم واحد في `usergroups` متعددة أي `/usergroups/209/users/56` صالح أيضا. في مثل هذه الحالة ، وذلك لفصل `users` الموارد المخولين إلى نقطة نهائية منفصلة مثل `/users/56` وتوفير ارتباط الموارد في `/usergroups/209/users/56`
* #### **معلمات واجهة برمجة التطبيقات**
* **PATH** : _مطلوب_ للوصول إلى المورد Eg `/cars` ، `/fruits`
* **معلمات الاستعلام** : فلتر _اختياري_ القائمة Eg `/cars?type=SUV&year=2010`
* **Body** : منطق محدد للموارد. طلب بحث متقدم. في بعض الأحيان قد يكون له كل من الاستعلام والجسد.
* **العنوان** : يجب أن يحتوي على بيانات عالمية أو على مستوى النظام الأساسي. على سبيل المثال ، معلمات مفتاح API ، ومفاتيح مشفرة للمصادقة ، ومعلومات نوع الجهاز ، مثل الجوال أو سطح المكتب أو نقطة النهاية ، نوع بيانات الجهاز مثل xml أو json. استخدم رأس لتوصيل هذه المعلمات
* #### رموز حالة HTTP
استخدم رموز الحالة الصحيحة
| الرموز المعنى | | ------------- |: -------------: | | 1xx | تلقي الطلب وفهمه. | | 2xx | تم استلام الإجراء المطلوب من قبل العميل وفهمه وطلبه. | | 3xx | يجب على العميل اتخاذ إجراء إضافي لإكمال الطلب. يتم استخدام معظم رموز الحالة هذه في إعادة توجيه عنوان URL. | | 4xx | مخصص للحالات التي يبدو فيها أن الخطأ كان بسبب العميل. | | 5xx | فشل الخادم في تلبية الطلب. |
أكثر قليلا على **2xx** !
* **201 مورد تم إنشاؤه.** يجب أن تقوم POST `/cars` بإرجاع HTTP 201 الذي تم إنشاؤه باستخدام رأس `location` يوضح كيفية الوصول إلى المورد على سبيل المثال ، `location` : `api.com/cars/124` في رأس الصفحة
* **202 - مقبول**
استخدم هذا إذا كانت المهمة ضخمة للتشغيل. أخبر العميل ، لقد قبل الطلب وسوف / هي عملية / معالجة لا يتم إرجاع أي حمولة
* **204 - لا محتوى**
تستخدم عند حذف `DELETE cars/124` لا يعرض أي محتوى. ولكن يمكن أيضًا إرجاع `200 OK` إذا كانت واجهة برمجة التطبيقات تعتزم إرسال المورد المحذوف لمزيد من المعالجة.
موارد **5xx** خطيرة!
* **500** خطأ خادم داخلي
* **504** عبّارة المهلة. الخادم لم يتلق استجابة في الوقت المناسب
تشير **4xx** أقل شهرة إلى أنك تمر بمعلمة خاطئة. يمكن أيضا تمرير المعلومات التي هي خاطئة. على سبيل المثال
`DELETE /cars/MH09234`
إرجاع `4xx` أو رسالة `Expecting int car id /car/id got string car/MH09234`
### **قراءة متعمقة**
[كيفية تصميم واجهات برمجة التطبيقات (APIs) الرائعة - يوم تطوير المطور 2013](https://www.youtube.com/watch?v=qCdpTji8nxo)
[مناقشة تصميم REST API التي لا تنتهي من قبل غيوم لافورج](https://www.youtube.com/watch?v=48azd2VqtP0)
[رموز حالة HTTP](https://httpstatuses.com/)