Guzzle एक लोकप्रिय PHP HTTP क्लाइंट है जो HTTP अनुरोध भेजना और वेब सेवा लाइब्रेरी बनाना आसान बनाता है। सबसे लोकप्रिय PHP फ्रेमवर्क एक आंतरिक Http क्लाइंट सेवा प्रदान करते हैं, और वे बस Guzzle Http क्लाइंट का एक अनुकूलित कार्यान्वयन हैं:
गुज़ल का व्यापक रूप से दो मुख्य कारणों से उपयोग किया जाता है:
डिज़ाइन पैटर्न के प्रशंसकों के लिए गज़ल एक्सटेंशन के लिए खुला है। इसका मतलब है कि आप Guzzle के मुख्य घटकों (Http क्लाइंट, रिक्वेस्ट, रिस्पांस, माइल्डवेयर, आदि) का विस्तार करके नई कार्यक्षमताओं को आसानी से लागू कर सकते हैं।
गज़ल मिडलवेयर सिस्टम डेवलपर्स को अनुरोध भेजने से पहले उसके साथ इंटरैक्ट करने और उनके संसाधित होने से पहले प्रतिक्रिया देने की अनुमति देता है। यह लॉगिंग, प्रमाणीकरण और त्रुटि प्रबंधन जैसी उन्नत सुविधाओं को सक्षम कर सकता है।
इस ट्यूटोरियल में, मैं आपको एक कस्टम गज़ल एचटीपी क्लाइंट बनाने की प्रक्रिया के माध्यम से मार्गदर्शन करूंगा ताकि बाहरी सेवाओं के खिलाफ आपके एप्लिकेशन से किए गए प्रत्येक अनुरोध की निगरानी करना आसान हो सके।
मैं आपको यह भी दिखाऊंगा कि इस कार्यान्वयन को आपके पूरे एप्लिकेशन में उपलब्ध कराने के लिए IoC कंटेनर (या सेवा कंटेनर) में इस कार्यान्वयन को कैसे इंजेक्ट किया जाए।
हम बुनियादी बातों, अनुकूलन विकल्पों को कवर करेंगे, और वास्तविक कोड उदाहरण प्रदान करेंगे।
सुनिश्चित करें कि आपने Guzzle इंस्टॉल कर लिया है। यदि नहीं, तो इसे कंपोज़र का उपयोग करके इंस्टॉल करें:
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');
ये सभी विधियाँ सामान्य अनुरोध विधि का उपयोग करती हैं। नीचे दिया गया स्क्रीनशॉट गज़ल क्लाइंट कोड से लिया गया था:
आप अपने एप्लिकेशन द्वारा बाहरी सेवाओं के लिए किए गए 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}"); } }
इस उदाहरण में मैं प्रत्येक अनुरोध के लिए लेनदेन की समय-सीमा में एक नया आइटम जोड़ता हूं। अब आप अपने मॉनिटरिंग व्यू में गज़ल द्वारा की गई एपीआई कॉल देख सकते हैं:
यदि आप इंस्पेक्टर के लिए नए हैं तो आप शुरुआत करने के तरीके के बारे में इस ट्यूटोरियल का अनुसरण कर सकते हैं:
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');
मैं इस उदाहरण में लारवेल का उपयोग करने जा रहा हूं, लेकिन लेख की शुरुआत में उल्लिखित सबसे लोकप्रिय PHP फ्रेमवर्क के लिए मूल अवधारणा समान है। ये सभी एक सर्विस कंटेनर के साथ काम करते हैं।
हम Guzzle Http क्लाइंट वर्ग के लिए कंटेनर में एक सिंगलटन बाइंडिंग बनाते हैं। इसलिए इस वर्ग के लिए पूछने वाली प्रत्येक सेवा को हमारे कस्टम क्लाइंट का एक उदाहरण प्राप्त होगा जो वास्तविक समय की निगरानी का समर्थन करता है।
use GuzzleHttp\Client; use App\Extensions\Guzzle\CustomGuzzleClient; use Illuminate\Contracts\Foundation\Application; $this->app->singleton(Client::class, function (Application $app) { return new CustomGuzzleClient(); });
अब आप आर्टिसन कमांड में गज़ल एचटीपी क्लाइंट क्लास को इंजेक्ट करने का प्रयास कर सकते हैं और केवल परीक्षण के लिए एक एचटीपी कॉल चला सकते हैं:
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
इंस्पेक्टर एक कोड निष्पादन निगरानी उपकरण है जो विशेष रूप से सॉफ्टवेयर डेवलपर्स के लिए डिज़ाइन किया गया है। आपको अपने क्लाउड इंफ्रास्ट्रक्चर या सर्वर में कुछ भी इंस्टॉल करने की आवश्यकता नहीं है, बस कंपोजर पैकेज इंस्टॉल करें और आप जाने के लिए तैयार हैं।
अन्य जटिल, ऑल-इन-वन प्लेटफ़ॉर्म के विपरीत, इंस्पेक्टर सुपर आसान और PHP अनुकूल है। आप हमारे लारवेल या सिम्फनी पैकेज को आज़मा सकते हैं।
यदि आप प्रभावी स्वचालन, गहरी अंतर्दृष्टि, और अपने मैसेजिंग वातावरण में अलर्ट और सूचनाओं को अग्रेषित करने की क्षमता की तलाश में हैं तो इंस्पेक्टर को निःशुल्क आज़माएं। अपना खाता पंजीकृत करें।
या वेबसाइट पर अधिक जानें: https://inspector.dev
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3