PHP Academy · درس

إنشاء عميل API بسيط

غلّفوا استدعاءات cURL داخل فئة عميل API قابلة لإعادة الاستخدام في PHP

الدرس 4 من 413 خطوة

إنشاء عميل API بسيط درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

لماذا نغلّف cURL؟

تجمع فئة عميل API مخصصة المصادقة وعنوان URL الأساسي ومعالجة الأخطاء والتسجيل في مكان واحد، ما يتجنب تكرار التعليمات البرمجية التمهيدية في جميع أجزاء قاعدة التعليمات البرمجية.

هيكل فئة العميل

عميل API بسيط يتضمن عنوان URL أساسيًا ورمز مصادقة.

<?php
class ApiClient {
    public function __construct(
        private string $baseUrl,
        private string $token
    ) {}

    private function request(string $method, string $path, array $data = []): array {
        $ch = curl_init($this->baseUrl.$path);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST  => $method,
            CURLOPT_HTTPHEADER     => [
                "Authorization: Bearer ".$this->token,
                "Content-Type: application/json",
                "Accept: application/json",
            ],
        ]);
        if (!empty($data)) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        }
        $body   = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        if ($status >= 400) throw new RuntimeException("API error $status: $body");
        return json_decode($body, true, 512, JSON_THROW_ON_ERROR);
    }
}

أساليب GET وPOST

وفّر أساليب مريحة تفوّض العمل إلى الأسلوب الخاص request().

<?php
public function get(string $path): array {
    return $this->request("GET", $path);
}

public function post(string $path, array $body): array {
    return $this->request("POST", $path, $body);
}

استخدام العميل

أنشئ نسخة من العميل واستدعِ الأساليب ذات الأنواع بدلًا من استخدام cURL مباشرةً.

<?php
$client = new ApiClient("https://api.example.com", $apiToken);
$users  = $client->get("/v1/users");
$user   = $client->post("/v1/users", ["name" => "Alice", "email" => "alice@example.com"]);

معلمات سلسلة الاستعلام

أنشئ سلاسل الاستعلام باستخدام http_build_query().

<?php
public function get(string $path, array $params = []): array {
    $qs = $params ? "?".http_build_query($params) : "";
    return $this->request("GET", $path.$qs);
}
// Usage:
$users = $client->get("/v1/users", ["page" => 1, "limit" => 20]);

مساعد الترحيل

أضف دالة مساعدة لجمع جميع صفحات API المرقّمة تلقائيًا.

<?php
public function paginate(string $path): array {
    $all  = [];
    $page = 1;
    do {
        $res  = $this->get($path, ["page" => $page++]);
        $all  = array_merge($all, $res["data"]);
    } while ($res["has_more"] ?? false);
    return $all;
}

تخزين الاستجابات مؤقتًا

احقن طبقة للتخزين المؤقت لتجنب الطلبات المتكررة.

<?php
public function getCached(string $path, int $ttl = 60): array {
    $key = "api:".md5($path);
    if (apcu_exists($key)) return apcu_fetch($key);
    $data = $this->get($path);
    apcu_store($key, $data, $ttl);
    return $data;
}

التسجيل

أضف مسجّلًا متوافقًا مع PSR-3 لتسجيل كل طلب واستجابة بهدف تصحيح الأخطاء.

<?php
public function __construct(
    private string $baseUrl,
    private string $token,
    private ?\Psr\Log\LoggerInterface $logger = null
) {}

اختبار العميل

في اختبارات الوحدة، استبدل cURL بمعالج HTTP وهمي، مثل Guzzle MockHandler، لكي تعمل الاختبارات دون إجراء استدعاءات شبكة فعلية.

Guzzle كبديل

للاستخدام في بيئة الإنتاج، فكّر في استخدام Guzzle (composer require guzzlehttp/guzzle)، إذ يوفّر برمجيات وسيطة وطلبات غير متزامنة وواجهة متطورة.

خيار HTTP_FOUNDATION

يُعد Symfony HttpClient (symfony/http-client) بديلًا ممتازًا آخر، إذ يوفّر واجهة واضحة ودعمًا أصيلًا للطلبات غير المتزامنة.

الملخص

يقلل تغليف cURL داخل فئة من التكرار، ويجمع معالجة الأخطاء في مكان واحد، ويسهّل الاختبار. وفّر أساليب ذات أنواع، مثل get وpost، بدلًا من أفعال HTTP الخام.

تحقّق سريع

أي دالة في PHP تنشئ سلاسل استعلام عناوين URL؟

البدء مجانًا

تعلم PHP مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
49
الدروس
195

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

هل درس «إنشاء عميل API بسيط» مجاني؟

نعم — نص درس «إنشاء عميل API بسيط» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء عميل API بسيط»؟

غلّفوا استدعاءات cURL داخل فئة عميل API قابلة لإعادة الاستخدام في PHP تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «إنشاء عميل API بسيط»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ترميز JSON وفك ترميزه
  2. إجراء طلبات HTTP باستخدام cURL
  3. التعامل مع استجابات API وأخطائها
  4. إنشاء عميل API بسيط
← العودة إلى PHP Academy