REST API: ما هي، طرق HTTP ومبدأ العمل في التطبيقات المحمولة

المؤلف: IT Sectr نُشر: 2026-03-06 وقت القراءة: 9 دق

REST API — هو أسلوب معماري للتفاعل بين المكونات في شبكة موزعة، يعتمد على مبادئ الهندسة الموجهة للموارد ويستخدم بروتوكول HTTP لنقل البيانات. يتم تحديد كل مورد في REST بواسطة URL فريد ويدعم مجموعة من العمليات القياسية عبر طرق HTTP: GET و POST و PUT و PATCH و DELETE. وفقًا لـ ProgrammableWeb (2025)، تم بناء أكثر من 75% من جميع واجهات برمجة التطبيقات العامة على بنية REST، مما يجعلها المعيار الفعلي لتطوير التطبيقات المحمولة والويب. تضمن REST قابلية التوسع واستقلالية العميل والخادم والتخزين المؤقت الفعال، وهو أمر مهم بشكل خاص للتطبيقات المحمولة ذات الاتصالات الشبكية غير المستقرة.

الخلاصة

  • REST API — أسلوب معماري يعتمد على طرق HTTP للعمل مع الموارد
  • يستخدم GET و POST و PUT و PATCH و DELETE لعمليات CRUD على البيانات
  • يتم تحديد الموارد بواسطة URLs فريدة في هيكل هرمي
  • تنسيق البيانات — بشكل أساسي JSON، ونادرًا XML أو YAML
  • العميل والخادم مستقلان — التغييرات على الخادم لا تؤثر على العميل

ما هو REST API؟

REST API (واجهة برمجة تطبيقات نقل الحالة التمثيلية) هو أسلوب معماري اقترحه روي فيلدنغ في أطروحته للدكتوراه في عام 2000. يحدد مجموعة من القيود والمبادئ لتصميم بروتوكولات الشبكة. تسمى واجهة API التي تتوافق مع هذه القيود RESTful. REST ليس بروتوكولًا أو معيارًا — إنه نهج معماري يستخدم البروتوكولات الموجودة (بشكل أساسي HTTP) لتبادل البيانات بين العميل والخادم.

الفكرة الرئيسية لـ REST هي الهندسة الموجهة للموارد. بدلاً من استدعاء الطرق على الخادم (كما في SOAP أو RPC)، يتعامل العميل مع الموارد: يحصل على قوائمها، وينشئ موارد جديدة، ويحدّثها أو يحذفها. كل مورد هو كيان في مجال الموضوع: مستخدم، طلب، منتج، مقالة. للمورد حالة يتم نقلها إلى العميل بتنسيق موحد، عادةً JSON. لا يخزن الخادم حالة العميل بين الطلبات — هذا هو مبدأ stateless، وهو مطلب رئيسي لـ REST.

الخصائص الرئيسية لـ REST API:

  • Stateless — كل طلب من العميل يحتوي على جميع المعلومات اللازمة لمعالجته
  • Cacheable — يجب وضع علامة واضحة على استجابات الخادم على أنها قابلة للتخزين المؤقت أو غير قابلة
  • Layered system — يمكن أن تشمل البنية خوادم وسيطة وموازنات تحميل وبروكسيات
  • Uniform interface — واجهة تفاعل موحدة عبر طرق HTTP و URLs ورموز الحالة

مبادئ بنية REST

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

المبدأالوصفالمشكلة التي يحلها
Client-Serverفصل العميل والخادم، تطور مستقلاقتران المكونات
Statelessكل طلب يحتوي على جميع البيانات للمعالجةتوسيع نطاق الخوادم
Cacheableيتم وضع علامة على الاستجابات كقابلة للتخزين المؤقت أم لاتقليل حمل الشبكة
Layered Systemالطبقات الوسيطة غير مرئية للعميلالأمان وتوازن التحميل
Uniform Interfaceواجهة موحدة: الموارد والطرق ورموز الحالةتبسيط البنية
Code on Demandاختياري: نقل رمز قابل للتنفيذ إلى العميلقابلية التوسع في جانب العميل

