Artigo Curl API (GET/POST/PUT/DELETE)
Tags: php, curl, poo, phppure
Published: 2020-02-22 11:17:52

---
title: Artigo Curl API (GET/POST/PUT/DELETE)
published: true
description: Chamadas de API cURL com dados PHP e json 
tags: php, cURL, POO, phpPure
---

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ginykp2f2b0h6ylavj8r.png)


# Chamadas da API cURL com dados PHP e json (GET POST PUT DELETE)

Recentemente surgiu uma task em um projeto compartilhado com um grupo de programadores, consumir uma API Rest externa usando solicitações HTTP cURL em um simples projeto, eu já havia lido sobre, até tinha feito algumas usando outras APIs, mas com a falta de pratica acabamos não lembrando, escrevo esse artigo mais para eu poder me lembrar das chamadas que aprendi nos estudos e poder ajudar vocês. 

# Curl Simples 

Para implementar uma simples API no projeto você pode usar algumas simples chamadas:

<pre class="javascript">
<code>
$url = "https://reqres.in/api/users?page=2";
$ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
  		curl_close($ch);

$users = json_decode($response, true);
$user = $users['data']; 
</code>
</pre>


Nesse caso, o código vai consumir os dados do array contidos na page $url e depois transforma em json através do json_decode(), usar true para ele validar o array, assim facilitando o retorno.

# cURL Composto com os Requests
 

Mas vamos nos aprofundar mais criando scripts PHP que permite chamar essa função, como um conjunto de parâmetros, para que a solicitação cURL seja feita e você possa usar o codigo para qualquer tipo de API-HTTP.


<b> - Coloque o arquivo da função geral que possa ser acessado por todo o projeto.
- app/module 
</b>

<pre class="javascript">
<code>
 function pullAPI($param1, $uri, $data){
   $curl = curl_init();
   switch ($param1){
      case "POST":
         curl_setopt($curl, CURLOPT_POST, 1);
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
         break;
      case "PUT":
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);			 					
         break;
      default:
         if ($data)
            $uri = sprintf("%s?%s", $uri, http_build_query($data));
   }
   // OPTIONS:
   curl_setopt($curl, CURLOPT_URL, $uri);
   curl_setopt($curl, CURLOPT_HTTPHEADER, array(
      'APIKEY: 111111111111111111111',
      'Content-Type: application/json',
   ));
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
   // EXECUTE:
   $result = curl_exec($curl);
   if(!$result){die("Connection Failure");}
   curl_close($curl);
   return $result;
}
</code>
</pre>

Está função é simples, usando uma instrução SWITCH para verificar se a chamada da API será por POST ou PUT, até mesmo GET ou DELETE, vou me aprofundar mais no caso de troca enquanto estamos realizando solicitações específicas.  

Estou usando if dentro dos blocos de SWITCH para fornecer dados json em nossa chamada ou não .. $data = dados json. Para solicitar POST e PUT a instrução if não é realmente necessária, porque estamos usando apenas POST ou PUT como dados, mas é uma segurança para garantira que nossa função não seja interrompida 

 # Criando a chamada GET 
 
A chamada mais simples é a GET, então vamos lá .. nessa nossa função pullAPI esperamos três parâmetros $param1, $uri, e a $data, precisamos fornecer esses três para todas as chamadas de API, então podemos definir o $data como false, pois não estamos transmitindo nenhum dado com a chamada GET, agora no arquivo index.php na raiz do projeto vamos fazer uma chamada passando os 3 parâmetros de uma API qualquer, usaremos a API da reqres.in como exemplo. 

Primeiro faça a chamada do arquivo da função pullAPI 

<pre class="javascript">
<code>
require_once('app/modules/reqres.api.php');
</code>
</pre>

Depois vamos chamar o método GET.

<pre class="javascript">
<code>
$get_data = pullAPI('GET', 'https://reqres.in/api/users?page=2', false);
$get_users = json_decode($get_data, true);

// parametros de erros 
$errors = $get_users['get_users']['erros'];
// patametros de arrays usabeis no php
$data = $get_users['response']['data']['0'];
</code></pre>

 A função setada na variavel $get_data , pullAPI passa 3 parâmetros, qual o metodo = GET , a url 'https://reqres.in/api/users' e o data como não está passando nenhum dado, passamos 'false' como parâmetro.

