Guzzle هو عميل PHP HTTP شائع يسهل إرسال طلبات HTTP وإنشاء مكتبات خدمات الويب. توفر أطر عمل PHP الأكثر شيوعًا خدمة عميل Http داخلية، وهي ببساطة عبارة عن تطبيق مخصص لعميل Guzzle Http:
يستخدم Guzzle على نطاق واسع لسببين رئيسيين:
لمحبي أنماط التصميم، Guzzle مفتوح للإضافات. يعني أنه يمكنك بسهولة تنفيذ وظائف جديدة في Guzzle من خلال توسيع مكوناته الأساسية (Http Client، Request، Response، Milddeware، وما إلى ذلك).
يسمح نظام البرامج الوسيطة Guzzle للمطورين بالتفاعل مع الطلب قبل إرساله والاستجابة قبل معالجته. يمكنه تمكين الميزات المتقدمة مثل التسجيل والمصادقة ومعالجة الأخطاء.
في هذا البرنامج التعليمي، سأرشدك خلال عملية إنشاء عميل Guzzle Http مخصص لتسهيل مراقبة كل طلب يتم إجراؤه من تطبيقك مقابل الخدمات الخارجية.
سأوضح لك أيضًا كيفية إدخال هذا التنفيذ في حاوية IoC (أو حاوية الخدمات) لإتاحة هذا التنفيذ في جميع أنحاء التطبيق الخاص بك.
سنغطي الأساسيات وخيارات التخصيص ونقدم أمثلة حقيقية على التعليمات البرمجية.
تأكد من تثبيت Guzzle. إذا لم يكن الأمر كذلك، فقم بتثبيته باستخدام Composer:
composer require guzzlehttp/guzzle
لنبدأ بإنشاء عميل Guzzle Http أساسي مخصص:
namespace App\Extensions\Guzzle; use GuzzleHttp\Client; class CustomGuzzleClient extends Client { public function __construct(array $config = []) { $config['headers']['Custom-Header'] = 'Custom-Value'; parent::__construct($config); } }
في هذا المثال، قمنا بتوسيع فئة عميل Guzzle Http وقمنا بتخصيص المُنشئ لإضافة رأس مخصص لجميع الطلبات المقدمة من هذا العميل.
يوفر Guzzle طرقًا مختصرة لتشغيل طلبات Http:
$client->get('/endpoint'); $client->post('/endpoint'); $client->put('/endpoint');
تستخدم كل هذه الطرق طريقة الطلب العامة بالداخل. تم التقاط لقطة الشاشة أدناه من كود Guzzle Client:
يمكنك تجاوز طريقة الطلب لتخصيص إدارة مكالمات HTTP التي يجريها تطبيقك إلى الخدمات الخارجية.
namespace App\Extensions\Guzzle; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; class CustomGuzzleClient extends Client { public function request($method, $uri, array $options = []) { return inspector()->addSegment(function () use ($method, $uri, $options) { return parent::request($method, $uri, $options); }, "http", "{$method} {$uri}"); } }
في هذا المثال أقوم فقط بإضافة عنصر جديد في الجدول الزمني للمعاملة لكل طلب. يمكنك الآن رؤية استدعاءات واجهة برمجة التطبيقات (API) التي أجراها Guzzle في عرض المراقبة الخاص بك:
إذا كنت جديدًا في Inspector، فيمكنك اتباع هذا البرنامج التعليمي حول كيفية البدء:
https://inspector.dev/laravel-real-time-performance-monitoring-using-inspector-part-1/
يمكنك أيضًا إدخال معلمة المقطع في رد الاتصال للتفاعل مع العنصر أو إضافة المزيد من المعلومات:
namespace App\Extensions\Guzzle; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; use Inspector\Models\Segment; class CustomGuzzleClient extends Client { public function request($method, $uri, array $options = []) { return inspector()->addSegment(function (Segment $segment) use ($method, $uri, $options) { $response = parent::request($method, $uri, $options); $segment->label = "{$response->getStatusCode()} {$method} {$uri}"; return $response; }, "http"); } }
الآن، يمكنك استخدام عميلك المخصص في تطبيقك. نظرًا لأن الامتداد لا يُحدث أي تغيير في سلوك عميل Guzzle Http القياسي، فيمكنك إنشاء مثيل للفئة المخصصة واستخدامها كالمعتاد:
// Create an instance of the custom client $client = new CustomGuzzleClient(['base_uri' => 'https://api.example.com']); // Make an API request. It will be automatically monitored by Inspector. $response = $client->get('/endpoint');
سأستخدم Laravel في هذا المثال، لكن المفهوم الأساسي هو نفسه بالنسبة لأطر PHP الأكثر شيوعًا المذكورة في بداية المقالة. كلهم يعملون مع حاوية الخدمة.
نقوم بإنشاء ربط مفرد في الحاوية لفئة Guzzle Http Client. لذا فإن كل خدمة تطلب هذه الفئة ستتلقى مثيلًا لعميلنا المخصص الذي يدعم المراقبة في الوقت الفعلي.
use GuzzleHttp\Client; use App\Extensions\Guzzle\CustomGuzzleClient; use Illuminate\Contracts\Foundation\Application; $this->app->singleton(Client::class, function (Application $app) { return new CustomGuzzleClient(); });
يمكنك الآن محاولة إدخال فئة Guzzle Http Client في أمر Artisan وتشغيل استدعاء Http للاختبار فقط:
namespace App\Console\Commands; use Illuminate\Console\Command; use GuzzleHttp\Client; class TryCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'try'; /** * The console command description. * * @var string */ protected $description = 'Test Guzzle Http Client monitoring.'; /** * Inject the Guzzle Http Client class into the constructor. * The CustomGuzzleClient will be the concrete class. */ public function __construct(protected Client $client) { parent::__construct(); } /** * Handle the command execution. */ public function handle() { $this->line($this->description); $this->line("Concrete class: ".get_class($this->client)); $this->client->get('https://google.com'); return Command::SUCCESS; } }
قم بتشغيل الأمر للتحقق مما إذا كان اتصال Http سيكون مرئيًا في المخطط الزمني للمعاملة:
php artisan try
Inspector عبارة عن أداة لمراقبة تنفيذ التعليمات البرمجية مصممة خصيصًا لمطوري البرامج. لا تحتاج إلى تثبيت أي شيء في البنية التحتية السحابية أو الخوادم الخاصة بك، فقط قم بتثبيت حزمة الملحن وستكون جاهزًا للبدء.
على عكس الأنظمة الأساسية المعقدة الأخرى، فإن Inspector سهل للغاية، وصديق PHP. يمكنك تجربة حزمة Laravel أو Symfony الخاصة بنا.
إذا كنت تبحث عن أتمتة فعالة، ورؤى عميقة، والقدرة على إعادة توجيه التنبيهات والإشعارات إلى بيئة المراسلة الخاصة بك، فجرب Inspector مجانًا. سجل حسابك.
أو تعرف على المزيد على الموقع: https://inspector.dev
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3