How to Use Guzzle Rest Client with GitHub Rest Service

This tutorial help to create rest client using Guzzle library, which is a PHP rest client framework to consume rest service. I am creating a Client of the guzzle and access GitHub API. I will let you know how to access the first rest endpoint using the guzzle. You need to download Guzzle github.

The Guzzle has the following features,

  • All the power of cURL with a simple interface.
  • Powered by the Symfony2 EventDispatcher.
  • Includes a custom node.js webserver to test your clients.
  • Persistent connections and parallel requests.
  • Streams request and response bodies
  • Service descriptions for quickly building clients.
  • Use all of the code or only specific components.
  • Plugins for caching, logging, OAuth, mocks, and more

How to download and configure Guzzle

Step 1: Download the zip file from here.
Step 2: Extract the above zip file and copy all files into xampp/htdocs/guzzle_test folder.
Step 3: Now run composer update the command(please make sure your root folder is xampp/htdocs/guzzle_test), this command will download all dependency plugins into the vendor folder.
Step 4: Created a new test.php file and put the below code into this file.

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">require_once 'vendor/autoload.php';
use GuzzleHttp\Client;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://api.github.com/',
    // You can set any number of default request options.
    'timeout'  => 2.0,
            //ssl false
            'verify' => false
]); 
 
$response = $client->request('GET');
 
//$client = new Client('https://api.github.com/'); 
//$request = $client->get();
//$response = $request->send(); 
echo "</pre>
<!-- /wp:preformatted -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">";
echo $response->getBody();
?></pre>
<!-- /wp:preformatted -->

line #1 use for load all classes from the vendor folder and I am using a PHP 'use' operator, which will use for giving aliases to names of classes, interfaces or other namespaces.

line #5 created Client instances of guzzle which takes 'base_uri' : for base url ,’timeout' : request timeout of request and 'verify': is use non SSL verification.
after the rest client creation, I called the request method that will takes the rest endpoint and query as parameters, here I haven’t passed anything so that will access all GitHub rest endpoints.

to print the response, I am using getBody() method of guzzle.