مبدأ Uniform Interface يتضمن بالإضافة إلى ذلك أربعة قيود فرعية: تحديد الموارد عبر URI، والتعامل مع الموارد من خلال التمثيلات، والرسائل ذاتية الوصف، و HATEOAS (الوسائط الفائقة كمحرك لحالة التطبيق). غالبًا ما يتم تجاهل القيد الفرعي الأخير في الممارسة العملية — معظم واجهات REST API الحديثة لا تنفذ HATEOAS بشكل كامل، مما يؤدي إلى نقاشات حول ما إذا كانت واجهة API هذه RESTful «حقًا».

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

طرق HTTP في REST

كل طريقة HTTP في REST API تتوافق مع عملية محددة على مورد: GET للقراءة، POST للإنشاء، PUT للتحديث الكامل، PATCH للتحديث الجزئي، DELETE للحذف. تعتبر خاصية عدم التغيير (Idempotence) للطرق خاصية رئيسية: GET و PUT و DELETE غير قابلة للتغيير (التنفيذ المتكرر يعطي نفس النتيجة)، بينما POST و PATCH ليستا كذلك. هذا مهم لمعالجة أخطاء الشبكة عندما لا يعرف العميل ما إذا كان الطلب قد وصل إلى الخادم.

  • GET — الحصول على مورد أو قائمة موارد. غير قابل للتغيير، لا يغير حالة الخادم
  • POST — إنشاء مورد جديد. قابل للتغيير، كل استدعاء ينشئ موردًا جديدًا
  • PUT — استبدال كامل للمورد. غير قابل للتغيير، الاستدعاءات المتكررة لا تغير الحالة بعد الأول
  • PATCH — تحديث جزئي للمورد. غير قابل للتغيير جزئيًا (يعتمد على التنفيذ)
  • DELETE — حذف المورد. غير قابل للتغيير، الحذف المتكرر يُرجع 404 وليس خطأ

رموز حالة HTTP هي جزء لا يتجزأ من REST API. كل رمز يحمل معنى محددًا: 200 OK لـ GET ناجح، 201 Created لـ POST، 204 No Content لـ DELETE بدون نص استجابة، 400 Bad Request للبيانات غير الصالحة، 401 Unauthorized لغياب المصادقة، 404 Not Found لعدم وجود المورد. الاستخدام الصحيح لرموز الحالة يجعل API موثقًا ذاتيًا ويبسط التصحيح.

تنسيقات البيانات: JSON وغيرها

JSON (تدوين كائنات جافا سكريبت) هو التنسيق الرئيسي لنقل البيانات في REST API. ترجع شعبيته إلى البساطة وقابلية القراءة البشرية والدعم الأصلي في JavaScript. يتم نقل JSON مع الرأس Content-Type: application/json. تشمل البدائل XML (كبير الحجم، متقادم) و YAML (مناسب للتكوين، أقل شيوعًا لواجهات API) و Protocol Buffers (ثنائي، فعال للأنظمة عالية التحميل).

يتضمن هيكل كائن JSON في REST API عادةً حقول id و type وسمات المورد. للمجموعات، يتم استخدام مصفوفة JSON مع بيانات وصفية للترقيم. تتبع واجهات REST API الحديثة مواصفات JSON:API (jsonapi.org) أو JSON Schema للتحقق من صحة الاستجابات. استخدام تنسيق بيانات موحد يبسط تطوير مكتبات العميل وتوليد الوثائق.

مثال على استجابة JSON لقائمة المستخدمين:

js
{
    "data": [
        {
            "id": 1,
            "name": "آنا بيتروفا",
            "email": "anna@example.com"
        }
    ],
    "meta": {
        "total": 42,
        "page": 1,
        "per_page": 10
    }
}

يؤثر اختيار تنسيق نقل البيانات على أداء التطبيق المحمول. يتم ضغط JSON عبر GZIP بنسبة 70-80%، مما يجعله مقبولًا لمعظم السيناريوهات. للتطبيقات في الوقت الفعلي ذات كميات البيانات الكبيرة (البث المباشر، الألعاب)، يُنصح بالانتقال إلى البروتوكولات الثنائية أو استخدام WebSocket مع Protocol Buffers.

أمثلة على طلبات REST API

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

GET — الحصول على قائمة الطلبات

طلب للحصول على جميع طلبات المستخدم مع الترقيم. تحتوي الاستجابة على مصفوفة من كائنات الطلب ومعلومات وصفية للتنقل بين الصفحات. يتم تمرير المعلمات page و per_page عبر query string.

