Guzzle: um cliente HTTP para php

Em uma época onde a interoperabilidade entre sistemas tem se tornado cada vez mais importante e a criação/utilização de APIs é cada vez mais ascendente, é sempre importante pensarmos no consumo de serviços de terceiros dentro de nossos projetos.

No php, apesar de ser relativamente simples fazer requisições “http” com os recursos nativos da própria linguagem, o recomendado é que seja utilizado uma biblioteca para essa finalidade, uma vez que assim temos mais segurança e recursos que facilitam e que tornam mais ágil esse procedimento.

Uma das bibliotecas “http client” mais populares para a linguagem php é o Guzzle (https://docs.guzzlephp.org/en/stable/), que segundo a própria documentação oficial, “é um cliente PHP HTTP que torna fácil o envio de requisições HTTP e trivial para a integração com web services“.

Sendo assim, o intuito desse post é mostrar para vocês como fazer requisições HTTP no php utilizando o Guzzle.

Antes de mais nada, precisamos instalar o Guzzle em nosso projeto. Para fazer isso, vou utilizar o Composer:

composer require guzzlehttp/guzzle:^7.0

Uma vez acoplado, para fazer requisições básicas utilizando o Guzzle é simples. Basta instanciar a classe Guzzle\Client

1
2
3
4
5
6
<?php
require 'vendor/autoload.php';
 
use GuzzleHttp\Client;
 
$client = new Client();

O objeto $client provê o método request onde passamos no primeiro parâmetro o tipo da requisição (Ex: GET, POST, PUT ou DELETE) e no segundo a URL do web service que será consumido.

Vamos supor, por exemplo, a chamada de um serviço na API REST do Github (https://docs.github.com/pt/rest). Vamos consumir os dados da URL: https://api.github.com/users/rafaelwendel

Através dessa chamada, será retornado um JSON com os dados do usuário rafaelwendel

1
2
3
4
5
6
7
8
<?php
require 'vendor/autoload.php';
 
use GuzzleHttp\Client;
 
$client = new Client();
$response = $client->request('GET', 'https://api.github.com/users/rafaelwendel');
echo $response->getBody();

A variável $response vai receber todos os dados retornados a partir da requisição solicitada. A execução do código acima vai produzir o seguinte resultado:

{
  "login": "rafaelwendel",
  "id": 2855089,
  "node_id": "MDQ6VXNlcjI4NTUwODk=",
  "avatar_url": "https://avatars.githubusercontent.com/u/2855089?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/rafaelwendel",
  "html_url": "https://github.com/rafaelwendel",
  "followers_url": "https://api.github.com/users/rafaelwendel/followers",
  "following_url": "https://api.github.com/users/rafaelwendel/following{/other_user}",
  "gists_url": "https://api.github.com/users/rafaelwendel/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/rafaelwendel/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/rafaelwendel/subscriptions",
  "organizations_url": "https://api.github.com/users/rafaelwendel/orgs",
  "repos_url": "https://api.github.com/users/rafaelwendel/repos",
  "events_url": "https://api.github.com/users/rafaelwendel/events{/privacy}",
  "received_events_url": "https://api.github.com/users/rafaelwendel/received_events",
  "type": "User",
  "site_admin": false,
  "name": "Rafael Pinheiro",
  "company": null,
  "blog": "https://www.rafaelwendel.com",
  "location": "Capivari-SP, Brasil",
  "email": null,
  "hireable": null,
  "bio": "Professor no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - Campus Capivari.",
  "twitter_username": null,
  "public_repos": 10,
  "public_gists": 0,
  "followers": 19,
  "following": 15,
  "created_at": "2012-11-21T15:57:59Z",
  "updated_at": "2021-04-18T20:27:41Z"
}

Para facilitar a manipulação/utilização dos dados retornados, podemos converter o JSON para um objeto do php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
require 'vendor/autoload.php';
 
use GuzzleHttp\Client;
 
$client = new Client();
$response = $client->request('GET', 'https://api.github.com/users/rafaelwendel');
 
//converts to php object
$github_user = json_decode($response->getBody());
 
//prints the "name" (Rafael Pinheiro)
echo $github_user->name;
 
//prints the "blog" (https://www.rafaelwendel.com)
echo $github_user->blog;

Espero que gostem do conteúdo e qualquer dúvida é só deixar um comentário.

Abs!

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *