--- 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/)