kotlin
// واجهة Retrofit لـ REST API
interface OrderApi {
    @GET("api/v1/orders")
    suspend fun getOrders(
        @Query("page") page: Int = 1,
        @Query("per_page") perPage: Int = 20
    ): Response<OrderListResponse>
}

POST — إنشاء طلب جديد

إنشاء طلب جديد عبر طلب POST. يُرجع الخادم الحالة 201 Created والكائن الذي تم إنشاؤه في نص الاستجابة. مهم: يتم الإنشاء على المجموعة /api/v1/orders، وليس على مورد محدد — هذا هو النمط RESTful القياسي.

kotlin
@POST("api/v1/orders")
suspend fun createOrder(
    @Body order: CreateOrderRequest
): Response<OrderResponse>

// مثال على نص الطلب
data class CreateOrderRequest(
    val productId: String,
    val quantity: Int,
    val addressId: String
)

DELETE — حذف طلب

يتم حذف المورد باستخدام طريقة DELETE على URL الطلب المحدد. يُرجع الحذف الناجح 204 No Content. خاصية عدم التغيير في DELETE تعني أن الطلب المتكرر لنفس URL يُرجع 404 Not Found، وهو ما يتم معالجته بشكل صحيح على العميل.

kotlin
@DELETE("api/v1/orders/{id}")
suspend fun deleteOrder(
    @Path("id") orderId: String
): Response<Unit>

// الاستخدام في ViewModel
fun removeOrder(orderId: String) {
    viewModelScope.launch {
        val response = api.deleteOrder(orderId)
        if (response.isSuccessful) {
            showSuccess()
        }
    }
}

توضح هذه الأمثلة تطبيقًا نموذجيًا لـ REST API في جانب Android باستخدام Retrofit و Kotlin Coroutines. لتطبيقات iOS، يؤدي URLSession أو مكتبة Alamofire مع بروتوكولات Codable دورًا مشابهًا. يظل هيكل REST API كما هو بغض النظر عن المنصة — فقط تتغير طريقة تنفيذ الطلبات.

تصميم RESTful API: توصيات عملية

يتطلب تصميم RESTful API عالي الجودة اتباع اتفاقيات تجعل واجهة API بديهية للمطورين. يجب تسمية الموارد بأسماء جمع (/users، /orders، /products)، ويجب أن تعكس طرق HTTP العمليات، ويجب أن تمثل URLs التسلسل الهرمي للتداخل. يجب أن تُرجع الأخطاء JSON موحدًا مع رمز ورسالة، وليس مجرد حالة HTTP. الامتثال لهذه الاتفاقيات يقلل من حاجز الدخول للمطورين الجدد ويبسط التكامل.

  • تسمية الموارد — جمع، kebab-case: /api/v1/user-orders، وليس /api/v1/getUserOrders
  • التصفية والترتيب — عبر معلمات query: ?status=active&sort=created_at:desc
  • الترقيم — قائم على المؤشر للمجموعات الكبيرة، قائم على الصفحة للصغيرة
  • الإصدارات — عبر URL (/api/v2/) أو رأس Accept-Version
  • الأخطاء — تنسيق موحد: { "error": { "code": "VALIDATION_ERROR", "message": "..." } }
  • تحديد المعدل — رؤوس X-RateLimit-Remaining و Retry-After

أحد الأخطاء الشائعة عند تصميم REST API هو التداخل المفرط للموارد. بدلاً من /users/1/orders/5/items/3، من الأفضل استخدام هيكل مسطح مع معلمات query: /items?order_id=5&user_id=1. هذا يبسط التخزين المؤقت، ولا يتطلب الحفاظ على مسارات طويلة على الخادم، وأسهل في التوثيق. كما أن البنية المسطحة أكثر توافقًا مع الاستعلامات القائمة على الرسم البياني عند الانتقال إلى GraphQL في المستقبل.

يتم تنفيذ أمان REST API من خلال المصادقة (JWT، OAuth 2.0) و التفويض على مستوى الموارد. يجب أن يتحقق كل طلب مما إذا كان المستخدم لديه حق الوصول إلى المورد المطلوب. HTTPS إلزامي — بدون تشفير، يتم نقل الرموز والبيانات بنص واضح. للتطبيقات المحمولة، يُنصح باستخدام OAuth 2.0 مع PKCE (Proof Key for Code Exchange) للحصول الآمن على الرموز.