Para testar o código de um `print_r($get_users);` para ver o retorno em tela.  
 
 
# Criando a chamada Post 

A Solicitação POST requer dados, por isso temos que passar os 3 parâmetros ao final, como nesse método vamos enviar dados é obrigatório passar o parâmetro que será enviado, no local de $data que é o ultimo parâmetro vamos criar um array com os dados a ser enviados como POST.

<pre class="javascript">
<code>
array(
    'id' => '13',
    'first_name' => 'firstname',
    'last_name' => 'lastname',
    'email' => 'email@email.com.br',
    'avatar' => 'linkdoavatar.com.br/link.jpg'
);
</code></pre>
 
podemos setar isso em uma variável $data_array , ficando o código assim, chamando a função com os 3 parâmetros e retornando o json.

<pre class="javascript">
<code>
 $data_array = array(
    'id' => '16',
    'first_name' => 'flavio',
    'last_name' => 'ribeiro',
    'email' => 'devflavioribeiro@gmail.com',
);
$make_call = pullAPI('POST', 'https://reqres.in/api/users', json_encode($data_array));
$response = json_decode($make_call, true);
</code></pre>

ao rodar var_dump($response);
Retorna o json a ser enviado com método Post.


# Criando a chamada PUT

A Solicitação de PUT é a mesma que a do Post, a diferença é que o PUT é uma envio mais específico, e usada quando desejamos enviar somente a informação a ser armazenada, podemos usar os mesmos parâmetros do Post. 

* Nesse caso agora vamos transformar nossa passagem de parâmetro personalizada para realização de um UPDATE.
* Mais detalhado para depois jogar tudo dentro das funções corretamente, mas vamos passo a passo para aprender a linha de raciocínio ao desenvolver o código. 

Com o PUT podemos usar a base da estrutura de array do POST, a diferença agora que vamos passar variáveis por parâmetro dentro do array. 

<pre class="javascript">
<code>
$id = '6';
$email = 'devflavioribeiro@gmail.com';
$first_name = 'Flavio';
$last_name  = 'Ribeiro'; 
$avatar = 'http://flavioAPI.com.br/img.jpg';
</code></pre>

Logo após criamos o array associativo para dar UPDATE:

<pre class="javascript">
<code>
$data_array =  array(
    'id' => $id,
    'email' => $email,
    'first_name' => $first_name,
    'last_name' => $last_name,
    'avatar' => $avatar
 );
</code></pre>


Assim vamos usar a mesma chamada da função pullAPI passando novamente 3 parâmetros mas dessa vez com uma diferença, pois como é um UPDATE ele deve conter no URL uma concatenação de uma variável para definir qual o usuário que esta fazendo o update, então no codigo fica assim:

<pre class="javascript">
<code>
$update_plan = pullAPI('PUT', 'https://reqres.in/api/users/' . $id, json_encode($data_array));
$response = json_decode($update_plan, true);
</code></pre>

# Criando a chamada DELETE 

Ultimo método é o DELETE, que é a solicitação de exclusão bem simples, nesse caso é necessário aplicar na URL qual o $id que vamos deletar, não sendo necessário passar ele por array, então o código fica assim:

<pre class="javascript">
<code>
$id = '3';
$delete_user = pullAPI('DELETE', 'https://reqres.in/api/users/' . $id, false);
$usuariodeletado = json_decode($delete_user, true);


if(isset($delete_user)){
    echo "O Usuário " . $usuariodeletado['data']['first_name'] . " Foi deletado" . "<br>";
}else {
    echo "Usuário não encontrado";
}
</code></pre>

Então na variável $id podemos colocar o id do usuário que vai ser deletado, chamamos a classe , passamos os 3 parâmetros, como não estamos enviando dados, usamos o 'false' no ultimo parâmetro, e fazemos uma validação do $delete_user para saber qual o usuário que deletamos, usei somente o 'first_name' mas podemos usar toda as informações da lista do json. 


Aqui foi uma breve explicação de como criar uma classe automatizada para consumir uma API cURL com os dados em Json usando PHP, aqui temos uma gama de modificações para fazer , podemos criar funções usando esse parâmetros para cada método, mas quis fazer de uma forma simples e rápida, com uma didática limpa, espero que tenham gostado. 


----
Author
Flávio Ribeiro
Desenvolvedor Web