الإصدارات والتخزين المؤقت

الإصدارات في REST API ضرورية للتوافق مع الإصدارات السابقة أثناء التغييرات. أشهر الأساليب: الإصدار في URL (/api/v1/orders)، والإصدار في الرأس (Accept: application/vnd.myapi.v1+json)، والإصدار في معلمة query (?api_version=1). يعتبر إصدار URL الطريقة الأكثر شيوعًا لأنه مرئي بوضوح في السجلات والوثائق. ومع ذلك، فإنه ينتهك مبدأ REST بوجود URL واحد لكل مورد.

التخزين المؤقت في REST API يتم تنفيذه عبر رؤوس HTTP Cache-Control و ETag و Last-Modified. يمكن خدمة طلبات GET المحددة على أنها قابلة للتخزين المؤقت من ذاكرة التخزين المؤقت للمتصفح أو البروكسي دون الاتصال بالخادم. بالنسبة للتطبيقات المحمولة، التخزين المؤقت مهم بشكل خاص — فهو يقلل من استهلاك البيانات ويسرع عرض البيانات المحملة مسبقًا في ظل الاتصال الضعيف. ETag هو تجزئة لمحتوى الاستجابة: يرسله العميل في If-None-Match، ويعيد الخادم 304 Not Modified إذا لم تتغير البيانات.

تشمل البدائل الحديثة لـ REST API GraphQL (جلب بيانات مرن من قبل العميل) و gRPC (بروتوكول ثنائي على HTTP/2 للخدمات المصغرة). ومع ذلك، يظل REST المعيار الرئيسي لواجهات API العامة بسبب بساطته وعموميته ودعمه الواسع للأدوات. يعتمد الاختيار بين REST والبدائل على متطلبات المشروع المحددة: تعقيد الاستعلامات، حجم البيانات، احتياجات التحديثات في الوقت الفعلي.

الأسئلة الشائعة

ما الفرق بين REST و RESTful؟

REST هو أسلوب معماري، مجموعة من المبادئ. RESTful هي API تتوافق مع هذه المبادئ. تلتزم RESTful API بمبادئ stateless والواجهة الموحدة والتخزين المؤقت والبنية العميل-خادم.

لماذا تستخدم REST API JSON بدلاً من XML؟

JSON أخف من XML (~30% أصغر حجمًا)، ويُحلل بشكل أسرع، وله دعم أصلي في JavaScript. لا يزال XML يُستخدم في SOAP والأنظمة القديمة، لكن JSON هو المعيار لواجهات API المحمولة.

كيف نضمن أمان REST API؟

استخدم HTTPS للتشفير، JWT أو OAuth 2.0 للمصادقة. أضف تحديد المعدل والتحقق من صحة المدخلات وسياسة CORS والتحقق من الأدوار في كل طلب.

ما هو HATEOAS في REST؟

HATEOAS هو مبدأ حيث تحتوي استجابة API على روابط للموارد ذات الصلة. «يتنقل» العميل عبر API من خلال هذه الروابط بدلاً من URLs المعروفة مسبقًا. في الممارسة العملية، نادرًا ما يتم تنفيذ HATEOAS بالكامل.

متى يجب التخلي عن REST؟

إذا كان جلب البيانات المرن مطلوبًا — انتقل إلى GraphQL. لـ الأداء العالي بين الخدمات المصغرة — gRPC. للتحديثات في الوقت الفعلي — WebSocket. REST هو الأمثل لمعظم واجهات API العامة.

الملخص

  • REST API — أسلوب معماري قائم على HTTP يستخدم نهجًا موجهًا للموارد
  • الطرق الرئيسية: GET و POST و PUT و PATCH و DELETE لعمليات CRUD
  • المبادئ: stateless والتخزين المؤقت والواجهة الموحدة والبنية العميل-خادم
  • تنسيق البيانات — JSON، يُنقل مع Content-Type: application/json
  • تُسمى الموارد بأسماء جمع مع هيكل URL هرمي
  • يتم إدارة الإصدارات عبر URL (/v1/، /v2/) أو رؤوس Accept
  • البدائل: GraphQL للاستعلامات المرنة، gRPC للخدمات المصغرة، WebSocket للوقت الفعلي

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا